@sapui5/sap.fe.macros 1.139.0 → 1.139.4
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/Chart.js +1 -1
- package/src/sap/fe/macros/Chart.tsx +1 -1
- package/src/sap/fe/macros/RichTextEditor.js +1 -2
- package/src/sap/fe/macros/RichTextEditor.tsx +0 -1
- package/src/sap/fe/macros/ValueHelp.js +4 -28
- package/src/sap/fe/macros/ValueHelp.tsx +2 -42
- package/src/sap/fe/macros/chart/MdcChartTemplate.js +2 -4
- package/src/sap/fe/macros/chart/MdcChartTemplate.tsx +1 -4
- package/src/sap/fe/macros/controls/BuildingBlockObjectProperty.js +5 -1
- package/src/sap/fe/macros/controls/BuildingBlockObjectProperty.ts +4 -0
- package/src/sap/fe/macros/controls/FilterBar.js +39 -3
- package/src/sap/fe/macros/controls/FilterBar.ts +42 -1
- package/src/sap/fe/macros/controls/Section.js +3 -2
- package/src/sap/fe/macros/controls/Section.ts +2 -1
- package/src/sap/fe/macros/coreUI/CreateDialog.js +2 -2
- package/src/sap/fe/macros/coreUI/CreateDialog.tsx +1 -1
- package/src/sap/fe/macros/coreUI/OperationParameterDialog.js +8 -8
- package/src/sap/fe/macros/coreUI/OperationParameterDialog.tsx +7 -7
- package/src/sap/fe/macros/draftIndicator/DraftIndicator.js +2 -2
- package/src/sap/fe/macros/draftIndicator/DraftIndicator.tsx +1 -1
- package/src/sap/fe/macros/field/FieldBaseDelegate.js +13 -7
- package/src/sap/fe/macros/field/FieldBaseDelegate.ts +12 -8
- package/src/sap/fe/macros/field/FieldRuntime.js +38 -8
- package/src/sap/fe/macros/field/FieldRuntime.ts +65 -7
- package/src/sap/fe/macros/filter/FilterUtils.js +7 -1
- package/src/sap/fe/macros/filter/FilterUtils.ts +7 -0
- package/src/sap/fe/macros/filterBar/FilterBarAPI.js +5 -3
- package/src/sap/fe/macros/filterBar/FilterBarAPI.ts +13 -3
- package/src/sap/fe/macros/filterBar/mixin/FilterBarAPIStateHandler.js +4 -3
- package/src/sap/fe/macros/filterBar/mixin/FilterBarAPIStateHandler.ts +3 -2
- package/src/sap/fe/macros/form/Form.block.js +6 -2
- package/src/sap/fe/macros/form/Form.block.ts +4 -1
- package/src/sap/fe/macros/form/FormDelegate.js +20 -1
- package/src/sap/fe/macros/form/FormDelegate.ts +25 -0
- package/src/sap/fe/macros/internal/field/DisplayStyle.js +4 -2
- package/src/sap/fe/macros/internal/field/DisplayStyle.tsx +3 -1
- package/src/sap/fe/macros/internal/helpers/DataPointTemplating.js +6 -2
- package/src/sap/fe/macros/internal/helpers/DataPointTemplating.ts +5 -1
- package/src/sap/fe/macros/internal/valuehelp/TableDelegate.js +4 -4
- package/src/sap/fe/macros/internal/valuehelp/TableDelegate.ts +3 -3
- package/src/sap/fe/macros/internal/valuehelp/ValueListHelper.js +5 -1
- package/src/sap/fe/macros/internal/valuehelp/ValueListHelper.ts +4 -0
- package/src/sap/fe/macros/library.js +1 -1
- package/src/sap/fe/macros/mdc/adapter/StateHelper.js +15 -5
- package/src/sap/fe/macros/mdc/adapter/StateHelper.ts +21 -5
- package/src/sap/fe/macros/table/MdcTableTemplate.js +3 -1
- package/src/sap/fe/macros/table/MdcTableTemplate.tsx +2 -1
- package/src/sap/fe/macros/table/Table.js +7 -1
- package/src/sap/fe/macros/table/Table.tsx +7 -1
- package/src/sap/fe/macros/table/TableAPI.js +8 -1
- package/src/sap/fe/macros/table/TableAPI.ts +15 -2
- package/src/sap/fe/macros/table/TableSizeHelper.js +3 -3
- package/src/sap/fe/macros/table/TableSizeHelper.ts +5 -2
- package/src/sap/fe/macros/table/TreeTable.js +7 -1
- package/src/sap/fe/macros/table/TreeTable.tsx +7 -1
- package/src/sap/fe/macros/table/delegates/TableDelegate.js +3 -2
- package/src/sap/fe/macros/table/delegates/TableDelegate.ts +10 -3
- package/src/sap/fe/macros/table/massEdit/MassEditDialog.js +10 -10
- package/src/sap/fe/macros/table/massEdit/MassEditDialog.tsx +11 -9
- package/src/sap/fe/macros/table/massEdit/MassEditDialogHelper.js +8 -8
- package/src/sap/fe/macros/table/massEdit/MassEditDialogHelper.tsx +7 -6
- package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.js +27 -3
- package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.ts +28 -2
- package/src/sap/fe/macros/visualfilters/VisualFilter.js +20 -2
- package/src/sap/fe/macros/visualfilters/VisualFilter.tsx +28 -6
|
@@ -131,8 +131,12 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/core/formatters/ValueFormat
|
|
|
131
131
|
}
|
|
132
132
|
outExpression.formatOptions = Object.assign(outExpression.formatOptions, {
|
|
133
133
|
preserveDecimals: false,
|
|
134
|
-
maxFractionDigits: numberOfFractionalDigits
|
|
134
|
+
maxFractionDigits: numberOfFractionalDigits,
|
|
135
|
+
minFractionDigits: numberOfFractionalDigits
|
|
135
136
|
});
|
|
137
|
+
//we need to ignore the constraints otherwise the scale mess up the formatting by adding trailing zeros
|
|
138
|
+
// 1.234 with maxFractionDigits 2 and scale 4 will become 1.2300
|
|
139
|
+
outExpression.constraints = {};
|
|
136
140
|
}
|
|
137
141
|
return outExpression;
|
|
138
142
|
};
|
|
@@ -226,4 +230,4 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/core/formatters/ValueFormat
|
|
|
226
230
|
_exports.buildExpressionForProgressIndicatorPercentValue = buildExpressionForProgressIndicatorPercentValue;
|
|
227
231
|
return _exports;
|
|
228
232
|
}, false);
|
|
229
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ0eXBlc1N1cHBvcnRpbmdOdW1iZXJPZkZyYWN0aW9uYWxEaWdpdHMiLCJnZXREYXRhUG9pbnRUYXJnZXRFeHByZXNzaW9uIiwib0RhdGFNb2RlbFBhdGgiLCJyZWxhdGl2ZUxvY2F0aW9uIiwiVGFyZ2V0VmFsdWUiLCJnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24iLCJ1bnJlc29sdmFibGVFeHByZXNzaW9uIiwib1Jlc291cmNlTW9kZWwiLCJMaWJyYXJ5IiwiZ2V0UmVzb3VyY2VCdW5kbGVGb3IiLCJidWlsZEV4cHJlc3Npb25Gb3JQcm9ncmVzc0luZGljYXRvckRpc3BsYXlWYWx1ZSIsIm9Qcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGgiLCJmaWVsZFZhbHVlIiwidGFyZ2V0T2JqZWN0IiwiVmFsdWUiLCJnZXRSZWxhdGl2ZVBhdGhzIiwiZmllbGRWYWx1ZUV4cHJlc3Npb24iLCJ0YXJnZXRFeHByZXNzaW9uIiwiaXNQcm9wZXJ0eSIsIiR0YXJnZXQiLCJ1bml0IiwiYW5ub3RhdGlvbnMiLCJNZWFzdXJlcyIsIlVuaXQiLCJJU09DdXJyZW5jeSIsImdldFRleHQiLCJjb21waWxlRXhwcmVzc2lvbiIsImhhc1N0YXRpY1BlcmNlbnRVbml0IiwidW5pdEJpbmRpbmdFeHByZXNzaW9uIiwiZm9ybWF0V2l0aFR5cGVJbmZvcm1hdGlvbiIsImlzQ3VycmVuY3kiLCJyZXF1ZXN0Q3VzdG9tVW5pdHMiLCJwYXRoSW5Nb2RlbCIsInRhcmdldFR5cGUiLCJtb2RlIiwiZm9ybWF0UmVzdWx0IiwidmFsdWVGb3JtYXR0ZXJzIiwiZm9ybWF0UHJvZ3Jlc3NJbmRpY2F0b3JUZXh0IiwidW5kZWZpbmVkIiwiX2V4cG9ydHMiLCJidWlsZFJhdGluZ0luZGljYXRvclN1YnRpdGxlRXhwcmVzc2lvbiIsIm9Db250ZXh0IiwibVNhbXBsZVNpemUiLCJmb3JtYXRSYXRpbmdJbmRpY2F0b3JTdWJUaXRsZSIsIkFubm90YXRpb25IZWxwZXIiLCJ2YWx1ZSIsImNvbnRleHQiLCJpU2FtcGxlU2l6ZVZhbHVlIiwic1N1YlRpdGxlTGFiZWwiLCJTdHJpbmciLCJnZXRIZWFkZXJSYXRpbmdJbmRpY2F0b3JUZXh0Iiwib0RhdGFQb2ludCIsInJlc3VsdCIsIlNhbXBsZVNpemUiLCJEZXNjcmlwdGlvbiIsInNNb2RlbFZhbHVlIiwicmVxdWlyZXNJQ29udGV4dCIsImJ1aWxkRXhwcmVzc2lvbkZvckRlc2NyaXB0aW9uIiwiQ29tbW9uIiwiVGV4dCIsIm9UZXh0RXhwcmVzc2lvbiIsImlzUGF0aEluTW9kZWxFeHByZXNzaW9uIiwicGFyYW1ldGVycyIsIiQkbm9QYXRjaCIsImdldEZsb2F0Rm9ybWF0Iiwib3V0RXhwcmVzc2lvbiIsIm51bWJlck9mRnJhY3Rpb25hbERpZ2l0cyIsImZvcm1hdE9wdGlvbnMiLCJPYmplY3QiLCJhc3NpZ24iLCJwcmVzZXJ2ZURlY2ltYWxzIiwibWF4RnJhY3Rpb25EaWdpdHMiLCJnZXRWYWx1ZUZvcm1hdHRlZCIsIm9Qcm9wZXJ0eURhdGFNb2RlbFBhdGgiLCJzUHJvcGVydHlUeXBlIiwic051bWJlck9mRnJhY3Rpb25hbERpZ2l0cyIsInBhdGgiLCJpbmNsdWRlcyIsIm9Qcm9wZXJ0eURlZmluaXRpb24iLCJ0eXBlIiwiRURNX1RZUEVfTUFQUElORyIsImJ1aWxkRmllbGRCaW5kaW5nRXhwcmVzc2lvbiIsImRhdGFQb2ludEZvcm1hdE9wdGlvbnMiLCJiSGlkZU1lYXN1cmUiLCJvRGF0YVBvaW50VmFsdWUiLCJwcm9wZXJ0eVR5cGUiLCJWYWx1ZUZvcm1hdCIsIk51bWJlck9mRnJhY3Rpb25hbERpZ2l0cyIsImVuaGFuY2VEYXRhTW9kZWxQYXRoIiwib0Rlc2NyaXB0aW9uIiwib0Zvcm1hdHRlZFZhbHVlIiwic0Rpc3BsYXlNb2RlIiwiZGlzcGxheU1vZGUiLCJnZXREaXNwbGF5TW9kZSIsIm9CaW5kaW5nRXhwcmVzc2lvbiIsImZvcm1hdFdpdGhCcmFja2V0cyIsIlRpbWV6b25lIiwiZ2V0QmluZGluZ1dpdGhUaW1lem9uZSIsIklzVGltZXpvbmUiLCJnZXRCaW5kaW5nRm9yVGltZXpvbmUiLCJVSSIsIkRhdGVUaW1lU3R5bGUiLCJkYXRlVGltZVBhdHRlcm4iLCJnZXRCaW5kaW5nRm9yRGF0ZUZvcm1hdCIsIl9jb21wdXRlQmluZGluZ1dpdGhVbml0T3JDdXJyZW5jeSIsIm1lYXN1cmVEaXNwbGF5TW9kZSIsInNob3dPbmx5VW5pdERlY2ltYWxzIiwicHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoIiwiZm9ybWF0dGVkVmFsdWUiLCJoaWRlTWVhc3VyZSIsImdldEJpbmRpbmdXaXRoVW5pdE9yQ3VycmVuY3kiLCJzaG93TWVhc3VyZSIsImJ1aWxkRXhwcmVzc2lvbkZvclByb2dyZXNzSW5kaWNhdG9yUGVyY2VudFZhbHVlIiwiY29tcHV0ZVBlcmNlbnRhZ2UiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIkRhdGFQb2ludFRlbXBsYXRpbmcudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24sIFByaW1pdGl2ZVR5cGUsIFByb3BlcnR5IH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgdHlwZSB7IERhdGFQb2ludFR5cGUgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1VJXCI7XG5pbXBvcnQgdHlwZSB7IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiwgQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24sIFBhdGhJbk1vZGVsRXhwcmVzc2lvbiB9IGZyb20gXCJzYXAvZmUvYmFzZS9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHtcblx0RURNX1RZUEVfTUFQUElORyxcblx0Y29tcGlsZUV4cHJlc3Npb24sXG5cdGZvcm1hdFJlc3VsdCxcblx0Zm9ybWF0V2l0aFR5cGVJbmZvcm1hdGlvbixcblx0Z2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uLFxuXHRpc1BhdGhJbk1vZGVsRXhwcmVzc2lvbixcblx0cGF0aEluTW9kZWwsXG5cdHVucmVzb2x2YWJsZUV4cHJlc3Npb25cbn0gZnJvbSBcInNhcC9mZS9iYXNlL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQgdmFsdWVGb3JtYXR0ZXJzIGZyb20gXCJzYXAvZmUvY29yZS9mb3JtYXR0ZXJzL1ZhbHVlRm9ybWF0dGVyXCI7XG5pbXBvcnQgeyBpc1Byb3BlcnR5IH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvVHlwZUd1YXJkc1wiO1xuaW1wb3J0IHR5cGUgeyBEYXRhTW9kZWxPYmplY3RQYXRoIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRGF0YU1vZGVsUGF0aEhlbHBlclwiO1xuaW1wb3J0IHsgZW5oYW5jZURhdGFNb2RlbFBhdGgsIGdldFJlbGF0aXZlUGF0aHMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9EYXRhTW9kZWxQYXRoSGVscGVyXCI7XG5pbXBvcnQgeyBoYXNTdGF0aWNQZXJjZW50VW5pdCB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL1Byb3BlcnR5SGVscGVyXCI7XG5pbXBvcnQgdHlwZSB7IERhdGVUaW1lU3R5bGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9VSUZvcm1hdHRlcnNcIjtcbmltcG9ydCB7XG5cdGdldEJpbmRpbmdGb3JEYXRlRm9ybWF0LFxuXHRnZXRCaW5kaW5nRm9yVGltZXpvbmUsXG5cdGdldEJpbmRpbmdXaXRoVGltZXpvbmUsXG5cdGdldEJpbmRpbmdXaXRoVW5pdE9yQ3VycmVuY3ksXG5cdGdldERpc3BsYXlNb2RlXG59IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL1VJRm9ybWF0dGVyc1wiO1xuaW1wb3J0IExpYnJhcnkgZnJvbSBcInNhcC91aS9jb3JlL0xpYlwiO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL0NvbnRleHRcIjtcbmltcG9ydCBBbm5vdGF0aW9uSGVscGVyIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvQW5ub3RhdGlvbkhlbHBlclwiO1xuXG5jb25zdCB0eXBlc1N1cHBvcnRpbmdOdW1iZXJPZkZyYWN0aW9uYWxEaWdpdHMgPSBbXCJFZG0uU2luZ2xlXCIsIFwiRWRtLkRvdWJsZVwiLCBcIkVkbS5EZWNpbWFsXCJdO1xuXG5leHBvcnQgdHlwZSBEYXRhUG9pbnRGb3JtYXRPcHRpb25zID0gUGFydGlhbDx7XG5cdG1lYXN1cmVEaXNwbGF5TW9kZTogc3RyaW5nO1xuXHRkaXNwbGF5TW9kZTogc3RyaW5nO1xuXHRkYXRlVGltZVN0eWxlOiBEYXRlVGltZVN0eWxlO1xuXHRkYXRlVGltZVBhdHRlcm46IHN0cmluZztcblx0c2hvd09ubHlVbml0RGVjaW1hbHM6IGJvb2xlYW47XG59PjtcblxuLyoqXG4gKiBHZXRzIHRoZSB0YXJnZXQgdmFsdWUgb2YgYSBwcm9ncmVzcyBpbmRpY2F0b3IuXG4gKiBBIHByb2dyZXNzIGluZGljYXRvciBjYW4gaGF2ZSBhIHN0YXRpYyB0YXJnZXQsIGEgcGVyY2VudGFnZSwgb3IgYW5vdGhlciBwcm9wZXJ0eS5cbiAqIEBwYXJhbSBvRGF0YU1vZGVsUGF0aCBUaGUgRGF0YU1vZGVsT2JqZWN0UGF0aFxuICogQHBhcmFtIHJlbGF0aXZlTG9jYXRpb24gVGhlIHJlbGF0aXZlIGxvY2F0aW9uLCB0byB0YWtlIGludG8gYWNjb3VudCB0aGUgbmF2aWdhdGlvbiBwcm9wZXJ0aWVzXG4gKiBAcmV0dXJucyBUaGUgZXhwcmVzc2lvbiBiaW5kaW5nIG9mIHRoZSB0YXJnZXQgdmFsdWVcbiAqL1xuY29uc3QgZ2V0RGF0YVBvaW50VGFyZ2V0RXhwcmVzc2lvbiA9IChcblx0b0RhdGFNb2RlbFBhdGg6IERhdGFQb2ludFR5cGUgfCB1bmRlZmluZWQsXG5cdHJlbGF0aXZlTG9jYXRpb246IHN0cmluZ1tdXG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248c3RyaW5nPiA9PiB7XG5cdHJldHVybiBvRGF0YU1vZGVsUGF0aD8uVGFyZ2V0VmFsdWUgPyBnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24ob0RhdGFNb2RlbFBhdGguVGFyZ2V0VmFsdWUsIHJlbGF0aXZlTG9jYXRpb24pIDogdW5yZXNvbHZhYmxlRXhwcmVzc2lvbjtcbn07XG5cbmNvbnN0IG9SZXNvdXJjZU1vZGVsID0gTGlicmFyeS5nZXRSZXNvdXJjZUJ1bmRsZUZvcihcInNhcC5mZS5tYWNyb3NcIikhO1xuXG4vKipcbiAqIFRoaXMgZ2V0cyB0aGUgYmluZGluZyBleHByZXNzaW9uIGZvciB0aGUgdmFsdWUgb2YgdGhlIHByb2dyZXNzIGluZGljYXRvci5cbiAqIEBwYXJhbSBvUHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoIFRoZSBEYXRhTW9kZWxPYmplY3RQYXRoXG4gKiBAcmV0dXJucyBUaGUgYmluZGluZyBleHByZXNzaW9uIGZvciB0aGUgcHJvZ3Jlc3MgaW5kaWNhdG9yIHZhbHVlLlxuICovXG5leHBvcnQgY29uc3QgYnVpbGRFeHByZXNzaW9uRm9yUHJvZ3Jlc3NJbmRpY2F0b3JEaXNwbGF5VmFsdWUgPSAoXG5cdG9Qcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8RGF0YVBvaW50VHlwZT5cbik6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uID0+IHtcblx0Y29uc3QgZmllbGRWYWx1ZSA9IG9Qcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGg/LnRhcmdldE9iamVjdD8uVmFsdWUgfHwgXCJcIjtcblx0Y29uc3QgcmVsYXRpdmVMb2NhdGlvbiA9IGdldFJlbGF0aXZlUGF0aHMob1Byb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aCk7XG5cdGNvbnN0IGZpZWxkVmFsdWVFeHByZXNzaW9uOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248UHJpbWl0aXZlVHlwZT4gPSBnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24oZmllbGRWYWx1ZSwgcmVsYXRpdmVMb2NhdGlvbik7XG5cdGNvbnN0IHRhcmdldEV4cHJlc3Npb246IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmc+ID0gZ2V0RGF0YVBvaW50VGFyZ2V0RXhwcmVzc2lvbihcblx0XHRvUHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdCxcblx0XHRyZWxhdGl2ZUxvY2F0aW9uXG5cdCk7XG5cblx0aWYgKGZpZWxkVmFsdWVFeHByZXNzaW9uICYmIHRhcmdldEV4cHJlc3Npb24pIHtcblx0XHRsZXQgdGFyZ2V0T2JqZWN0ID0gb1Byb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRPYmplY3Q/LlZhbHVlO1xuXHRcdGlmICghaXNQcm9wZXJ0eSh0YXJnZXRPYmplY3QpKSB7XG5cdFx0XHR0YXJnZXRPYmplY3QgPSB0YXJnZXRPYmplY3QuJHRhcmdldDtcblx0XHR9XG5cdFx0Y29uc3QgdW5pdCA9IHRhcmdldE9iamVjdC5hbm5vdGF0aW9ucz8uTWVhc3VyZXM/LlVuaXQgfHwgdGFyZ2V0T2JqZWN0LmFubm90YXRpb25zPy5NZWFzdXJlcz8uSVNPQ3VycmVuY3k7XG5cblx0XHRpZiAoIXVuaXQpIHtcblx0XHRcdHJldHVybiBvUmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiVF9DT01NT05fUFJPR1JFU1NfSU5ESUNBVE9SX0RJU1BMQVlfVkFMVUVfTk9fVU9NXCIsIFtcblx0XHRcdFx0Y29tcGlsZUV4cHJlc3Npb24oZmllbGRWYWx1ZUV4cHJlc3Npb24pLFxuXHRcdFx0XHRjb21waWxlRXhwcmVzc2lvbih0YXJnZXRFeHByZXNzaW9uKVxuXHRcdFx0XSk7XG5cdFx0fVxuXHRcdC8vIElmIHRoZSB1bml0IGlzbid0IGEgcGF0aCwgd2UgY2hlY2sgZm9yIGEgJSBzaWduIGFzIGl0IGlzIGEgc3BlY2lhbCBjYXNlLlxuXHRcdGlmIChoYXNTdGF0aWNQZXJjZW50VW5pdChmaWVsZFZhbHVlPy4kdGFyZ2V0KSkge1xuXHRcdFx0cmV0dXJuIGAke2NvbXBpbGVFeHByZXNzaW9uKGZpZWxkVmFsdWVFeHByZXNzaW9uKX0gJWA7XG5cdFx0fVxuXG5cdFx0Y29uc3QgdW5pdEJpbmRpbmdFeHByZXNzaW9uOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248c3RyaW5nPiA9IHVuaXQuJHRhcmdldFxuXHRcdFx0PyBmb3JtYXRXaXRoVHlwZUluZm9ybWF0aW9uKHVuaXQuJHRhcmdldCwgZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKHVuaXQsIHJlbGF0aXZlTG9jYXRpb24pKVxuXHRcdFx0OiBnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24odW5pdCwgcmVsYXRpdmVMb2NhdGlvbik7XG5cblx0XHRjb25zdCBpc0N1cnJlbmN5ID0gdGFyZ2V0T2JqZWN0LmFubm90YXRpb25zPy5NZWFzdXJlcz8uSVNPQ3VycmVuY3kgPyB0cnVlIDogZmFsc2U7XG5cdFx0bGV0IHJlcXVlc3RDdXN0b21Vbml0cztcblx0XHRpZiAoaXNDdXJyZW5jeSkge1xuXHRcdFx0cmVxdWVzdEN1c3RvbVVuaXRzID0gcGF0aEluTW9kZWwoXCIvIyNAQHJlcXVlc3RDdXJyZW5jeUNvZGVzXCIpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXF1ZXN0Q3VzdG9tVW5pdHMgPSBwYXRoSW5Nb2RlbChcIi8jI0BAcmVxdWVzdFVuaXRzT2ZNZWFzdXJlXCIpO1xuXHRcdH1cblx0XHRyZXF1ZXN0Q3VzdG9tVW5pdHMudGFyZ2V0VHlwZSA9IFwiYW55XCI7XG5cdFx0cmVxdWVzdEN1c3RvbVVuaXRzLm1vZGUgPSBcIk9uZVRpbWVcIjtcblxuXHRcdHJldHVybiBjb21waWxlRXhwcmVzc2lvbihcblx0XHRcdGZvcm1hdFJlc3VsdChcblx0XHRcdFx0W2ZpZWxkVmFsdWVFeHByZXNzaW9uLCB0YXJnZXRFeHByZXNzaW9uLCB1bml0QmluZGluZ0V4cHJlc3Npb24sIGlzQ3VycmVuY3ksIHJlcXVlc3RDdXN0b21Vbml0c10sXG5cdFx0XHRcdHZhbHVlRm9ybWF0dGVycy5mb3JtYXRQcm9ncmVzc0luZGljYXRvclRleHRcblx0XHRcdClcblx0XHQpO1xuXHR9XG5cdHJldHVybiB1bmRlZmluZWQ7XG59O1xuXG5jb25zdCBidWlsZFJhdGluZ0luZGljYXRvclN1YnRpdGxlRXhwcmVzc2lvbiA9IChvQ29udGV4dDogQ29udGV4dCwgbVNhbXBsZVNpemU6IHVua25vd24pOiBzdHJpbmcgfCB1bmRlZmluZWQgPT4ge1xuXHRpZiAobVNhbXBsZVNpemUpIHtcblx0XHRyZXR1cm4gZm9ybWF0UmF0aW5nSW5kaWNhdG9yU3ViVGl0bGUoQW5ub3RhdGlvbkhlbHBlci52YWx1ZShtU2FtcGxlU2l6ZSwgeyBjb250ZXh0OiBvQ29udGV4dCB9KSBhcyB1bmtub3duIGFzIG51bWJlcik7XG5cdH1cbn07XG4vLyByZXR1cm5zIHRoZSB0ZXh0IGZvciB0aGUgUmF0aW5nIEluZGljYXRvciBTdWJ0aXRsZSAoZS5nLiAnNyByZXZpZXdzJylcbmNvbnN0IGZvcm1hdFJhdGluZ0luZGljYXRvclN1YlRpdGxlID0gKGlTYW1wbGVTaXplVmFsdWU6IG51bWJlcik6IHN0cmluZyB8IHVuZGVmaW5lZCA9PiB7XG5cdGlmIChpU2FtcGxlU2l6ZVZhbHVlKSB7XG5cdFx0Y29uc3Qgc1N1YlRpdGxlTGFiZWwgPVxuXHRcdFx0aVNhbXBsZVNpemVWYWx1ZSA+IDFcblx0XHRcdFx0PyBvUmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiVF9BTk5PVEFUSU9OX0hFTFBFUl9SQVRJTkdfSU5ESUNBVE9SX1NVQlRJVExFX0xBQkVMX1BMVVJBTFwiKVxuXHRcdFx0XHQ6IG9SZXNvdXJjZU1vZGVsLmdldFRleHQoXCJUX0FOTk9UQVRJT05fSEVMUEVSX1JBVElOR19JTkRJQ0FUT1JfU1VCVElUTEVfTEFCRUxcIik7XG5cdFx0cmV0dXJuIG9SZXNvdXJjZU1vZGVsLmdldFRleHQoXCJUX0FOTk9UQVRJT05fSEVMUEVSX1JBVElOR19JTkRJQ0FUT1JfU1VCVElUTEVcIiwgW1N0cmluZyhpU2FtcGxlU2l6ZVZhbHVlKSwgc1N1YlRpdGxlTGFiZWxdKTtcblx0fVxufTtcblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gZ2V0IHRoZSBoZWFkZXIgdGV4dCBvZiByYXRpbmcgaW5kaWNhdG9yLlxuICogQHBhcmFtIG9Db250ZXh0IENvbnRleHQgb2YgaW50ZXJmYWNlXG4gKiBAcGFyYW0gb0RhdGFQb2ludCBEYXRhIHBvaW50IG9iamVjdFxuICogQHJldHVybnMgRXhwcmVzc2lvbiBiaW5kaW5nIGZvciByYXRpbmcgaW5kaWNhdG9yIHRleHRcbiAqL1xuZXhwb3J0IGNvbnN0IGdldEhlYWRlclJhdGluZ0luZGljYXRvclRleHQgPSAob0NvbnRleHQ6IENvbnRleHQsIG9EYXRhUG9pbnQ6IERhdGFQb2ludFR5cGUgfCB1bmRlZmluZWQpOiBzdHJpbmcgfCB1bmRlZmluZWQgPT4ge1xuXHRsZXQgcmVzdWx0OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cdGlmIChvRGF0YVBvaW50ICYmIG9EYXRhUG9pbnQuU2FtcGxlU2l6ZSkge1xuXHRcdHJlc3VsdCA9IGJ1aWxkUmF0aW5nSW5kaWNhdG9yU3VidGl0bGVFeHByZXNzaW9uKG9Db250ZXh0LCBvRGF0YVBvaW50LlNhbXBsZVNpemUpO1xuXHR9IGVsc2UgaWYgKG9EYXRhUG9pbnQgJiYgb0RhdGFQb2ludC5EZXNjcmlwdGlvbikge1xuXHRcdGNvbnN0IHNNb2RlbFZhbHVlID0gQW5ub3RhdGlvbkhlbHBlci52YWx1ZShvRGF0YVBvaW50LkRlc2NyaXB0aW9uLCB7IGNvbnRleHQ6IG9Db250ZXh0IH0pO1xuXHRcdHJlc3VsdCA9IFwiJHtwYXRoOlwiICsgc01vZGVsVmFsdWUgKyBcIn1cIjtcblx0fVxuXHRyZXR1cm4gcmVzdWx0O1xufTtcbmdldEhlYWRlclJhdGluZ0luZGljYXRvclRleHQucmVxdWlyZXNJQ29udGV4dCA9IHRydWU7XG5cbmNvbnN0IGJ1aWxkRXhwcmVzc2lvbkZvckRlc2NyaXB0aW9uID0gKGZpZWxkVmFsdWU6IERhdGFNb2RlbE9iamVjdFBhdGg8UHJvcGVydHk+KTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz4gfCB1bmRlZmluZWQgPT4ge1xuXHRjb25zdCByZWxhdGl2ZUxvY2F0aW9uID0gZ2V0UmVsYXRpdmVQYXRocyhmaWVsZFZhbHVlKTtcblx0aWYgKGZpZWxkVmFsdWU/LnRhcmdldE9iamVjdD8uYW5ub3RhdGlvbnM/LkNvbW1vbj8uVGV4dCkge1xuXHRcdGNvbnN0IG9UZXh0RXhwcmVzc2lvbiA9IGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihmaWVsZFZhbHVlPy50YXJnZXRPYmplY3QuYW5ub3RhdGlvbnM/LkNvbW1vbj8uVGV4dCwgcmVsYXRpdmVMb2NhdGlvbik7XG5cdFx0aWYgKGlzUGF0aEluTW9kZWxFeHByZXNzaW9uKG9UZXh0RXhwcmVzc2lvbikpIHtcblx0XHRcdG9UZXh0RXhwcmVzc2lvbi5wYXJhbWV0ZXJzID0geyAkJG5vUGF0Y2g6IHRydWUgfTtcblx0XHR9XG5cdFx0cmV0dXJuIG9UZXh0RXhwcmVzc2lvbjtcblx0fVxuXHRyZXR1cm4gdW5kZWZpbmVkO1xufTtcblxuY29uc3QgZ2V0RmxvYXRGb3JtYXQgPSAoXG5cdG91dEV4cHJlc3Npb246IFBhdGhJbk1vZGVsRXhwcmVzc2lvbjxzdHJpbmc+LFxuXHRudW1iZXJPZkZyYWN0aW9uYWxEaWdpdHM6IE51bWJlciB8IHVuZGVmaW5lZFxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz4gPT4ge1xuXHQvLyBudW1iZXJPZkZyYWN0aW9uYWxEaWdpdHMgaXMgb25seSBkZWZpbmVkIGluIGdldFZhbHVlRm9ybWF0dGVkIHdoZW4gTnVtYmVyT2ZGcmFjdGlvbmFsRGlnaXRzIGlzIGRlZmluZWQuXG5cdC8vIEluIHRoYXQgY2FzZSwgd2UgbmVlZCB0byBpbnN0YW5jZSB0aGUgcHJlc2VydmVEZWNpbWFscyBwYXJhbWV0ZXIgYmVjYXVzZSBvZiBhIGNoYW5nZSBNREMgc2lkZVxuXHRpZiAobnVtYmVyT2ZGcmFjdGlvbmFsRGlnaXRzKSB7XG5cdFx0aWYgKCFvdXRFeHByZXNzaW9uLmZvcm1hdE9wdGlvbnMpIHtcblx0XHRcdG91dEV4cHJlc3Npb24uZm9ybWF0T3B0aW9ucyA9IHt9O1xuXHRcdH1cblx0XHRvdXRFeHByZXNzaW9uLmZvcm1hdE9wdGlvbnMgPSBPYmplY3QuYXNzaWduKG91dEV4cHJlc3Npb24uZm9ybWF0T3B0aW9ucywge1xuXHRcdFx0cHJlc2VydmVEZWNpbWFsczogZmFsc2UsXG5cdFx0XHRtYXhGcmFjdGlvbkRpZ2l0czogbnVtYmVyT2ZGcmFjdGlvbmFsRGlnaXRzXG5cdFx0fSk7XG5cdH1cblx0cmV0dXJuIG91dEV4cHJlc3Npb247XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0VmFsdWVGb3JtYXR0ZWQgPSAoXG5cdG9Qcm9wZXJ0eURhdGFNb2RlbFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8UHJvcGVydHk+IHwgdW5kZWZpbmVkLFxuXHRmaWVsZFZhbHVlOiBQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb248c3RyaW5nPiB8IHVuZGVmaW5lZCxcblx0c1Byb3BlcnR5VHlwZTogc3RyaW5nLFxuXHRzTnVtYmVyT2ZGcmFjdGlvbmFsRGlnaXRzOiBOdW1iZXIgfCB1bmRlZmluZWRcbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmc+ID0+IHtcblx0bGV0IG91dEV4cHJlc3Npb246IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmc+O1xuXHRjb25zdCByZWxhdGl2ZUxvY2F0aW9uID0gIWZpZWxkVmFsdWU/LnBhdGg/LmluY2x1ZGVzKFwiL1wiKSA/IGdldFJlbGF0aXZlUGF0aHMob1Byb3BlcnR5RGF0YU1vZGVsUGF0aCkgOiBbXTtcblx0b3V0RXhwcmVzc2lvbiA9IGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihmaWVsZFZhbHVlLCByZWxhdGl2ZUxvY2F0aW9uKTtcblx0Y29uc3Qgb1Byb3BlcnR5RGVmaW5pdGlvbiA9IG9Qcm9wZXJ0eURhdGFNb2RlbFBhdGg/LnRhcmdldE9iamVjdDtcblx0aWYgKG9Qcm9wZXJ0eURlZmluaXRpb24gJiYgc1Byb3BlcnR5VHlwZSAmJiBpc1BhdGhJbk1vZGVsRXhwcmVzc2lvbihvdXRFeHByZXNzaW9uKSkge1xuXHRcdGZvcm1hdFdpdGhUeXBlSW5mb3JtYXRpb24ob1Byb3BlcnR5RGVmaW5pdGlvbiwgb3V0RXhwcmVzc2lvbik7XG5cdFx0b3V0RXhwcmVzc2lvbi50eXBlID0gRURNX1RZUEVfTUFQUElOR1tzUHJvcGVydHlUeXBlXT8udHlwZTtcblx0XHRpZiAodHlwZXNTdXBwb3J0aW5nTnVtYmVyT2ZGcmFjdGlvbmFsRGlnaXRzLmluY2x1ZGVzKHNQcm9wZXJ0eVR5cGUpKSB7XG5cdFx0XHQvLyBmb3IgdGhlIGxpc3RSZXBvcnQsIHRoZSBkZWNpbWFsL3NpbmdsZS9kb3VibGUgZmllbGRzIGFyZSBmb3JtYXR0ZWQgYnkgcmV0dXJuaW5nIGEgc3RyaW5nXG5cdFx0XHQvLyBmb3IgdGhlIGZhY2V0cyBvZiB0aGUgT1AsIHRoZSBkZWNpbWFsL3NpbmdsZS9kb3VibGUgZmllbGRzIGFyZSBmb3JtYXR0ZWQgYnkgcmV0dXJuaW5nIGEgcHJvbWlzZSwgc28gd2UgbWFuYWdlIGFsbCB0aGUgY2FzZXNcblx0XHRcdG91dEV4cHJlc3Npb24gPSBnZXRGbG9hdEZvcm1hdChvdXRFeHByZXNzaW9uLCBzTnVtYmVyT2ZGcmFjdGlvbmFsRGlnaXRzKTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gb3V0RXhwcmVzc2lvbjtcbn07XG5cbmV4cG9ydCBjb25zdCBidWlsZEZpZWxkQmluZGluZ0V4cHJlc3Npb24gPSAoXG5cdG9EYXRhTW9kZWxQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPERhdGFQb2ludFR5cGU+LFxuXHRkYXRhUG9pbnRGb3JtYXRPcHRpb25zOiBEYXRhUG9pbnRGb3JtYXRPcHRpb25zLFxuXHRiSGlkZU1lYXN1cmU6IGJvb2xlYW5cbik6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uID0+IHtcblx0Y29uc3Qgb0RhdGFQb2ludCA9IG9EYXRhTW9kZWxQYXRoLnRhcmdldE9iamVjdDtcblx0Y29uc3Qgb0RhdGFQb2ludFZhbHVlID0gb0RhdGFQb2ludD8uVmFsdWUgfHwgXCJcIjtcblx0Y29uc3QgcHJvcGVydHlUeXBlID0gb0RhdGFQb2ludFZhbHVlPy4kdGFyZ2V0Py50eXBlO1xuXHRsZXQgbnVtYmVyT2ZGcmFjdGlvbmFsRGlnaXRzO1xuXG5cdGlmICh0eXBlc1N1cHBvcnRpbmdOdW1iZXJPZkZyYWN0aW9uYWxEaWdpdHMuaW5jbHVkZXMocHJvcGVydHlUeXBlKSAmJiBvRGF0YVBvaW50Py5WYWx1ZUZvcm1hdCkge1xuXHRcdGlmIChvRGF0YVBvaW50LlZhbHVlRm9ybWF0Lk51bWJlck9mRnJhY3Rpb25hbERpZ2l0cykge1xuXHRcdFx0bnVtYmVyT2ZGcmFjdGlvbmFsRGlnaXRzID0gb0RhdGFQb2ludC5WYWx1ZUZvcm1hdC5OdW1iZXJPZkZyYWN0aW9uYWxEaWdpdHM7XG5cdFx0fVxuXHR9XG5cdGNvbnN0IG9Qcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGggPSBlbmhhbmNlRGF0YU1vZGVsUGF0aDxQcm9wZXJ0eT4ob0RhdGFNb2RlbFBhdGgsIG9EYXRhUG9pbnRWYWx1ZS5wYXRoKTtcblx0Y29uc3Qgb0Rlc2NyaXB0aW9uID0gb1Byb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aCA/IGJ1aWxkRXhwcmVzc2lvbkZvckRlc2NyaXB0aW9uKG9Qcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGgpIDogdW5kZWZpbmVkO1xuXHRjb25zdCBvRm9ybWF0dGVkVmFsdWUgPSBnZXRWYWx1ZUZvcm1hdHRlZChvUHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoLCBvRGF0YVBvaW50VmFsdWUsIHByb3BlcnR5VHlwZSwgbnVtYmVyT2ZGcmFjdGlvbmFsRGlnaXRzKTtcblx0Y29uc3Qgc0Rpc3BsYXlNb2RlID0gb0Rlc2NyaXB0aW9uID8gZGF0YVBvaW50Rm9ybWF0T3B0aW9ucz8uZGlzcGxheU1vZGUgfHwgZ2V0RGlzcGxheU1vZGUob1Byb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aCkgOiBcIlZhbHVlXCI7XG5cdGxldCBvQmluZGluZ0V4cHJlc3Npb246IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmc+IHwgdW5kZWZpbmVkO1xuXHRzd2l0Y2ggKHNEaXNwbGF5TW9kZSkge1xuXHRcdGNhc2UgXCJEZXNjcmlwdGlvblwiOlxuXHRcdFx0b0JpbmRpbmdFeHByZXNzaW9uID0gb0Rlc2NyaXB0aW9uO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBcIlZhbHVlRGVzY3JpcHRpb25cIjpcblx0XHRcdG9CaW5kaW5nRXhwcmVzc2lvbiA9IGZvcm1hdFJlc3VsdChbb0Zvcm1hdHRlZFZhbHVlLCBvRGVzY3JpcHRpb25dLCB2YWx1ZUZvcm1hdHRlcnMuZm9ybWF0V2l0aEJyYWNrZXRzKTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgXCJEZXNjcmlwdGlvblZhbHVlXCI6XG5cdFx0XHRvQmluZGluZ0V4cHJlc3Npb24gPSBmb3JtYXRSZXN1bHQoW29EZXNjcmlwdGlvbiwgb0Zvcm1hdHRlZFZhbHVlXSwgdmFsdWVGb3JtYXR0ZXJzLmZvcm1hdFdpdGhCcmFja2V0cyk7XG5cdFx0XHRicmVhaztcblx0XHRkZWZhdWx0OlxuXHRcdFx0aWYgKFxuXHRcdFx0XHRvUHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdD8uYW5ub3RhdGlvbnM/LkNvbW1vbj8uVGltZXpvbmUgJiZcblx0XHRcdFx0b1Byb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRPYmplY3QudHlwZSA9PT0gXCJFZG0uRGF0ZVRpbWVPZmZzZXRcIlxuXHRcdFx0KSB7XG5cdFx0XHRcdG9CaW5kaW5nRXhwcmVzc2lvbiA9IGdldEJpbmRpbmdXaXRoVGltZXpvbmUob1Byb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aCwgb0Zvcm1hdHRlZFZhbHVlKTtcblx0XHRcdH0gZWxzZSBpZiAob1Byb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRPYmplY3Q/LmFubm90YXRpb25zPy5Db21tb24/LklzVGltZXpvbmUpIHtcblx0XHRcdFx0b0JpbmRpbmdFeHByZXNzaW9uID0gZ2V0QmluZGluZ0ZvclRpbWV6b25lKG9Qcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGgsIG9Gb3JtYXR0ZWRWYWx1ZSk7XG5cdFx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0XHRvUHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdD8uYW5ub3RhdGlvbnM/LlVJPy5EYXRlVGltZVN0eWxlIHx8XG5cdFx0XHRcdGRhdGFQb2ludEZvcm1hdE9wdGlvbnM/LmRhdGVUaW1lUGF0dGVyblxuXHRcdFx0KSB7XG5cdFx0XHRcdG9CaW5kaW5nRXhwcmVzc2lvbiA9IGdldEJpbmRpbmdGb3JEYXRlRm9ybWF0KG9Qcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGgsIG9Gb3JtYXR0ZWRWYWx1ZSwgZGF0YVBvaW50Rm9ybWF0T3B0aW9ucyk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRvQmluZGluZ0V4cHJlc3Npb24gPSBfY29tcHV0ZUJpbmRpbmdXaXRoVW5pdE9yQ3VycmVuY3koXG5cdFx0XHRcdFx0b1Byb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aCxcblx0XHRcdFx0XHRvRm9ybWF0dGVkVmFsdWUsXG5cdFx0XHRcdFx0YkhpZGVNZWFzdXJlIHx8IGRhdGFQb2ludEZvcm1hdE9wdGlvbnM/Lm1lYXN1cmVEaXNwbGF5TW9kZSA9PT0gXCJIaWRkZW5cIixcblx0XHRcdFx0XHQhIWRhdGFQb2ludEZvcm1hdE9wdGlvbnM/LnNob3dPbmx5VW5pdERlY2ltYWxzXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdH1cblx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKG9CaW5kaW5nRXhwcmVzc2lvbik7XG59O1xuXG5leHBvcnQgY29uc3QgX2NvbXB1dGVCaW5kaW5nV2l0aFVuaXRPckN1cnJlbmN5ID0gKFxuXHRwcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8UHJvcGVydHk+LFxuXHRmb3JtYXR0ZWRWYWx1ZTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz4sXG5cdGhpZGVNZWFzdXJlOiBib29sZWFuLFxuXHRzaG93T25seVVuaXREZWNpbWFsczogYm9vbGVhblxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz4gPT4ge1xuXHRpZiAoXG5cdFx0cHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdD8uYW5ub3RhdGlvbnM/Lk1lYXN1cmVzPy5Vbml0IHx8XG5cdFx0cHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdD8uYW5ub3RhdGlvbnM/Lk1lYXN1cmVzPy5JU09DdXJyZW5jeVxuXHQpIHtcblx0XHRpZiAoaGlkZU1lYXN1cmUgJiYgaGFzU3RhdGljUGVyY2VudFVuaXQocHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdCkpIHtcblx0XHRcdHJldHVybiBmb3JtYXR0ZWRWYWx1ZTtcblx0XHR9XG5cdFx0cmV0dXJuIGdldEJpbmRpbmdXaXRoVW5pdE9yQ3VycmVuY3koXG5cdFx0XHRwcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGgsXG5cdFx0XHRmb3JtYXR0ZWRWYWx1ZSxcblx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdGhpZGVNZWFzdXJlID8geyBzaG93TWVhc3VyZTogZmFsc2UgfSA6IHVuZGVmaW5lZCxcblx0XHRcdHRydWUsXG5cdFx0XHRzaG93T25seVVuaXREZWNpbWFsc1xuXHRcdCk7XG5cdH1cblx0cmV0dXJuIGZvcm1hdHRlZFZhbHVlO1xufTtcblxuLyoqXG4gKiBNZXRob2QgdG8gY2FsY3VsYXRlIHRoZSBwZXJjZW50YWdlIHZhbHVlIG9mIFByb2dyZXNzIEluZGljYXRvci4gQmFzaWMgZm9ybXVsYSBpcyBWYWx1ZS9UYXJnZXQgKiAxMDAuXG4gKiBAcGFyYW0gb1Byb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aFxuICogQHJldHVybnMgVGhlIGV4cHJlc3Npb24gYmluZGluZyB1c2VkIHRvIGNhbGN1bGF0ZSB0aGUgcGVyY2VudGFnZSB2YWx1ZSwgd2hpY2ggaXMgc2hvd24gaW4gdGhlIHByb2dyZXNzIGluZGljYXRvciBiYXNlZCBvbiB0aGUgZm9ybXVsYSBnaXZlbiBhYm92ZS5cbiAqL1xuZXhwb3J0IGNvbnN0IGJ1aWxkRXhwcmVzc2lvbkZvclByb2dyZXNzSW5kaWNhdG9yUGVyY2VudFZhbHVlID0gKFxuXHRvUHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPERhdGFQb2ludFR5cGU+XG4pOiBzdHJpbmcgfCB1bmRlZmluZWQgPT4ge1xuXHRjb25zdCBmaWVsZFZhbHVlID0gKG9Qcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGg/LnRhcmdldE9iamVjdD8uVmFsdWUgYXMgUGF0aEFubm90YXRpb25FeHByZXNzaW9uPFByaW1pdGl2ZVR5cGU+KSB8fCBcIlwiO1xuXHRjb25zdCByZWxhdGl2ZUxvY2F0aW9uID0gZ2V0UmVsYXRpdmVQYXRocyhvUHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoKTtcblx0Y29uc3QgZmllbGRWYWx1ZUV4cHJlc3Npb24gPSBnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24oZmllbGRWYWx1ZSwgcmVsYXRpdmVMb2NhdGlvbik7XG5cdGNvbnN0IHRhcmdldEV4cHJlc3Npb24gPSBnZXREYXRhUG9pbnRUYXJnZXRFeHByZXNzaW9uKG9Qcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0LCByZWxhdGl2ZUxvY2F0aW9uKTtcblxuXHRjb25zdCBvUHJvcGVydHlEZWZpbml0aW9uID0gZmllbGRWYWx1ZS4kdGFyZ2V0IGFzIFByb3BlcnR5O1xuXHRjb25zdCB1bml0ID0gb1Byb3BlcnR5RGVmaW5pdGlvbi5hbm5vdGF0aW9ucz8uTWVhc3VyZXM/LlVuaXQgfHwgb1Byb3BlcnR5RGVmaW5pdGlvbi5hbm5vdGF0aW9ucz8uTWVhc3VyZXM/LklTT0N1cnJlbmN5O1xuXHRpZiAodW5pdCkge1xuXHRcdGNvbnN0IHVuaXRCaW5kaW5nRXhwcmVzc2lvbiA9IGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbih1bml0LCByZWxhdGl2ZUxvY2F0aW9uKTtcblxuXHRcdHJldHVybiBjb21waWxlRXhwcmVzc2lvbihcblx0XHRcdGZvcm1hdFJlc3VsdChbZmllbGRWYWx1ZUV4cHJlc3Npb24sIHRhcmdldEV4cHJlc3Npb24sIHVuaXRCaW5kaW5nRXhwcmVzc2lvbl0sIHZhbHVlRm9ybWF0dGVycy5jb21wdXRlUGVyY2VudGFnZSlcblx0XHQpO1xuXHR9XG5cblx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKGZvcm1hdFJlc3VsdChbZmllbGRWYWx1ZUV4cHJlc3Npb24sIHRhcmdldEV4cHJlc3Npb24sIFwiXCJdLCB2YWx1ZUZvcm1hdHRlcnMuY29tcHV0ZVBlcmNlbnRhZ2UpKTtcbn07XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7RUE4QkEsTUFBTUEsdUNBQXVDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsWUFBWSxFQUFFLGFBQWEsQ0FBQztFQVUzRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNBLE1BQU1DLDRCQUE0QixHQUFHQSxDQUNwQ0MsY0FBeUMsRUFDekNDLGdCQUEwQixLQUNZO0lBQ3RDLE9BQU9ELGNBQWMsRUFBRUUsV0FBVyxHQUFHQywyQkFBMkIsQ0FBQ0gsY0FBYyxDQUFDRSxXQUFXLEVBQUVELGdCQUFnQixDQUFDLEdBQUdHLHNCQUFzQjtFQUN4SSxDQUFDO0VBRUQsTUFBTUMsY0FBYyxHQUFHQyxPQUFPLENBQUNDLG9CQUFvQixDQUFDLGVBQWUsQ0FBRTs7RUFFckU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNPLE1BQU1DLCtDQUErQyxHQUMzREMsNEJBQWdFLElBQzFCO0lBQ3RDLE1BQU1DLFVBQVUsR0FBR0QsNEJBQTRCLEVBQUVFLFlBQVksRUFBRUMsS0FBSyxJQUFJLEVBQUU7SUFDMUUsTUFBTVgsZ0JBQWdCLEdBQUdZLGdCQUFnQixDQUFDSiw0QkFBNEIsQ0FBQztJQUN2RSxNQUFNSyxvQkFBNkQsR0FBR1gsMkJBQTJCLENBQUNPLFVBQVUsRUFBRVQsZ0JBQWdCLENBQUM7SUFDL0gsTUFBTWMsZ0JBQWtELEdBQUdoQiw0QkFBNEIsQ0FDdEZVLDRCQUE0QixDQUFDRSxZQUFZLEVBQ3pDVixnQkFDRCxDQUFDO0lBRUQsSUFBSWEsb0JBQW9CLElBQUlDLGdCQUFnQixFQUFFO01BQzdDLElBQUlKLFlBQVksR0FBR0YsNEJBQTRCLENBQUNFLFlBQVksRUFBRUMsS0FBSztNQUNuRSxJQUFJLENBQUNJLFVBQVUsQ0FBQ0wsWUFBWSxDQUFDLEVBQUU7UUFDOUJBLFlBQVksR0FBR0EsWUFBWSxDQUFDTSxPQUFPO01BQ3BDO01BQ0EsTUFBTUMsSUFBSSxHQUFHUCxZQUFZLENBQUNRLFdBQVcsRUFBRUMsUUFBUSxFQUFFQyxJQUFJLElBQUlWLFlBQVksQ0FBQ1EsV0FBVyxFQUFFQyxRQUFRLEVBQUVFLFdBQVc7TUFFeEcsSUFBSSxDQUFDSixJQUFJLEVBQUU7UUFDVixPQUFPYixjQUFjLENBQUNrQixPQUFPLENBQUMsa0RBQWtELEVBQUUsQ0FDakZDLGlCQUFpQixDQUFDVixvQkFBb0IsQ0FBQyxFQUN2Q1UsaUJBQWlCLENBQUNULGdCQUFnQixDQUFDLENBQ25DLENBQUM7TUFDSDtNQUNBO01BQ0EsSUFBSVUsb0JBQW9CLENBQUNmLFVBQVUsRUFBRU8sT0FBTyxDQUFDLEVBQUU7UUFDOUMsT0FBTyxHQUFHTyxpQkFBaUIsQ0FBQ1Ysb0JBQW9CLENBQUMsSUFBSTtNQUN0RDtNQUVBLE1BQU1ZLHFCQUF1RCxHQUFHUixJQUFJLENBQUNELE9BQU8sR0FDekVVLHlCQUF5QixDQUFDVCxJQUFJLENBQUNELE9BQU8sRUFBRWQsMkJBQTJCLENBQUNlLElBQUksRUFBRWpCLGdCQUFnQixDQUFDLENBQUMsR0FDNUZFLDJCQUEyQixDQUFDZSxJQUFJLEVBQUVqQixnQkFBZ0IsQ0FBQztNQUV0RCxNQUFNMkIsVUFBVSxHQUFHakIsWUFBWSxDQUFDUSxXQUFXLEVBQUVDLFFBQVEsRUFBRUUsV0FBVyxHQUFHLElBQUksR0FBRyxLQUFLO01BQ2pGLElBQUlPLGtCQUFrQjtNQUN0QixJQUFJRCxVQUFVLEVBQUU7UUFDZkMsa0JBQWtCLEdBQUdDLFdBQVcsQ0FBQywyQkFBMkIsQ0FBQztNQUM5RCxDQUFDLE1BQU07UUFDTkQsa0JBQWtCLEdBQUdDLFdBQVcsQ0FBQyw0QkFBNEIsQ0FBQztNQUMvRDtNQUNBRCxrQkFBa0IsQ0FBQ0UsVUFBVSxHQUFHLEtBQUs7TUFDckNGLGtCQUFrQixDQUFDRyxJQUFJLEdBQUcsU0FBUztNQUVuQyxPQUFPUixpQkFBaUIsQ0FDdkJTLFlBQVksQ0FDWCxDQUFDbkIsb0JBQW9CLEVBQUVDLGdCQUFnQixFQUFFVyxxQkFBcUIsRUFBRUUsVUFBVSxFQUFFQyxrQkFBa0IsQ0FBQyxFQUMvRkssZUFBZSxDQUFDQywyQkFDakIsQ0FDRCxDQUFDO0lBQ0Y7SUFDQSxPQUFPQyxTQUFTO0VBQ2pCLENBQUM7RUFBQ0MsUUFBQSxDQUFBN0IsK0NBQUEsR0FBQUEsK0NBQUE7RUFFRixNQUFNOEIsc0NBQXNDLEdBQUdBLENBQUNDLFFBQWlCLEVBQUVDLFdBQW9CLEtBQXlCO0lBQy9HLElBQUlBLFdBQVcsRUFBRTtNQUNoQixPQUFPQyw2QkFBNkIsQ0FBQ0MsZ0JBQWdCLENBQUNDLEtBQUssQ0FBQ0gsV0FBVyxFQUFFO1FBQUVJLE9BQU8sRUFBRUw7TUFBUyxDQUFDLENBQXNCLENBQUM7SUFDdEg7RUFDRCxDQUFDO0VBQ0Q7RUFDQSxNQUFNRSw2QkFBNkIsR0FBSUksZ0JBQXdCLElBQXlCO0lBQ3ZGLElBQUlBLGdCQUFnQixFQUFFO01BQ3JCLE1BQU1DLGNBQWMsR0FDbkJELGdCQUFnQixHQUFHLENBQUMsR0FDakJ4QyxjQUFjLENBQUNrQixPQUFPLENBQUMsNERBQTRELENBQUMsR0FDcEZsQixjQUFjLENBQUNrQixPQUFPLENBQUMscURBQXFELENBQUM7TUFDakYsT0FBT2xCLGNBQWMsQ0FBQ2tCLE9BQU8sQ0FBQywrQ0FBK0MsRUFBRSxDQUFDd0IsTUFBTSxDQUFDRixnQkFBZ0IsQ0FBQyxFQUFFQyxjQUFjLENBQUMsQ0FBQztJQUMzSDtFQUNELENBQUM7O0VBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ08sTUFBTUUsNEJBQTRCLEdBQUdBLENBQUNULFFBQWlCLEVBQUVVLFVBQXFDLEtBQXlCO0lBQzdILElBQUlDLE1BQTBCO0lBQzlCLElBQUlELFVBQVUsSUFBSUEsVUFBVSxDQUFDRSxVQUFVLEVBQUU7TUFDeENELE1BQU0sR0FBR1osc0NBQXNDLENBQUNDLFFBQVEsRUFBRVUsVUFBVSxDQUFDRSxVQUFVLENBQUM7SUFDakYsQ0FBQyxNQUFNLElBQUlGLFVBQVUsSUFBSUEsVUFBVSxDQUFDRyxXQUFXLEVBQUU7TUFDaEQsTUFBTUMsV0FBVyxHQUFHWCxnQkFBZ0IsQ0FBQ0MsS0FBSyxDQUFDTSxVQUFVLENBQUNHLFdBQVcsRUFBRTtRQUFFUixPQUFPLEVBQUVMO01BQVMsQ0FBQyxDQUFDO01BQ3pGVyxNQUFNLEdBQUcsU0FBUyxHQUFHRyxXQUFXLEdBQUcsR0FBRztJQUN2QztJQUNBLE9BQU9ILE1BQU07RUFDZCxDQUFDO0VBQ0RGLDRCQUE0QixDQUFDTSxnQkFBZ0IsR0FBRyxJQUFJO0VBQUNqQixRQUFBLENBQUFXLDRCQUFBLEdBQUFBLDRCQUFBO0VBRXJELE1BQU1PLDZCQUE2QixHQUFJN0MsVUFBeUMsSUFBbUQ7SUFDbEksTUFBTVQsZ0JBQWdCLEdBQUdZLGdCQUFnQixDQUFDSCxVQUFVLENBQUM7SUFDckQsSUFBSUEsVUFBVSxFQUFFQyxZQUFZLEVBQUVRLFdBQVcsRUFBRXFDLE1BQU0sRUFBRUMsSUFBSSxFQUFFO01BQ3hELE1BQU1DLGVBQWUsR0FBR3ZELDJCQUEyQixDQUFDTyxVQUFVLEVBQUVDLFlBQVksQ0FBQ1EsV0FBVyxFQUFFcUMsTUFBTSxFQUFFQyxJQUFJLEVBQUV4RCxnQkFBZ0IsQ0FBQztNQUN6SCxJQUFJMEQsdUJBQXVCLENBQUNELGVBQWUsQ0FBQyxFQUFFO1FBQzdDQSxlQUFlLENBQUNFLFVBQVUsR0FBRztVQUFFQyxTQUFTLEVBQUU7UUFBSyxDQUFDO01BQ2pEO01BQ0EsT0FBT0gsZUFBZTtJQUN2QjtJQUNBLE9BQU90QixTQUFTO0VBQ2pCLENBQUM7RUFFRCxNQUFNMEIsY0FBYyxHQUFHQSxDQUN0QkMsYUFBNEMsRUFDNUNDLHdCQUE0QyxLQUNOO0lBQ3RDO0lBQ0E7SUFDQSxJQUFJQSx3QkFBd0IsRUFBRTtNQUM3QixJQUFJLENBQUNELGFBQWEsQ0FBQ0UsYUFBYSxFQUFFO1FBQ2pDRixhQUFhLENBQUNFLGFBQWEsR0FBRyxDQUFDLENBQUM7TUFDakM7TUFDQUYsYUFBYSxDQUFDRSxhQUFhLEdBQUdDLE1BQU0sQ0FBQ0MsTUFBTSxDQUFDSixhQUFhLENBQUNFLGFBQWEsRUFBRTtRQUN4RUcsZ0JBQWdCLEVBQUUsS0FBSztRQUN2QkMsaUJBQWlCLEVBQUVMO01BQ3BCLENBQUMsQ0FBQztJQUNIO0lBQ0EsT0FBT0QsYUFBYTtFQUNyQixDQUFDO0VBRU0sTUFBTU8saUJBQWlCLEdBQUdBLENBQ2hDQyxzQkFBaUUsRUFDakU3RCxVQUF3RCxFQUN4RDhELGFBQXFCLEVBQ3JCQyx5QkFBNkMsS0FDUDtJQUN0QyxJQUFJVixhQUErQztJQUNuRCxNQUFNOUQsZ0JBQWdCLEdBQUcsQ0FBQ1MsVUFBVSxFQUFFZ0UsSUFBSSxFQUFFQyxRQUFRLENBQUMsR0FBRyxDQUFDLEdBQUc5RCxnQkFBZ0IsQ0FBQzBELHNCQUFzQixDQUFDLEdBQUcsRUFBRTtJQUN6R1IsYUFBYSxHQUFHNUQsMkJBQTJCLENBQUNPLFVBQVUsRUFBRVQsZ0JBQWdCLENBQUM7SUFDekUsTUFBTTJFLG1CQUFtQixHQUFHTCxzQkFBc0IsRUFBRTVELFlBQVk7SUFDaEUsSUFBSWlFLG1CQUFtQixJQUFJSixhQUFhLElBQUliLHVCQUF1QixDQUFDSSxhQUFhLENBQUMsRUFBRTtNQUNuRnBDLHlCQUF5QixDQUFDaUQsbUJBQW1CLEVBQUViLGFBQWEsQ0FBQztNQUM3REEsYUFBYSxDQUFDYyxJQUFJLEdBQUdDLGdCQUFnQixDQUFDTixhQUFhLENBQUMsRUFBRUssSUFBSTtNQUMxRCxJQUFJL0UsdUNBQXVDLENBQUM2RSxRQUFRLENBQUNILGFBQWEsQ0FBQyxFQUFFO1FBQ3BFO1FBQ0E7UUFDQVQsYUFBYSxHQUFHRCxjQUFjLENBQUNDLGFBQWEsRUFBRVUseUJBQXlCLENBQUM7TUFDekU7SUFDRDtJQUVBLE9BQU9WLGFBQWE7RUFDckIsQ0FBQztFQUFDMUIsUUFBQSxDQUFBaUMsaUJBQUEsR0FBQUEsaUJBQUE7RUFFSyxNQUFNUywyQkFBMkIsR0FBR0EsQ0FDMUMvRSxjQUFrRCxFQUNsRGdGLHNCQUE4QyxFQUM5Q0MsWUFBcUIsS0FDaUI7SUFDdEMsTUFBTWhDLFVBQVUsR0FBR2pELGNBQWMsQ0FBQ1csWUFBWTtJQUM5QyxNQUFNdUUsZUFBZSxHQUFHakMsVUFBVSxFQUFFckMsS0FBSyxJQUFJLEVBQUU7SUFDL0MsTUFBTXVFLFlBQVksR0FBR0QsZUFBZSxFQUFFakUsT0FBTyxFQUFFNEQsSUFBSTtJQUNuRCxJQUFJYix3QkFBd0I7SUFFNUIsSUFBSWxFLHVDQUF1QyxDQUFDNkUsUUFBUSxDQUFDUSxZQUFZLENBQUMsSUFBSWxDLFVBQVUsRUFBRW1DLFdBQVcsRUFBRTtNQUM5RixJQUFJbkMsVUFBVSxDQUFDbUMsV0FBVyxDQUFDQyx3QkFBd0IsRUFBRTtRQUNwRHJCLHdCQUF3QixHQUFHZixVQUFVLENBQUNtQyxXQUFXLENBQUNDLHdCQUF3QjtNQUMzRTtJQUNEO0lBQ0EsTUFBTTVFLDRCQUE0QixHQUFHNkUsb0JBQW9CLENBQVd0RixjQUFjLEVBQUVrRixlQUFlLENBQUNSLElBQUksQ0FBQztJQUN6RyxNQUFNYSxZQUFZLEdBQUc5RSw0QkFBNEIsR0FBRzhDLDZCQUE2QixDQUFDOUMsNEJBQTRCLENBQUMsR0FBRzJCLFNBQVM7SUFDM0gsTUFBTW9ELGVBQWUsR0FBR2xCLGlCQUFpQixDQUFDN0QsNEJBQTRCLEVBQUV5RSxlQUFlLEVBQUVDLFlBQVksRUFBRW5CLHdCQUF3QixDQUFDO0lBQ2hJLE1BQU15QixZQUFZLEdBQUdGLFlBQVksR0FBR1Asc0JBQXNCLEVBQUVVLFdBQVcsSUFBSUMsY0FBYyxDQUFDbEYsNEJBQTRCLENBQUMsR0FBRyxPQUFPO0lBQ2pJLElBQUltRixrQkFBZ0U7SUFDcEUsUUFBUUgsWUFBWTtNQUNuQixLQUFLLGFBQWE7UUFDakJHLGtCQUFrQixHQUFHTCxZQUFZO1FBQ2pDO01BQ0QsS0FBSyxrQkFBa0I7UUFDdEJLLGtCQUFrQixHQUFHM0QsWUFBWSxDQUFDLENBQUN1RCxlQUFlLEVBQUVELFlBQVksQ0FBQyxFQUFFckQsZUFBZSxDQUFDMkQsa0JBQWtCLENBQUM7UUFDdEc7TUFDRCxLQUFLLGtCQUFrQjtRQUN0QkQsa0JBQWtCLEdBQUczRCxZQUFZLENBQUMsQ0FBQ3NELFlBQVksRUFBRUMsZUFBZSxDQUFDLEVBQUV0RCxlQUFlLENBQUMyRCxrQkFBa0IsQ0FBQztRQUN0RztNQUNEO1FBQ0MsSUFDQ3BGLDRCQUE0QixDQUFDRSxZQUFZLEVBQUVRLFdBQVcsRUFBRXFDLE1BQU0sRUFBRXNDLFFBQVEsSUFDeEVyRiw0QkFBNEIsQ0FBQ0UsWUFBWSxDQUFDa0UsSUFBSSxLQUFLLG9CQUFvQixFQUN0RTtVQUNEZSxrQkFBa0IsR0FBR0csc0JBQXNCLENBQUN0Riw0QkFBNEIsRUFBRStFLGVBQWUsQ0FBQztRQUMzRixDQUFDLE1BQU0sSUFBSS9FLDRCQUE0QixDQUFDRSxZQUFZLEVBQUVRLFdBQVcsRUFBRXFDLE1BQU0sRUFBRXdDLFVBQVUsRUFBRTtVQUN0Rkosa0JBQWtCLEdBQUdLLHFCQUFxQixDQUFDeEYsNEJBQTRCLEVBQUUrRSxlQUFlLENBQUM7UUFDMUYsQ0FBQyxNQUFNLElBQ04vRSw0QkFBNEIsQ0FBQ0UsWUFBWSxFQUFFUSxXQUFXLEVBQUUrRSxFQUFFLEVBQUVDLGFBQWEsSUFDekVuQixzQkFBc0IsRUFBRW9CLGVBQWUsRUFDdEM7VUFDRFIsa0JBQWtCLEdBQUdTLHVCQUF1QixDQUFDNUYsNEJBQTRCLEVBQUUrRSxlQUFlLEVBQUVSLHNCQUFzQixDQUFDO1FBQ3BILENBQUMsTUFBTTtVQUNOWSxrQkFBa0IsR0FBR1UsaUNBQWlDLENBQ3JEN0YsNEJBQTRCLEVBQzVCK0UsZUFBZSxFQUNmUCxZQUFZLElBQUlELHNCQUFzQixFQUFFdUIsa0JBQWtCLEtBQUssUUFBUSxFQUN2RSxDQUFDLENBQUN2QixzQkFBc0IsRUFBRXdCLG9CQUMzQixDQUFDO1FBQ0Y7SUFDRjtJQUNBLE9BQU9oRixpQkFBaUIsQ0FBQ29FLGtCQUFrQixDQUFDO0VBQzdDLENBQUM7RUFBQ3ZELFFBQUEsQ0FBQTBDLDJCQUFBLEdBQUFBLDJCQUFBO0VBRUssTUFBTXVCLGlDQUFpQyxHQUFHQSxDQUNoREcsMkJBQTBELEVBQzFEQyxjQUFnRCxFQUNoREMsV0FBb0IsRUFDcEJILG9CQUE2QixLQUNTO0lBQ3RDLElBQ0NDLDJCQUEyQixDQUFDOUYsWUFBWSxFQUFFUSxXQUFXLEVBQUVDLFFBQVEsRUFBRUMsSUFBSSxJQUNyRW9GLDJCQUEyQixDQUFDOUYsWUFBWSxFQUFFUSxXQUFXLEVBQUVDLFFBQVEsRUFBRUUsV0FBVyxFQUMzRTtNQUNELElBQUlxRixXQUFXLElBQUlsRixvQkFBb0IsQ0FBQ2dGLDJCQUEyQixDQUFDOUYsWUFBWSxDQUFDLEVBQUU7UUFDbEYsT0FBTytGLGNBQWM7TUFDdEI7TUFDQSxPQUFPRSw0QkFBNEIsQ0FDbENILDJCQUEyQixFQUMzQkMsY0FBYyxFQUNkdEUsU0FBUyxFQUNUdUUsV0FBVyxHQUFHO1FBQUVFLFdBQVcsRUFBRTtNQUFNLENBQUMsR0FBR3pFLFNBQVMsRUFDaEQsSUFBSSxFQUNKb0Usb0JBQ0QsQ0FBQztJQUNGO0lBQ0EsT0FBT0UsY0FBYztFQUN0QixDQUFDOztFQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFKQXJFLFFBQUEsQ0FBQWlFLGlDQUFBLEdBQUFBLGlDQUFBO0VBS08sTUFBTVEsK0NBQStDLEdBQzNEckcsNEJBQWdFLElBQ3hDO0lBQ3hCLE1BQU1DLFVBQVUsR0FBSUQsNEJBQTRCLEVBQUVFLFlBQVksRUFBRUMsS0FBSyxJQUFnRCxFQUFFO0lBQ3ZILE1BQU1YLGdCQUFnQixHQUFHWSxnQkFBZ0IsQ0FBQ0osNEJBQTRCLENBQUM7SUFDdkUsTUFBTUssb0JBQW9CLEdBQUdYLDJCQUEyQixDQUFDTyxVQUFVLEVBQUVULGdCQUFnQixDQUFDO0lBQ3RGLE1BQU1jLGdCQUFnQixHQUFHaEIsNEJBQTRCLENBQUNVLDRCQUE0QixDQUFDRSxZQUFZLEVBQUVWLGdCQUFnQixDQUFDO0lBRWxILE1BQU0yRSxtQkFBbUIsR0FBR2xFLFVBQVUsQ0FBQ08sT0FBbUI7SUFDMUQsTUFBTUMsSUFBSSxHQUFHMEQsbUJBQW1CLENBQUN6RCxXQUFXLEVBQUVDLFFBQVEsRUFBRUMsSUFBSSxJQUFJdUQsbUJBQW1CLENBQUN6RCxXQUFXLEVBQUVDLFFBQVEsRUFBRUUsV0FBVztJQUN0SCxJQUFJSixJQUFJLEVBQUU7TUFDVCxNQUFNUSxxQkFBcUIsR0FBR3ZCLDJCQUEyQixDQUFDZSxJQUFJLEVBQUVqQixnQkFBZ0IsQ0FBQztNQUVqRixPQUFPdUIsaUJBQWlCLENBQ3ZCUyxZQUFZLENBQUMsQ0FBQ25CLG9CQUFvQixFQUFFQyxnQkFBZ0IsRUFBRVcscUJBQXFCLENBQUMsRUFBRVEsZUFBZSxDQUFDNkUsaUJBQWlCLENBQ2hILENBQUM7SUFDRjtJQUVBLE9BQU92RixpQkFBaUIsQ0FBQ1MsWUFBWSxDQUFDLENBQUNuQixvQkFBb0IsRUFBRUMsZ0JBQWdCLEVBQUUsRUFBRSxDQUFDLEVBQUVtQixlQUFlLENBQUM2RSxpQkFBaUIsQ0FBQyxDQUFDO0VBQ3hILENBQUM7RUFBQzFFLFFBQUEsQ0FBQXlFLCtDQUFBLEdBQUFBLCtDQUFBO0VBQUEsT0FBQXpFLFFBQUE7QUFBQSIsImlnbm9yZUxpc3QiOltdfQ==
|
|
233
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ0eXBlc1N1cHBvcnRpbmdOdW1iZXJPZkZyYWN0aW9uYWxEaWdpdHMiLCJnZXREYXRhUG9pbnRUYXJnZXRFeHByZXNzaW9uIiwib0RhdGFNb2RlbFBhdGgiLCJyZWxhdGl2ZUxvY2F0aW9uIiwiVGFyZ2V0VmFsdWUiLCJnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24iLCJ1bnJlc29sdmFibGVFeHByZXNzaW9uIiwib1Jlc291cmNlTW9kZWwiLCJMaWJyYXJ5IiwiZ2V0UmVzb3VyY2VCdW5kbGVGb3IiLCJidWlsZEV4cHJlc3Npb25Gb3JQcm9ncmVzc0luZGljYXRvckRpc3BsYXlWYWx1ZSIsIm9Qcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGgiLCJmaWVsZFZhbHVlIiwidGFyZ2V0T2JqZWN0IiwiVmFsdWUiLCJnZXRSZWxhdGl2ZVBhdGhzIiwiZmllbGRWYWx1ZUV4cHJlc3Npb24iLCJ0YXJnZXRFeHByZXNzaW9uIiwiaXNQcm9wZXJ0eSIsIiR0YXJnZXQiLCJ1bml0IiwiYW5ub3RhdGlvbnMiLCJNZWFzdXJlcyIsIlVuaXQiLCJJU09DdXJyZW5jeSIsImdldFRleHQiLCJjb21waWxlRXhwcmVzc2lvbiIsImhhc1N0YXRpY1BlcmNlbnRVbml0IiwidW5pdEJpbmRpbmdFeHByZXNzaW9uIiwiZm9ybWF0V2l0aFR5cGVJbmZvcm1hdGlvbiIsImlzQ3VycmVuY3kiLCJyZXF1ZXN0Q3VzdG9tVW5pdHMiLCJwYXRoSW5Nb2RlbCIsInRhcmdldFR5cGUiLCJtb2RlIiwiZm9ybWF0UmVzdWx0IiwidmFsdWVGb3JtYXR0ZXJzIiwiZm9ybWF0UHJvZ3Jlc3NJbmRpY2F0b3JUZXh0IiwidW5kZWZpbmVkIiwiX2V4cG9ydHMiLCJidWlsZFJhdGluZ0luZGljYXRvclN1YnRpdGxlRXhwcmVzc2lvbiIsIm9Db250ZXh0IiwibVNhbXBsZVNpemUiLCJmb3JtYXRSYXRpbmdJbmRpY2F0b3JTdWJUaXRsZSIsIkFubm90YXRpb25IZWxwZXIiLCJ2YWx1ZSIsImNvbnRleHQiLCJpU2FtcGxlU2l6ZVZhbHVlIiwic1N1YlRpdGxlTGFiZWwiLCJTdHJpbmciLCJnZXRIZWFkZXJSYXRpbmdJbmRpY2F0b3JUZXh0Iiwib0RhdGFQb2ludCIsInJlc3VsdCIsIlNhbXBsZVNpemUiLCJEZXNjcmlwdGlvbiIsInNNb2RlbFZhbHVlIiwicmVxdWlyZXNJQ29udGV4dCIsImJ1aWxkRXhwcmVzc2lvbkZvckRlc2NyaXB0aW9uIiwiQ29tbW9uIiwiVGV4dCIsIm9UZXh0RXhwcmVzc2lvbiIsImlzUGF0aEluTW9kZWxFeHByZXNzaW9uIiwicGFyYW1ldGVycyIsIiQkbm9QYXRjaCIsImdldEZsb2F0Rm9ybWF0Iiwib3V0RXhwcmVzc2lvbiIsIm51bWJlck9mRnJhY3Rpb25hbERpZ2l0cyIsImZvcm1hdE9wdGlvbnMiLCJPYmplY3QiLCJhc3NpZ24iLCJwcmVzZXJ2ZURlY2ltYWxzIiwibWF4RnJhY3Rpb25EaWdpdHMiLCJtaW5GcmFjdGlvbkRpZ2l0cyIsImNvbnN0cmFpbnRzIiwiZ2V0VmFsdWVGb3JtYXR0ZWQiLCJvUHJvcGVydHlEYXRhTW9kZWxQYXRoIiwic1Byb3BlcnR5VHlwZSIsInNOdW1iZXJPZkZyYWN0aW9uYWxEaWdpdHMiLCJwYXRoIiwiaW5jbHVkZXMiLCJvUHJvcGVydHlEZWZpbml0aW9uIiwidHlwZSIsIkVETV9UWVBFX01BUFBJTkciLCJidWlsZEZpZWxkQmluZGluZ0V4cHJlc3Npb24iLCJkYXRhUG9pbnRGb3JtYXRPcHRpb25zIiwiYkhpZGVNZWFzdXJlIiwib0RhdGFQb2ludFZhbHVlIiwicHJvcGVydHlUeXBlIiwiVmFsdWVGb3JtYXQiLCJOdW1iZXJPZkZyYWN0aW9uYWxEaWdpdHMiLCJlbmhhbmNlRGF0YU1vZGVsUGF0aCIsIm9EZXNjcmlwdGlvbiIsIm9Gb3JtYXR0ZWRWYWx1ZSIsInNEaXNwbGF5TW9kZSIsImRpc3BsYXlNb2RlIiwiZ2V0RGlzcGxheU1vZGUiLCJvQmluZGluZ0V4cHJlc3Npb24iLCJmb3JtYXRXaXRoQnJhY2tldHMiLCJUaW1lem9uZSIsImdldEJpbmRpbmdXaXRoVGltZXpvbmUiLCJJc1RpbWV6b25lIiwiZ2V0QmluZGluZ0ZvclRpbWV6b25lIiwiVUkiLCJEYXRlVGltZVN0eWxlIiwiZGF0ZVRpbWVQYXR0ZXJuIiwiZ2V0QmluZGluZ0ZvckRhdGVGb3JtYXQiLCJfY29tcHV0ZUJpbmRpbmdXaXRoVW5pdE9yQ3VycmVuY3kiLCJtZWFzdXJlRGlzcGxheU1vZGUiLCJzaG93T25seVVuaXREZWNpbWFscyIsInByb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aCIsImZvcm1hdHRlZFZhbHVlIiwiaGlkZU1lYXN1cmUiLCJnZXRCaW5kaW5nV2l0aFVuaXRPckN1cnJlbmN5Iiwic2hvd01lYXN1cmUiLCJidWlsZEV4cHJlc3Npb25Gb3JQcm9ncmVzc0luZGljYXRvclBlcmNlbnRWYWx1ZSIsImNvbXB1dGVQZXJjZW50YWdlIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJEYXRhUG9pbnRUZW1wbGF0aW5nLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgUGF0aEFubm90YXRpb25FeHByZXNzaW9uLCBQcmltaXRpdmVUeXBlLCBQcm9wZXJ0eSB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0IHR5cGUgeyBEYXRhUG9pbnRUeXBlIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IHR5cGUgeyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24sIENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uLCBQYXRoSW5Nb2RlbEV4cHJlc3Npb24gfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB7XG5cdEVETV9UWVBFX01BUFBJTkcsXG5cdGNvbXBpbGVFeHByZXNzaW9uLFxuXHRmb3JtYXRSZXN1bHQsXG5cdGZvcm1hdFdpdGhUeXBlSW5mb3JtYXRpb24sXG5cdGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbixcblx0aXNQYXRoSW5Nb2RlbEV4cHJlc3Npb24sXG5cdHBhdGhJbk1vZGVsLFxuXHR1bnJlc29sdmFibGVFeHByZXNzaW9uXG59IGZyb20gXCJzYXAvZmUvYmFzZS9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHZhbHVlRm9ybWF0dGVycyBmcm9tIFwic2FwL2ZlL2NvcmUvZm9ybWF0dGVycy9WYWx1ZUZvcm1hdHRlclwiO1xuaW1wb3J0IHsgaXNQcm9wZXJ0eSB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1R5cGVHdWFyZHNcIjtcbmltcG9ydCB0eXBlIHsgRGF0YU1vZGVsT2JqZWN0UGF0aCB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0RhdGFNb2RlbFBhdGhIZWxwZXJcIjtcbmltcG9ydCB7IGVuaGFuY2VEYXRhTW9kZWxQYXRoLCBnZXRSZWxhdGl2ZVBhdGhzIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRGF0YU1vZGVsUGF0aEhlbHBlclwiO1xuaW1wb3J0IHsgaGFzU3RhdGljUGVyY2VudFVuaXQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9Qcm9wZXJ0eUhlbHBlclwiO1xuaW1wb3J0IHR5cGUgeyBEYXRlVGltZVN0eWxlIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvVUlGb3JtYXR0ZXJzXCI7XG5pbXBvcnQge1xuXHRnZXRCaW5kaW5nRm9yRGF0ZUZvcm1hdCxcblx0Z2V0QmluZGluZ0ZvclRpbWV6b25lLFxuXHRnZXRCaW5kaW5nV2l0aFRpbWV6b25lLFxuXHRnZXRCaW5kaW5nV2l0aFVuaXRPckN1cnJlbmN5LFxuXHRnZXREaXNwbGF5TW9kZVxufSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9VSUZvcm1hdHRlcnNcIjtcbmltcG9ydCBMaWJyYXJ5IGZyb20gXCJzYXAvdWkvY29yZS9MaWJcIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9Db250ZXh0XCI7XG5pbXBvcnQgQW5ub3RhdGlvbkhlbHBlciBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L0Fubm90YXRpb25IZWxwZXJcIjtcblxuY29uc3QgdHlwZXNTdXBwb3J0aW5nTnVtYmVyT2ZGcmFjdGlvbmFsRGlnaXRzID0gW1wiRWRtLlNpbmdsZVwiLCBcIkVkbS5Eb3VibGVcIiwgXCJFZG0uRGVjaW1hbFwiXTtcblxuZXhwb3J0IHR5cGUgRGF0YVBvaW50Rm9ybWF0T3B0aW9ucyA9IFBhcnRpYWw8e1xuXHRtZWFzdXJlRGlzcGxheU1vZGU6IHN0cmluZztcblx0ZGlzcGxheU1vZGU6IHN0cmluZztcblx0ZGF0ZVRpbWVTdHlsZTogRGF0ZVRpbWVTdHlsZTtcblx0ZGF0ZVRpbWVQYXR0ZXJuOiBzdHJpbmc7XG5cdHNob3dPbmx5VW5pdERlY2ltYWxzOiBib29sZWFuO1xufT47XG5cbi8qKlxuICogR2V0cyB0aGUgdGFyZ2V0IHZhbHVlIG9mIGEgcHJvZ3Jlc3MgaW5kaWNhdG9yLlxuICogQSBwcm9ncmVzcyBpbmRpY2F0b3IgY2FuIGhhdmUgYSBzdGF0aWMgdGFyZ2V0LCBhIHBlcmNlbnRhZ2UsIG9yIGFub3RoZXIgcHJvcGVydHkuXG4gKiBAcGFyYW0gb0RhdGFNb2RlbFBhdGggVGhlIERhdGFNb2RlbE9iamVjdFBhdGhcbiAqIEBwYXJhbSByZWxhdGl2ZUxvY2F0aW9uIFRoZSByZWxhdGl2ZSBsb2NhdGlvbiwgdG8gdGFrZSBpbnRvIGFjY291bnQgdGhlIG5hdmlnYXRpb24gcHJvcGVydGllc1xuICogQHJldHVybnMgVGhlIGV4cHJlc3Npb24gYmluZGluZyBvZiB0aGUgdGFyZ2V0IHZhbHVlXG4gKi9cbmNvbnN0IGdldERhdGFQb2ludFRhcmdldEV4cHJlc3Npb24gPSAoXG5cdG9EYXRhTW9kZWxQYXRoOiBEYXRhUG9pbnRUeXBlIHwgdW5kZWZpbmVkLFxuXHRyZWxhdGl2ZUxvY2F0aW9uOiBzdHJpbmdbXVxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz4gPT4ge1xuXHRyZXR1cm4gb0RhdGFNb2RlbFBhdGg/LlRhcmdldFZhbHVlID8gZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKG9EYXRhTW9kZWxQYXRoLlRhcmdldFZhbHVlLCByZWxhdGl2ZUxvY2F0aW9uKSA6IHVucmVzb2x2YWJsZUV4cHJlc3Npb247XG59O1xuXG5jb25zdCBvUmVzb3VyY2VNb2RlbCA9IExpYnJhcnkuZ2V0UmVzb3VyY2VCdW5kbGVGb3IoXCJzYXAuZmUubWFjcm9zXCIpITtcblxuLyoqXG4gKiBUaGlzIGdldHMgdGhlIGJpbmRpbmcgZXhwcmVzc2lvbiBmb3IgdGhlIHZhbHVlIG9mIHRoZSBwcm9ncmVzcyBpbmRpY2F0b3IuXG4gKiBAcGFyYW0gb1Byb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aCBUaGUgRGF0YU1vZGVsT2JqZWN0UGF0aFxuICogQHJldHVybnMgVGhlIGJpbmRpbmcgZXhwcmVzc2lvbiBmb3IgdGhlIHByb2dyZXNzIGluZGljYXRvciB2YWx1ZS5cbiAqL1xuZXhwb3J0IGNvbnN0IGJ1aWxkRXhwcmVzc2lvbkZvclByb2dyZXNzSW5kaWNhdG9yRGlzcGxheVZhbHVlID0gKFxuXHRvUHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPERhdGFQb2ludFR5cGU+XG4pOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiA9PiB7XG5cdGNvbnN0IGZpZWxkVmFsdWUgPSBvUHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoPy50YXJnZXRPYmplY3Q/LlZhbHVlIHx8IFwiXCI7XG5cdGNvbnN0IHJlbGF0aXZlTG9jYXRpb24gPSBnZXRSZWxhdGl2ZVBhdGhzKG9Qcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGgpO1xuXHRjb25zdCBmaWVsZFZhbHVlRXhwcmVzc2lvbjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFByaW1pdGl2ZVR5cGU+ID0gZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKGZpZWxkVmFsdWUsIHJlbGF0aXZlTG9jYXRpb24pO1xuXHRjb25zdCB0YXJnZXRFeHByZXNzaW9uOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248c3RyaW5nPiA9IGdldERhdGFQb2ludFRhcmdldEV4cHJlc3Npb24oXG5cdFx0b1Byb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRPYmplY3QsXG5cdFx0cmVsYXRpdmVMb2NhdGlvblxuXHQpO1xuXG5cdGlmIChmaWVsZFZhbHVlRXhwcmVzc2lvbiAmJiB0YXJnZXRFeHByZXNzaW9uKSB7XG5cdFx0bGV0IHRhcmdldE9iamVjdCA9IG9Qcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0Py5WYWx1ZTtcblx0XHRpZiAoIWlzUHJvcGVydHkodGFyZ2V0T2JqZWN0KSkge1xuXHRcdFx0dGFyZ2V0T2JqZWN0ID0gdGFyZ2V0T2JqZWN0LiR0YXJnZXQ7XG5cdFx0fVxuXHRcdGNvbnN0IHVuaXQgPSB0YXJnZXRPYmplY3QuYW5ub3RhdGlvbnM/Lk1lYXN1cmVzPy5Vbml0IHx8IHRhcmdldE9iamVjdC5hbm5vdGF0aW9ucz8uTWVhc3VyZXM/LklTT0N1cnJlbmN5O1xuXG5cdFx0aWYgKCF1bml0KSB7XG5cdFx0XHRyZXR1cm4gb1Jlc291cmNlTW9kZWwuZ2V0VGV4dChcIlRfQ09NTU9OX1BST0dSRVNTX0lORElDQVRPUl9ESVNQTEFZX1ZBTFVFX05PX1VPTVwiLCBbXG5cdFx0XHRcdGNvbXBpbGVFeHByZXNzaW9uKGZpZWxkVmFsdWVFeHByZXNzaW9uKSxcblx0XHRcdFx0Y29tcGlsZUV4cHJlc3Npb24odGFyZ2V0RXhwcmVzc2lvbilcblx0XHRcdF0pO1xuXHRcdH1cblx0XHQvLyBJZiB0aGUgdW5pdCBpc24ndCBhIHBhdGgsIHdlIGNoZWNrIGZvciBhICUgc2lnbiBhcyBpdCBpcyBhIHNwZWNpYWwgY2FzZS5cblx0XHRpZiAoaGFzU3RhdGljUGVyY2VudFVuaXQoZmllbGRWYWx1ZT8uJHRhcmdldCkpIHtcblx0XHRcdHJldHVybiBgJHtjb21waWxlRXhwcmVzc2lvbihmaWVsZFZhbHVlRXhwcmVzc2lvbil9ICVgO1xuXHRcdH1cblxuXHRcdGNvbnN0IHVuaXRCaW5kaW5nRXhwcmVzc2lvbjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz4gPSB1bml0LiR0YXJnZXRcblx0XHRcdD8gZm9ybWF0V2l0aFR5cGVJbmZvcm1hdGlvbih1bml0LiR0YXJnZXQsIGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbih1bml0LCByZWxhdGl2ZUxvY2F0aW9uKSlcblx0XHRcdDogZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKHVuaXQsIHJlbGF0aXZlTG9jYXRpb24pO1xuXG5cdFx0Y29uc3QgaXNDdXJyZW5jeSA9IHRhcmdldE9iamVjdC5hbm5vdGF0aW9ucz8uTWVhc3VyZXM/LklTT0N1cnJlbmN5ID8gdHJ1ZSA6IGZhbHNlO1xuXHRcdGxldCByZXF1ZXN0Q3VzdG9tVW5pdHM7XG5cdFx0aWYgKGlzQ3VycmVuY3kpIHtcblx0XHRcdHJlcXVlc3RDdXN0b21Vbml0cyA9IHBhdGhJbk1vZGVsKFwiLyMjQEByZXF1ZXN0Q3VycmVuY3lDb2Rlc1wiKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmVxdWVzdEN1c3RvbVVuaXRzID0gcGF0aEluTW9kZWwoXCIvIyNAQHJlcXVlc3RVbml0c09mTWVhc3VyZVwiKTtcblx0XHR9XG5cdFx0cmVxdWVzdEN1c3RvbVVuaXRzLnRhcmdldFR5cGUgPSBcImFueVwiO1xuXHRcdHJlcXVlc3RDdXN0b21Vbml0cy5tb2RlID0gXCJPbmVUaW1lXCI7XG5cblx0XHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24oXG5cdFx0XHRmb3JtYXRSZXN1bHQoXG5cdFx0XHRcdFtmaWVsZFZhbHVlRXhwcmVzc2lvbiwgdGFyZ2V0RXhwcmVzc2lvbiwgdW5pdEJpbmRpbmdFeHByZXNzaW9uLCBpc0N1cnJlbmN5LCByZXF1ZXN0Q3VzdG9tVW5pdHNdLFxuXHRcdFx0XHR2YWx1ZUZvcm1hdHRlcnMuZm9ybWF0UHJvZ3Jlc3NJbmRpY2F0b3JUZXh0XG5cdFx0XHQpXG5cdFx0KTtcblx0fVxuXHRyZXR1cm4gdW5kZWZpbmVkO1xufTtcblxuY29uc3QgYnVpbGRSYXRpbmdJbmRpY2F0b3JTdWJ0aXRsZUV4cHJlc3Npb24gPSAob0NvbnRleHQ6IENvbnRleHQsIG1TYW1wbGVTaXplOiB1bmtub3duKTogc3RyaW5nIHwgdW5kZWZpbmVkID0+IHtcblx0aWYgKG1TYW1wbGVTaXplKSB7XG5cdFx0cmV0dXJuIGZvcm1hdFJhdGluZ0luZGljYXRvclN1YlRpdGxlKEFubm90YXRpb25IZWxwZXIudmFsdWUobVNhbXBsZVNpemUsIHsgY29udGV4dDogb0NvbnRleHQgfSkgYXMgdW5rbm93biBhcyBudW1iZXIpO1xuXHR9XG59O1xuLy8gcmV0dXJucyB0aGUgdGV4dCBmb3IgdGhlIFJhdGluZyBJbmRpY2F0b3IgU3VidGl0bGUgKGUuZy4gJzcgcmV2aWV3cycpXG5jb25zdCBmb3JtYXRSYXRpbmdJbmRpY2F0b3JTdWJUaXRsZSA9IChpU2FtcGxlU2l6ZVZhbHVlOiBudW1iZXIpOiBzdHJpbmcgfCB1bmRlZmluZWQgPT4ge1xuXHRpZiAoaVNhbXBsZVNpemVWYWx1ZSkge1xuXHRcdGNvbnN0IHNTdWJUaXRsZUxhYmVsID1cblx0XHRcdGlTYW1wbGVTaXplVmFsdWUgPiAxXG5cdFx0XHRcdD8gb1Jlc291cmNlTW9kZWwuZ2V0VGV4dChcIlRfQU5OT1RBVElPTl9IRUxQRVJfUkFUSU5HX0lORElDQVRPUl9TVUJUSVRMRV9MQUJFTF9QTFVSQUxcIilcblx0XHRcdFx0OiBvUmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiVF9BTk5PVEFUSU9OX0hFTFBFUl9SQVRJTkdfSU5ESUNBVE9SX1NVQlRJVExFX0xBQkVMXCIpO1xuXHRcdHJldHVybiBvUmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiVF9BTk5PVEFUSU9OX0hFTFBFUl9SQVRJTkdfSU5ESUNBVE9SX1NVQlRJVExFXCIsIFtTdHJpbmcoaVNhbXBsZVNpemVWYWx1ZSksIHNTdWJUaXRsZUxhYmVsXSk7XG5cdH1cbn07XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGdldCB0aGUgaGVhZGVyIHRleHQgb2YgcmF0aW5nIGluZGljYXRvci5cbiAqIEBwYXJhbSBvQ29udGV4dCBDb250ZXh0IG9mIGludGVyZmFjZVxuICogQHBhcmFtIG9EYXRhUG9pbnQgRGF0YSBwb2ludCBvYmplY3RcbiAqIEByZXR1cm5zIEV4cHJlc3Npb24gYmluZGluZyBmb3IgcmF0aW5nIGluZGljYXRvciB0ZXh0XG4gKi9cbmV4cG9ydCBjb25zdCBnZXRIZWFkZXJSYXRpbmdJbmRpY2F0b3JUZXh0ID0gKG9Db250ZXh0OiBDb250ZXh0LCBvRGF0YVBvaW50OiBEYXRhUG9pbnRUeXBlIHwgdW5kZWZpbmVkKTogc3RyaW5nIHwgdW5kZWZpbmVkID0+IHtcblx0bGV0IHJlc3VsdDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXHRpZiAob0RhdGFQb2ludCAmJiBvRGF0YVBvaW50LlNhbXBsZVNpemUpIHtcblx0XHRyZXN1bHQgPSBidWlsZFJhdGluZ0luZGljYXRvclN1YnRpdGxlRXhwcmVzc2lvbihvQ29udGV4dCwgb0RhdGFQb2ludC5TYW1wbGVTaXplKTtcblx0fSBlbHNlIGlmIChvRGF0YVBvaW50ICYmIG9EYXRhUG9pbnQuRGVzY3JpcHRpb24pIHtcblx0XHRjb25zdCBzTW9kZWxWYWx1ZSA9IEFubm90YXRpb25IZWxwZXIudmFsdWUob0RhdGFQb2ludC5EZXNjcmlwdGlvbiwgeyBjb250ZXh0OiBvQ29udGV4dCB9KTtcblx0XHRyZXN1bHQgPSBcIiR7cGF0aDpcIiArIHNNb2RlbFZhbHVlICsgXCJ9XCI7XG5cdH1cblx0cmV0dXJuIHJlc3VsdDtcbn07XG5nZXRIZWFkZXJSYXRpbmdJbmRpY2F0b3JUZXh0LnJlcXVpcmVzSUNvbnRleHQgPSB0cnVlO1xuXG5jb25zdCBidWlsZEV4cHJlc3Npb25Gb3JEZXNjcmlwdGlvbiA9IChmaWVsZFZhbHVlOiBEYXRhTW9kZWxPYmplY3RQYXRoPFByb3BlcnR5Pik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmc+IHwgdW5kZWZpbmVkID0+IHtcblx0Y29uc3QgcmVsYXRpdmVMb2NhdGlvbiA9IGdldFJlbGF0aXZlUGF0aHMoZmllbGRWYWx1ZSk7XG5cdGlmIChmaWVsZFZhbHVlPy50YXJnZXRPYmplY3Q/LmFubm90YXRpb25zPy5Db21tb24/LlRleHQpIHtcblx0XHRjb25zdCBvVGV4dEV4cHJlc3Npb24gPSBnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24oZmllbGRWYWx1ZT8udGFyZ2V0T2JqZWN0LmFubm90YXRpb25zPy5Db21tb24/LlRleHQsIHJlbGF0aXZlTG9jYXRpb24pO1xuXHRcdGlmIChpc1BhdGhJbk1vZGVsRXhwcmVzc2lvbihvVGV4dEV4cHJlc3Npb24pKSB7XG5cdFx0XHRvVGV4dEV4cHJlc3Npb24ucGFyYW1ldGVycyA9IHsgJCRub1BhdGNoOiB0cnVlIH07XG5cdFx0fVxuXHRcdHJldHVybiBvVGV4dEV4cHJlc3Npb247XG5cdH1cblx0cmV0dXJuIHVuZGVmaW5lZDtcbn07XG5cbmNvbnN0IGdldEZsb2F0Rm9ybWF0ID0gKFxuXHRvdXRFeHByZXNzaW9uOiBQYXRoSW5Nb2RlbEV4cHJlc3Npb248c3RyaW5nPixcblx0bnVtYmVyT2ZGcmFjdGlvbmFsRGlnaXRzOiBOdW1iZXIgfCB1bmRlZmluZWRcbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmc+ID0+IHtcblx0Ly8gbnVtYmVyT2ZGcmFjdGlvbmFsRGlnaXRzIGlzIG9ubHkgZGVmaW5lZCBpbiBnZXRWYWx1ZUZvcm1hdHRlZCB3aGVuIE51bWJlck9mRnJhY3Rpb25hbERpZ2l0cyBpcyBkZWZpbmVkLlxuXHQvLyBJbiB0aGF0IGNhc2UsIHdlIG5lZWQgdG8gaW5zdGFuY2UgdGhlIHByZXNlcnZlRGVjaW1hbHMgcGFyYW1ldGVyIGJlY2F1c2Ugb2YgYSBjaGFuZ2UgTURDIHNpZGVcblx0aWYgKG51bWJlck9mRnJhY3Rpb25hbERpZ2l0cykge1xuXHRcdGlmICghb3V0RXhwcmVzc2lvbi5mb3JtYXRPcHRpb25zKSB7XG5cdFx0XHRvdXRFeHByZXNzaW9uLmZvcm1hdE9wdGlvbnMgPSB7fTtcblx0XHR9XG5cdFx0b3V0RXhwcmVzc2lvbi5mb3JtYXRPcHRpb25zID0gT2JqZWN0LmFzc2lnbihvdXRFeHByZXNzaW9uLmZvcm1hdE9wdGlvbnMsIHtcblx0XHRcdHByZXNlcnZlRGVjaW1hbHM6IGZhbHNlLFxuXHRcdFx0bWF4RnJhY3Rpb25EaWdpdHM6IG51bWJlck9mRnJhY3Rpb25hbERpZ2l0cyxcblx0XHRcdG1pbkZyYWN0aW9uRGlnaXRzOiBudW1iZXJPZkZyYWN0aW9uYWxEaWdpdHNcblx0XHR9KTtcblx0XHQvL3dlIG5lZWQgdG8gaWdub3JlIHRoZSBjb25zdHJhaW50cyBvdGhlcndpc2UgdGhlIHNjYWxlIG1lc3MgdXAgdGhlIGZvcm1hdHRpbmcgYnkgYWRkaW5nIHRyYWlsaW5nIHplcm9zXG5cdFx0Ly8gMS4yMzQgd2l0aCBtYXhGcmFjdGlvbkRpZ2l0cyAyIGFuZCBzY2FsZSA0IHdpbGwgYmVjb21lIDEuMjMwMFxuXHRcdG91dEV4cHJlc3Npb24uY29uc3RyYWludHMgPSB7fTtcblx0fVxuXHRyZXR1cm4gb3V0RXhwcmVzc2lvbjtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRWYWx1ZUZvcm1hdHRlZCA9IChcblx0b1Byb3BlcnR5RGF0YU1vZGVsUGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDxQcm9wZXJ0eT4gfCB1bmRlZmluZWQsXG5cdGZpZWxkVmFsdWU6IFBhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbjxzdHJpbmc+IHwgdW5kZWZpbmVkLFxuXHRzUHJvcGVydHlUeXBlOiBzdHJpbmcsXG5cdHNOdW1iZXJPZkZyYWN0aW9uYWxEaWdpdHM6IE51bWJlciB8IHVuZGVmaW5lZFxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz4gPT4ge1xuXHRsZXQgb3V0RXhwcmVzc2lvbjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz47XG5cdGNvbnN0IHJlbGF0aXZlTG9jYXRpb24gPSAhZmllbGRWYWx1ZT8ucGF0aD8uaW5jbHVkZXMoXCIvXCIpID8gZ2V0UmVsYXRpdmVQYXRocyhvUHJvcGVydHlEYXRhTW9kZWxQYXRoKSA6IFtdO1xuXHRvdXRFeHByZXNzaW9uID0gZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKGZpZWxkVmFsdWUsIHJlbGF0aXZlTG9jYXRpb24pO1xuXHRjb25zdCBvUHJvcGVydHlEZWZpbml0aW9uID0gb1Byb3BlcnR5RGF0YU1vZGVsUGF0aD8udGFyZ2V0T2JqZWN0O1xuXHRpZiAob1Byb3BlcnR5RGVmaW5pdGlvbiAmJiBzUHJvcGVydHlUeXBlICYmIGlzUGF0aEluTW9kZWxFeHByZXNzaW9uKG91dEV4cHJlc3Npb24pKSB7XG5cdFx0Zm9ybWF0V2l0aFR5cGVJbmZvcm1hdGlvbihvUHJvcGVydHlEZWZpbml0aW9uLCBvdXRFeHByZXNzaW9uKTtcblx0XHRvdXRFeHByZXNzaW9uLnR5cGUgPSBFRE1fVFlQRV9NQVBQSU5HW3NQcm9wZXJ0eVR5cGVdPy50eXBlO1xuXHRcdGlmICh0eXBlc1N1cHBvcnRpbmdOdW1iZXJPZkZyYWN0aW9uYWxEaWdpdHMuaW5jbHVkZXMoc1Byb3BlcnR5VHlwZSkpIHtcblx0XHRcdC8vIGZvciB0aGUgbGlzdFJlcG9ydCwgdGhlIGRlY2ltYWwvc2luZ2xlL2RvdWJsZSBmaWVsZHMgYXJlIGZvcm1hdHRlZCBieSByZXR1cm5pbmcgYSBzdHJpbmdcblx0XHRcdC8vIGZvciB0aGUgZmFjZXRzIG9mIHRoZSBPUCwgdGhlIGRlY2ltYWwvc2luZ2xlL2RvdWJsZSBmaWVsZHMgYXJlIGZvcm1hdHRlZCBieSByZXR1cm5pbmcgYSBwcm9taXNlLCBzbyB3ZSBtYW5hZ2UgYWxsIHRoZSBjYXNlc1xuXHRcdFx0b3V0RXhwcmVzc2lvbiA9IGdldEZsb2F0Rm9ybWF0KG91dEV4cHJlc3Npb24sIHNOdW1iZXJPZkZyYWN0aW9uYWxEaWdpdHMpO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBvdXRFeHByZXNzaW9uO1xufTtcblxuZXhwb3J0IGNvbnN0IGJ1aWxkRmllbGRCaW5kaW5nRXhwcmVzc2lvbiA9IChcblx0b0RhdGFNb2RlbFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8RGF0YVBvaW50VHlwZT4sXG5cdGRhdGFQb2ludEZvcm1hdE9wdGlvbnM6IERhdGFQb2ludEZvcm1hdE9wdGlvbnMsXG5cdGJIaWRlTWVhc3VyZTogYm9vbGVhblxuKTogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24gPT4ge1xuXHRjb25zdCBvRGF0YVBvaW50ID0gb0RhdGFNb2RlbFBhdGgudGFyZ2V0T2JqZWN0O1xuXHRjb25zdCBvRGF0YVBvaW50VmFsdWUgPSBvRGF0YVBvaW50Py5WYWx1ZSB8fCBcIlwiO1xuXHRjb25zdCBwcm9wZXJ0eVR5cGUgPSBvRGF0YVBvaW50VmFsdWU/LiR0YXJnZXQ/LnR5cGU7XG5cdGxldCBudW1iZXJPZkZyYWN0aW9uYWxEaWdpdHM7XG5cblx0aWYgKHR5cGVzU3VwcG9ydGluZ051bWJlck9mRnJhY3Rpb25hbERpZ2l0cy5pbmNsdWRlcyhwcm9wZXJ0eVR5cGUpICYmIG9EYXRhUG9pbnQ/LlZhbHVlRm9ybWF0KSB7XG5cdFx0aWYgKG9EYXRhUG9pbnQuVmFsdWVGb3JtYXQuTnVtYmVyT2ZGcmFjdGlvbmFsRGlnaXRzKSB7XG5cdFx0XHRudW1iZXJPZkZyYWN0aW9uYWxEaWdpdHMgPSBvRGF0YVBvaW50LlZhbHVlRm9ybWF0Lk51bWJlck9mRnJhY3Rpb25hbERpZ2l0cztcblx0XHR9XG5cdH1cblx0Y29uc3Qgb1Byb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aCA9IGVuaGFuY2VEYXRhTW9kZWxQYXRoPFByb3BlcnR5PihvRGF0YU1vZGVsUGF0aCwgb0RhdGFQb2ludFZhbHVlLnBhdGgpO1xuXHRjb25zdCBvRGVzY3JpcHRpb24gPSBvUHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoID8gYnVpbGRFeHByZXNzaW9uRm9yRGVzY3JpcHRpb24ob1Byb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aCkgOiB1bmRlZmluZWQ7XG5cdGNvbnN0IG9Gb3JtYXR0ZWRWYWx1ZSA9IGdldFZhbHVlRm9ybWF0dGVkKG9Qcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGgsIG9EYXRhUG9pbnRWYWx1ZSwgcHJvcGVydHlUeXBlLCBudW1iZXJPZkZyYWN0aW9uYWxEaWdpdHMpO1xuXHRjb25zdCBzRGlzcGxheU1vZGUgPSBvRGVzY3JpcHRpb24gPyBkYXRhUG9pbnRGb3JtYXRPcHRpb25zPy5kaXNwbGF5TW9kZSB8fCBnZXREaXNwbGF5TW9kZShvUHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoKSA6IFwiVmFsdWVcIjtcblx0bGV0IG9CaW5kaW5nRXhwcmVzc2lvbjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz4gfCB1bmRlZmluZWQ7XG5cdHN3aXRjaCAoc0Rpc3BsYXlNb2RlKSB7XG5cdFx0Y2FzZSBcIkRlc2NyaXB0aW9uXCI6XG5cdFx0XHRvQmluZGluZ0V4cHJlc3Npb24gPSBvRGVzY3JpcHRpb247XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFwiVmFsdWVEZXNjcmlwdGlvblwiOlxuXHRcdFx0b0JpbmRpbmdFeHByZXNzaW9uID0gZm9ybWF0UmVzdWx0KFtvRm9ybWF0dGVkVmFsdWUsIG9EZXNjcmlwdGlvbl0sIHZhbHVlRm9ybWF0dGVycy5mb3JtYXRXaXRoQnJhY2tldHMpO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBcIkRlc2NyaXB0aW9uVmFsdWVcIjpcblx0XHRcdG9CaW5kaW5nRXhwcmVzc2lvbiA9IGZvcm1hdFJlc3VsdChbb0Rlc2NyaXB0aW9uLCBvRm9ybWF0dGVkVmFsdWVdLCB2YWx1ZUZvcm1hdHRlcnMuZm9ybWF0V2l0aEJyYWNrZXRzKTtcblx0XHRcdGJyZWFrO1xuXHRcdGRlZmF1bHQ6XG5cdFx0XHRpZiAoXG5cdFx0XHRcdG9Qcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0Py5hbm5vdGF0aW9ucz8uQ29tbW9uPy5UaW1lem9uZSAmJlxuXHRcdFx0XHRvUHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdC50eXBlID09PSBcIkVkbS5EYXRlVGltZU9mZnNldFwiXG5cdFx0XHQpIHtcblx0XHRcdFx0b0JpbmRpbmdFeHByZXNzaW9uID0gZ2V0QmluZGluZ1dpdGhUaW1lem9uZShvUHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoLCBvRm9ybWF0dGVkVmFsdWUpO1xuXHRcdFx0fSBlbHNlIGlmIChvUHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdD8uYW5ub3RhdGlvbnM/LkNvbW1vbj8uSXNUaW1lem9uZSkge1xuXHRcdFx0XHRvQmluZGluZ0V4cHJlc3Npb24gPSBnZXRCaW5kaW5nRm9yVGltZXpvbmUob1Byb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aCwgb0Zvcm1hdHRlZFZhbHVlKTtcblx0XHRcdH0gZWxzZSBpZiAoXG5cdFx0XHRcdG9Qcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0Py5hbm5vdGF0aW9ucz8uVUk/LkRhdGVUaW1lU3R5bGUgfHxcblx0XHRcdFx0ZGF0YVBvaW50Rm9ybWF0T3B0aW9ucz8uZGF0ZVRpbWVQYXR0ZXJuXG5cdFx0XHQpIHtcblx0XHRcdFx0b0JpbmRpbmdFeHByZXNzaW9uID0gZ2V0QmluZGluZ0ZvckRhdGVGb3JtYXQob1Byb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aCwgb0Zvcm1hdHRlZFZhbHVlLCBkYXRhUG9pbnRGb3JtYXRPcHRpb25zKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG9CaW5kaW5nRXhwcmVzc2lvbiA9IF9jb21wdXRlQmluZGluZ1dpdGhVbml0T3JDdXJyZW5jeShcblx0XHRcdFx0XHRvUHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoLFxuXHRcdFx0XHRcdG9Gb3JtYXR0ZWRWYWx1ZSxcblx0XHRcdFx0XHRiSGlkZU1lYXN1cmUgfHwgZGF0YVBvaW50Rm9ybWF0T3B0aW9ucz8ubWVhc3VyZURpc3BsYXlNb2RlID09PSBcIkhpZGRlblwiLFxuXHRcdFx0XHRcdCEhZGF0YVBvaW50Rm9ybWF0T3B0aW9ucz8uc2hvd09ubHlVbml0RGVjaW1hbHNcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0fVxuXHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24ob0JpbmRpbmdFeHByZXNzaW9uKTtcbn07XG5cbmV4cG9ydCBjb25zdCBfY29tcHV0ZUJpbmRpbmdXaXRoVW5pdE9yQ3VycmVuY3kgPSAoXG5cdHByb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDxQcm9wZXJ0eT4sXG5cdGZvcm1hdHRlZFZhbHVlOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248c3RyaW5nPixcblx0aGlkZU1lYXN1cmU6IGJvb2xlYW4sXG5cdHNob3dPbmx5VW5pdERlY2ltYWxzOiBib29sZWFuXG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248c3RyaW5nPiA9PiB7XG5cdGlmIChcblx0XHRwcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0Py5hbm5vdGF0aW9ucz8uTWVhc3VyZXM/LlVuaXQgfHxcblx0XHRwcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0Py5hbm5vdGF0aW9ucz8uTWVhc3VyZXM/LklTT0N1cnJlbmN5XG5cdCkge1xuXHRcdGlmIChoaWRlTWVhc3VyZSAmJiBoYXNTdGF0aWNQZXJjZW50VW5pdChwcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0KSkge1xuXHRcdFx0cmV0dXJuIGZvcm1hdHRlZFZhbHVlO1xuXHRcdH1cblx0XHRyZXR1cm4gZ2V0QmluZGluZ1dpdGhVbml0T3JDdXJyZW5jeShcblx0XHRcdHByb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aCxcblx0XHRcdGZvcm1hdHRlZFZhbHVlLFxuXHRcdFx0dW5kZWZpbmVkLFxuXHRcdFx0aGlkZU1lYXN1cmUgPyB7IHNob3dNZWFzdXJlOiBmYWxzZSB9IDogdW5kZWZpbmVkLFxuXHRcdFx0dHJ1ZSxcblx0XHRcdHNob3dPbmx5VW5pdERlY2ltYWxzXG5cdFx0KTtcblx0fVxuXHRyZXR1cm4gZm9ybWF0dGVkVmFsdWU7XG59O1xuXG4vKipcbiAqIE1ldGhvZCB0byBjYWxjdWxhdGUgdGhlIHBlcmNlbnRhZ2UgdmFsdWUgb2YgUHJvZ3Jlc3MgSW5kaWNhdG9yLiBCYXNpYyBmb3JtdWxhIGlzIFZhbHVlL1RhcmdldCAqIDEwMC5cbiAqIEBwYXJhbSBvUHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoXG4gKiBAcmV0dXJucyBUaGUgZXhwcmVzc2lvbiBiaW5kaW5nIHVzZWQgdG8gY2FsY3VsYXRlIHRoZSBwZXJjZW50YWdlIHZhbHVlLCB3aGljaCBpcyBzaG93biBpbiB0aGUgcHJvZ3Jlc3MgaW5kaWNhdG9yIGJhc2VkIG9uIHRoZSBmb3JtdWxhIGdpdmVuIGFib3ZlLlxuICovXG5leHBvcnQgY29uc3QgYnVpbGRFeHByZXNzaW9uRm9yUHJvZ3Jlc3NJbmRpY2F0b3JQZXJjZW50VmFsdWUgPSAoXG5cdG9Qcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8RGF0YVBvaW50VHlwZT5cbik6IHN0cmluZyB8IHVuZGVmaW5lZCA9PiB7XG5cdGNvbnN0IGZpZWxkVmFsdWUgPSAob1Byb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aD8udGFyZ2V0T2JqZWN0Py5WYWx1ZSBhcyBQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb248UHJpbWl0aXZlVHlwZT4pIHx8IFwiXCI7XG5cdGNvbnN0IHJlbGF0aXZlTG9jYXRpb24gPSBnZXRSZWxhdGl2ZVBhdGhzKG9Qcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGgpO1xuXHRjb25zdCBmaWVsZFZhbHVlRXhwcmVzc2lvbiA9IGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihmaWVsZFZhbHVlLCByZWxhdGl2ZUxvY2F0aW9uKTtcblx0Y29uc3QgdGFyZ2V0RXhwcmVzc2lvbiA9IGdldERhdGFQb2ludFRhcmdldEV4cHJlc3Npb24ob1Byb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRPYmplY3QsIHJlbGF0aXZlTG9jYXRpb24pO1xuXG5cdGNvbnN0IG9Qcm9wZXJ0eURlZmluaXRpb24gPSBmaWVsZFZhbHVlLiR0YXJnZXQgYXMgUHJvcGVydHk7XG5cdGNvbnN0IHVuaXQgPSBvUHJvcGVydHlEZWZpbml0aW9uLmFubm90YXRpb25zPy5NZWFzdXJlcz8uVW5pdCB8fCBvUHJvcGVydHlEZWZpbml0aW9uLmFubm90YXRpb25zPy5NZWFzdXJlcz8uSVNPQ3VycmVuY3k7XG5cdGlmICh1bml0KSB7XG5cdFx0Y29uc3QgdW5pdEJpbmRpbmdFeHByZXNzaW9uID0gZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKHVuaXQsIHJlbGF0aXZlTG9jYXRpb24pO1xuXG5cdFx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKFxuXHRcdFx0Zm9ybWF0UmVzdWx0KFtmaWVsZFZhbHVlRXhwcmVzc2lvbiwgdGFyZ2V0RXhwcmVzc2lvbiwgdW5pdEJpbmRpbmdFeHByZXNzaW9uXSwgdmFsdWVGb3JtYXR0ZXJzLmNvbXB1dGVQZXJjZW50YWdlKVxuXHRcdCk7XG5cdH1cblxuXHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24oZm9ybWF0UmVzdWx0KFtmaWVsZFZhbHVlRXhwcmVzc2lvbiwgdGFyZ2V0RXhwcmVzc2lvbiwgXCJcIl0sIHZhbHVlRm9ybWF0dGVycy5jb21wdXRlUGVyY2VudGFnZSkpO1xufTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQThCQSxNQUFNQSx1Q0FBdUMsR0FBRyxDQUFDLFlBQVksRUFBRSxZQUFZLEVBQUUsYUFBYSxDQUFDO0VBVTNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ0EsTUFBTUMsNEJBQTRCLEdBQUdBLENBQ3BDQyxjQUF5QyxFQUN6Q0MsZ0JBQTBCLEtBQ1k7SUFDdEMsT0FBT0QsY0FBYyxFQUFFRSxXQUFXLEdBQUdDLDJCQUEyQixDQUFDSCxjQUFjLENBQUNFLFdBQVcsRUFBRUQsZ0JBQWdCLENBQUMsR0FBR0csc0JBQXNCO0VBQ3hJLENB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
|
|
@@ -170,8 +170,12 @@ const getFloatFormat = (
|
|
|
170
170
|
}
|
|
171
171
|
outExpression.formatOptions = Object.assign(outExpression.formatOptions, {
|
|
172
172
|
preserveDecimals: false,
|
|
173
|
-
maxFractionDigits: numberOfFractionalDigits
|
|
173
|
+
maxFractionDigits: numberOfFractionalDigits,
|
|
174
|
+
minFractionDigits: numberOfFractionalDigits
|
|
174
175
|
});
|
|
176
|
+
//we need to ignore the constraints otherwise the scale mess up the formatting by adding trailing zeros
|
|
177
|
+
// 1.234 with maxFractionDigits 2 and scale 4 will become 1.2300
|
|
178
|
+
outExpression.constraints = {};
|
|
175
179
|
}
|
|
176
180
|
return outExpression;
|
|
177
181
|
};
|
|
@@ -78,7 +78,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/deepEqual", "sap/fe/core/CommonUti
|
|
|
78
78
|
const propertyPath = getTargetObjectPath(dataModelPropertyPath, true);
|
|
79
79
|
const textAnnotation = property.annotations?.Common?.Text,
|
|
80
80
|
textArrangement = textAnnotation?.annotations?.UI?.TextArrangement?.toString(),
|
|
81
|
-
displayMode = textAnnotation && textArrangement && getDisplayMode(property);
|
|
81
|
+
displayMode = textAnnotation && textArrangement && getDisplayMode(property, dataModelPropertyPath.targetEntityType);
|
|
82
82
|
if (displayMode === "Description") {
|
|
83
83
|
relatedProperties[additionalPropertyPath] = additionalProperty;
|
|
84
84
|
} else if (displayMode && displayMode !== "Value" || !textAnnotation) {
|
|
@@ -133,8 +133,8 @@ sap.ui.define(["sap/base/Log", "sap/base/util/deepEqual", "sap/fe/core/CommonUti
|
|
|
133
133
|
} else {
|
|
134
134
|
propertyInfo.path = columnDef.path;
|
|
135
135
|
propertyInfo.dataType = typeConfig.className;
|
|
136
|
-
propertyInfo.constraints =
|
|
137
|
-
propertyInfo.formatOptions =
|
|
136
|
+
propertyInfo.constraints = typeConfig.typeInstance.oConstraints;
|
|
137
|
+
propertyInfo.formatOptions = typeConfig.typeInstance.oFormatOptions;
|
|
138
138
|
propertyInfo.sortable = isSortableProperty(sortRestrictionsInfo, columnDef);
|
|
139
139
|
propertyInfo.filterable = isFilterableProperty(filterRestrictionsInfo, columnDef);
|
|
140
140
|
propertyInfo.maxConditions = getPropertyMaxConditions(filterRestrictionsInfo, columnDef);
|
|
@@ -428,4 +428,4 @@ sap.ui.define(["sap/base/Log", "sap/base/util/deepEqual", "sap/fe/core/CommonUti
|
|
|
428
428
|
}
|
|
429
429
|
return ODataTableDelegate;
|
|
430
430
|
}, false);
|
|
431
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJPRGF0YVRhYmxlRGVsZWdhdGUiLCJPYmplY3QiLCJhc3NpZ24iLCJUYWJsZURlbGVnYXRlIiwiZmV0Y2hQcm9wZXJ0aWVzIiwidGFibGUiLCJtb2RlbCIsIl9nZXRNb2RlbCIsInByb3BlcnRpZXMiLCJfY3JlYXRlUHJvcGVydHlJbmZvcyIsImNyZWF0ZUludGVybmFsQmluZGluZ0NvbnRleHQiLCJNYWNyb3NEZWxlZ2F0ZVV0aWwiLCJzZXRDYWNoZWRQcm9wZXJ0aWVzIiwiZ2V0QmluZGluZ0NvbnRleHQiLCJzZXRQcm9wZXJ0eSIsImRpYWxvZyIsImlzQSIsImdldFBhcmVudCIsImludGVybmFsTW9kZWwiLCJnZXRNb2RlbCIsImludGVybmFsQmluZGluZ0NvbnRleHQiLCJuZXdJbnRlcm5hbEJpbmRpbmdDb250ZXh0UGF0aCIsImdldFBhdGgiLCJnZXRJZCIsImdldFByb3BlcnR5IiwibmV3SW50ZXJuYWxCaW5kaW5nQ29udGV4dCIsImJpbmRDb250ZXh0IiwiZ2V0Qm91bmRDb250ZXh0Iiwic2V0QmluZGluZ0NvbnRleHQiLCJjb2xsZWN0UmVsYXRlZFByb3BlcnRpZXMiLCJkYXRhTW9kZWxQcm9wZXJ0eVBhdGgiLCJkYXRhTW9kZWxBZGRpdGlvbmFsUHJvcGVydHlQYXRoIiwiZ2V0QWRkaXRpb25hbFByb3BlcnR5IiwicmVsYXRlZFByb3BlcnRpZXMiLCJ0YXJnZXRPYmplY3QiLCJhZGRpdGlvbmFsUHJvcGVydHkiLCJhZGRpdGlvbmFsUHJvcGVydHlQYXRoIiwiZ2V0VGFyZ2V0T2JqZWN0UGF0aCIsInByb3BlcnR5IiwicHJvcGVydHlQYXRoIiwidGV4dEFubm90YXRpb24iLCJhbm5vdGF0aW9ucyIsIkNvbW1vbiIsIlRleHQiLCJ0ZXh0QXJyYW5nZW1lbnQiLCJVSSIsIlRleHRBcnJhbmdlbWVudCIsInRvU3RyaW5nIiwiZGlzcGxheU1vZGUiLCJnZXREaXNwbGF5TW9kZSIsIm1ldGFkYXRhSW5mbyIsImdldERlbGVnYXRlIiwicGF5bG9hZCIsImVudGl0eVNldFBhdGgiLCJjb2xsZWN0aW9uTmFtZSIsIm1ldGFNb2RlbCIsImdldE1ldGFNb2RlbCIsInJlcXVlc3RPYmplY3QiLCJ0aGVuIiwiZW50aXR5U2V0QW5ub3RhdGlvbnMiLCJzb3J0UmVzdHJpY3Rpb25zSW5mbyIsImdldFNvcnRSZXN0cmljdGlvbnNJbmZvIiwiZmlsdGVyUmVzdHJpY3Rpb25zIiwiZmlsdGVyUmVzdHJpY3Rpb25zSW5mbyIsImdldEZpbHRlclJlc3RyaWN0aW9uc0luZm8iLCJmaWx0ZXJGdW5jdGlvbnMiLCJjYXNlU2Vuc2l0aXZlIiwiTW9kZWxIZWxwZXIiLCJpc0ZpbHRlcmluZ0Nhc2VTZW5zaXRpdmUiLCJjdXN0b21EYXRhRm9yQ29sdW1ucyIsImdldEN1c3RvbURhdGEiLCJwcm9wZXJ0aWVzVG9CZUNyZWF0ZWQiLCJkYXRhTW9kZWxFbnRpdHlQYXRoIiwiZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzIiwiZ2V0Q29udGV4dCIsImN1c3RvbURhdGEiLCJmb3JFYWNoIiwiY29sdW1uRGVmIiwidHlwZUNvbmZpZyIsImlzVHlwZUZpbHRlcmFibGUiLCIkVHlwZSIsImdldFR5cGVNYXAiLCJnZXRUeXBlQ29uZmlnIiwiVHlwZU1hcCIsInByb3BlcnR5SW5mbyIsImtleSIsInBhdGgiLCJsYWJlbCIsImVuaGFuY2VEYXRhTW9kZWxQYXRoIiwidGFyZ2V0UHJvcGVydHlQYXRoIiwidHlwZSIsInByb3BlcnR5VHlwZUNvbmZpZyIsImZvcm1hdE9wdGlvbnMiLCJjb25zdHJhaW50cyIsInJlbGF0ZWRQcm9wZXJ0aWVzSW5mbyIsInJlbGF0ZWRQcm9wZXJ0eVBhdGhzIiwia2V5cyIsImxlbmd0aCIsInByb3BlcnR5SW5mb3MiLCJmaW5kIiwiZGF0YVR5cGUiLCJjbGFzc05hbWUiLCJzb3J0YWJsZSIsImlzU29ydGFibGVQcm9wZXJ0eSIsImZpbHRlcmFibGUiLCJpc0ZpbHRlcmFibGVQcm9wZXJ0eSIsIm1heENvbmRpdGlvbnMiLCJnZXRQcm9wZXJ0eU1heENvbmRpdGlvbnMiLCJwdXNoIiwicmVsYXRlZENvbHVtbnMiLCJjcmVhdGVSZWxhdGVkUHJvcGVydGllcyIsImNvbmNhdCIsInVwZGF0ZUJpbmRpbmdJbmZvIiwibWRjVGFibGUiLCJiaW5kaW5nSW5mbyIsImFwcGx5IiwiY29sbGVjdGlvblBhdGgiLCJwYXJhbWV0ZXJzIiwiZmlsdGVyQmFyIiwiRWxlbWVudCIsImdldEVsZW1lbnRCeUlkIiwiZ2V0RmlsdGVyIiwiaXNGaWx0ZXJFbmFibGVkIiwiaXNGaWx0ZXJpbmdFbmFibGVkIiwiY29uZGl0aW9ucyIsImlubmVyRmlsdGVySW5mbyIsIm91dGVyRmlsdGVySW5mbyIsImZpbHRlcnMiLCJ0YWJsZVByb3BlcnRpZXMiLCJnZXRDYWNoZWRQcm9wZXJ0aWVzIiwiZ2V0Q29uZGl0aW9ucyIsIkZpbHRlclV0aWwiLCJnZXRGaWx0ZXJJbmZvIiwiaXNUcmVlVGFibGUiLCJoaWVyYXJjaHlRdWFsaWZpZXIiLCIkJGFnZ3JlZ2F0aW9uIiwiZXhwYW5kVG8iLCJpbml0aWFsRXhwYW5zaW9uTGV2ZWwiLCJwYXJhbWV0ZXJOYW1lcyIsIkRlbGVnYXRlVXRpbCIsImdldFBhcmFtZXRlck5hbWVzIiwiX3VwZGF0ZVByb3BlcnR5SW5mbyIsInBhcmFtZXRlclBhdGgiLCJnZXRQYXJhbWV0ZXJzSW5mbyIsIiRzZWFyY2giLCJDb21tb25VdGlscyIsIm5vcm1hbGl6ZVNlYXJjaFRlcm0iLCJnZXRTZWFyY2giLCJ1bmRlZmluZWQiLCJzZWFyY2giLCJOdW1iZXIiLCJNQVhfU0FGRV9JTlRFR0VSIiwiJCRzaGFyZWRSZXF1ZXN0IiwiX2FwcGx5RGVmYXVsdFNvcnRpbmciLCIkc2VsZWN0IiwicmVkdWNlIiwicXVlcnkiLCJpbmNsdWRlcyIsIiRjb3VudCIsImlzRHJhZnRTdXBwb3J0ZWQiLCJGaWx0ZXIiLCJGaWx0ZXJPcGVyYXRvciIsIkVRIiwiUHJvbWlzZSIsInJlc29sdmUiLCJhdHRhY2hFdmVudE9uY2UiLCJzb3J0ZXIiLCJkZWZhdWx0U29ydFByb3BlcnR5TmFtZSIsIlNvcnRlciIsImFUYWJsZVByb3BlcnRpZXMiLCJvTURDVGFibGUiLCJtQ29uZGl0aW9ucyIsIm9NZXRhZGF0YUluZm8iLCJhQ29uZGl0aW9uS2V5Iiwib01ldGFNb2RlbCIsImNvbmRpdGlvbktleSIsImNvbmRpdGlvbktleVR5cGUiLCJnZXRPYmplY3QiLCJ0YWJsZVByb3BlcnR5IiwiaW5kZXgiLCJmaW5kSW5kZXgiLCJvQ29sdW1uRGVmIiwidHlwZUluc3RhbmNlIiwiYmFzZVR5cGUiLCJvRm9ybWF0T3B0aW9ucyIsIm9Db25zdHJhaW50cyIsInVwZGF0ZUJpbmRpbmciLCJvVGFibGUiLCJvQmluZGluZ0luZm8iLCJvQmluZGluZyIsImJOZWVkTWFudWFsUmVmcmVzaCIsIm9JbnRlcm5hbEJpbmRpbmdDb250ZXh0Iiwic01hbnVhbFVwZGF0ZVByb3BlcnR5S2V5Iiwic0xhc3RTZWFyY2giLCJzTGFzdEZpbHRlciIsImJQZW5kaW5nTWFudWFsVXBkYXRlIiwibGFzdFNlYXJjaCIsImxhc3RGaWx0ZXIiLCJvUm93QmluZGluZyIsImdldFJvd0JpbmRpbmciLCJkZWVwRXF1YWwiLCJyZXF1ZXN0UmVmcmVzaCIsImdldEdyb3VwSWQiLCJmaW5hbGx5IiwiY2F0Y2giLCJvRXJyb3IiLCJMb2ciLCJlcnJvciIsImZpcmVFdmVudCIsImV4aXN0aW5nQ29sdW1ucyIsInJlbGF0ZWRQcm9wZXJ0eU5hbWVNYXAiLCJyZWxhdGVkQ29sdW1uIiwiY29sdW1uIiwibmV3TmFtZSIsInZhbHVlSGVscENvbHVtblR5cGVDb25maWciLCJ2YWx1ZUhlbHBUYWJsZUNvbHVtbiIsImdldExhYmVsIiwibWFwIiwiY29sdW1uTmFtZSIsImhhc093blByb3BlcnR5IiwiaXNNdWx0aVZhbHVlRmlsdGVyRXhwcmVzc2lvbiIsImdldEFzc29jaWF0ZWRUZXh0UHJvcGVydHlQYXRoIiwiZ2V0QXNzb2NpYXRlZEN1cnJlbmN5UHJvcGVydHlQYXRoIiwiZ2V0QXNzb2NpYXRlZFVuaXRQcm9wZXJ0eVBhdGgiLCJnZXRBc3NvY2lhdGVkVGltZXpvbmVQcm9wZXJ0eVBhdGgiLCJkYXRhTW9kZWxBZGRpdGlvbmFsUHJvcGVydHkiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIlRhYmxlRGVsZWdhdGUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBQcm9wZXJ0eSB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgZGVlcEVxdWFsIGZyb20gXCJzYXAvYmFzZS91dGlsL2RlZXBFcXVhbFwiO1xuaW1wb3J0IENvbW1vblV0aWxzIGZyb20gXCJzYXAvZmUvY29yZS9Db21tb25VdGlsc1wiO1xuaW1wb3J0IHsgZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWV0YU1vZGVsQ29udmVydGVyXCI7XG5pbXBvcnQgeyBnZXRUeXBlQ29uZmlnIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL3RhYmxlL0NvbHVtbnNcIjtcbmltcG9ydCB0eXBlIHsgRmlsdGVyUmVzdHJpY3Rpb25zSW5mb1R5cGUsIFNvcnRSZXN0cmljdGlvbnNJbmZvVHlwZSB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01ldGFNb2RlbEZ1bmN0aW9uXCI7XG5pbXBvcnQgeyBnZXRGaWx0ZXJSZXN0cmljdGlvbnNJbmZvLCBnZXRTb3J0UmVzdHJpY3Rpb25zSW5mbywgaXNNdWx0aVZhbHVlRmlsdGVyRXhwcmVzc2lvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01ldGFNb2RlbEZ1bmN0aW9uXCI7XG5pbXBvcnQgTW9kZWxIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvTW9kZWxIZWxwZXJcIjtcbmltcG9ydCB0eXBlIHsgRGF0YU1vZGVsT2JqZWN0UGF0aCB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0RhdGFNb2RlbFBhdGhIZWxwZXJcIjtcbmltcG9ydCB7IGVuaGFuY2VEYXRhTW9kZWxQYXRoLCBnZXRUYXJnZXRPYmplY3RQYXRoIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRGF0YU1vZGVsUGF0aEhlbHBlclwiO1xuaW1wb3J0IHsgZ2V0RGlzcGxheU1vZGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9EaXNwbGF5TW9kZUZvcm1hdHRlclwiO1xuaW1wb3J0IHtcblx0Z2V0QXNzb2NpYXRlZEN1cnJlbmN5UHJvcGVydHlQYXRoLFxuXHRnZXRBc3NvY2lhdGVkVGV4dFByb3BlcnR5UGF0aCxcblx0Z2V0QXNzb2NpYXRlZFRpbWV6b25lUHJvcGVydHlQYXRoLFxuXHRnZXRBc3NvY2lhdGVkVW5pdFByb3BlcnR5UGF0aCxcblx0Z2V0TGFiZWxcbn0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvUHJvcGVydHlIZWxwZXJcIjtcbmltcG9ydCB0eXBlIHsgRGVmYXVsdFR5cGVGb3JFZG1UeXBlIH0gZnJvbSBcInNhcC9mZS9jb3JlL3R5cGUvRURNXCI7XG5pbXBvcnQgeyBpc1R5cGVGaWx0ZXJhYmxlIH0gZnJvbSBcInNhcC9mZS9jb3JlL3R5cGUvRURNXCI7XG5pbXBvcnQgdHlwZSB7IENvbGxlY3Rpb25CaW5kaW5nSW5mbywgRmlsdGVySW5mbyB9IGZyb20gXCJzYXAvZmUvbWFjcm9zL0NvbGxlY3Rpb25CaW5kaW5nSW5mb1wiO1xuaW1wb3J0IE1hY3Jvc0RlbGVnYXRlVXRpbCBmcm9tIFwic2FwL2ZlL21hY3Jvcy9EZWxlZ2F0ZVV0aWxcIjtcbmltcG9ydCB0eXBlIHsgRmlsdGVyQ29uZGl0aW9ucyB9IGZyb20gXCJzYXAvZmUvbWFjcm9zL2ZpbHRlckJhci9GaWx0ZXJIZWxwZXJcIjtcbmltcG9ydCB7IGdldFBhdGgsIGlzRmlsdGVyYWJsZVByb3BlcnR5LCBpc1NvcnRhYmxlUHJvcGVydHkgfSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9pbnRlcm5hbC92YWx1ZWhlbHAvVGFibGVEZWxlZ2F0ZUhlbHBlclwiO1xuaW1wb3J0IHR5cGUgTWFuYWdlZE9iamVjdCBmcm9tIFwic2FwL3VpL2Jhc2UvTWFuYWdlZE9iamVjdFwiO1xuaW1wb3J0IHR5cGUgeyBCYXNlQWdncmVnYXRpb25CaW5kaW5nSW5mbyB9IGZyb20gXCJzYXAvdWkvYmFzZS9NYW5hZ2VkT2JqZWN0XCI7XG5pbXBvcnQgRWxlbWVudCBmcm9tIFwic2FwL3VpL2NvcmUvRWxlbWVudFwiO1xuaW1wb3J0IHR5cGUgRmlsdGVyQmFyIGZyb20gXCJzYXAvdWkvbWRjL0ZpbHRlckJhclwiO1xuaW1wb3J0IHR5cGUgVGFibGUgZnJvbSBcInNhcC91aS9tZGMvVGFibGVcIjtcbmltcG9ydCB0eXBlIHsgTURDVGFibGVQcm9wZXJ0eUluZm8gYXMgUHJvcGVydHlJbmZvIH0gZnJvbSBcInNhcC91aS9tZGMvVGFibGVcIjtcbmltcG9ydCB0eXBlIHsgQ29uZGl0aW9uT2JqZWN0IH0gZnJvbSBcInNhcC91aS9tZGMvY29uZGl0aW9uL0NvbmRpdGlvblwiO1xuaW1wb3J0IFRhYmxlRGVsZWdhdGUgZnJvbSBcInNhcC91aS9tZGMvb2RhdGEvdjQvVGFibGVEZWxlZ2F0ZVwiO1xuaW1wb3J0IFR5cGVNYXAgZnJvbSBcInNhcC91aS9tZGMvb2RhdGEvdjQvVHlwZU1hcFwiO1xuaW1wb3J0IERlbGVnYXRlVXRpbCBmcm9tIFwic2FwL3VpL21kYy9vZGF0YS92NC91dGlsL0RlbGVnYXRlVXRpbFwiO1xuaW1wb3J0IEZpbHRlclV0aWwgZnJvbSBcInNhcC91aS9tZGMvdXRpbC9GaWx0ZXJVdGlsXCI7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvQ29udGV4dFwiO1xuaW1wb3J0IEZpbHRlciBmcm9tIFwic2FwL3VpL21vZGVsL0ZpbHRlclwiO1xuaW1wb3J0IEZpbHRlck9wZXJhdG9yIGZyb20gXCJzYXAvdWkvbW9kZWwvRmlsdGVyT3BlcmF0b3JcIjtcbmltcG9ydCB0eXBlIE1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvTW9kZWxcIjtcbmltcG9ydCBTb3J0ZXIgZnJvbSBcInNhcC91aS9tb2RlbC9Tb3J0ZXJcIjtcbmltcG9ydCB0eXBlIEpTT05Nb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL2pzb24vSlNPTk1vZGVsXCI7XG5pbXBvcnQgdHlwZSBPRGF0YUxpc3RCaW5kaW5nIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFMaXN0QmluZGluZ1wiO1xuaW1wb3J0IHR5cGUgT0RhdGFNZXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1ldGFNb2RlbFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTW9kZWxcIjtcbmltcG9ydCB0eXBlIHsgTWV0YU1vZGVsRW50aXR5U2V0QW5ub3RhdGlvbiB9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi90eXBlcy9tZXRhbW9kZWxfdHlwZXNcIjtcblxudHlwZSBDb21wbGV4UHJvcGVydHlNYXAgPSBSZWNvcmQ8c3RyaW5nLCBQcm9wZXJ0eT47XG5cbnR5cGUgTWRjVGFibGVEZWxlZ2F0ZSA9IHsgbmFtZTogc3RyaW5nOyBwYXlsb2FkOiBQYXlsb2FkIH07XG5cbnR5cGUgUGF5bG9hZCA9IHtcblx0Y29sbGVjdGlvbk5hbWU/OiBzdHJpbmc7XG5cdGNvbGxlY3Rpb25QYXRoPzogc3RyaW5nO1xuXHRkZWZhdWx0U29ydFByb3BlcnR5TmFtZT86IHN0cmluZztcblx0aGllcmFyY2h5UXVhbGlmaWVyPzogc3RyaW5nO1xuXHRpbml0aWFsRXhwYW5zaW9uTGV2ZWw/OiBudW1iZXI7XG59O1xuLyoqXG4gKiBUZXN0IGRlbGVnYXRlIGZvciBPRGF0YSBWNC5cbiAqL1xuY29uc3QgT0RhdGFUYWJsZURlbGVnYXRlID0gT2JqZWN0LmFzc2lnbih7fSwgVGFibGVEZWxlZ2F0ZSk7XG5cbi8qKlxuICogRmV0Y2hlcyB0aGUgcmVsZXZhbnQgbWV0YWRhdGEgZm9yIHRoZSB0YWJsZSBhbmQgcmV0dXJucyBwcm9wZXJ0eSBpbmZvIGFycmF5LlxuICogQHBhcmFtIHRhYmxlIEluc3RhbmNlIG9mIHRoZSBNREN0YWJsZVxuICogQHJldHVybnMgQXJyYXkgb2YgcHJvcGVydHkgaW5mb1xuICovXG5PRGF0YVRhYmxlRGVsZWdhdGUuZmV0Y2hQcm9wZXJ0aWVzID0gYXN5bmMgZnVuY3Rpb24gKHRhYmxlOiBUYWJsZSk6IFByb21pc2U8UHJvcGVydHlJbmZvPiB7XG5cdGNvbnN0IG1vZGVsID0gYXdhaXQgdGhpcy5fZ2V0TW9kZWwodGFibGUpO1xuXHRjb25zdCBwcm9wZXJ0aWVzID0gYXdhaXQgdGhpcy5fY3JlYXRlUHJvcGVydHlJbmZvcyh0YWJsZSwgbW9kZWwpO1xuXHRPRGF0YVRhYmxlRGVsZWdhdGUuY3JlYXRlSW50ZXJuYWxCaW5kaW5nQ29udGV4dCh0YWJsZSk7XG5cdE1hY3Jvc0RlbGVnYXRlVXRpbC5zZXRDYWNoZWRQcm9wZXJ0aWVzKHRhYmxlLCBwcm9wZXJ0aWVzKTtcblx0KHRhYmxlLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgQ29udGV4dCkuc2V0UHJvcGVydHkoXCJ0YWJsZVByb3BlcnRpZXNBdmFpbGFibGVcIiwgdHJ1ZSk7XG5cdHJldHVybiBwcm9wZXJ0aWVzO1xufTtcblxuT0RhdGFUYWJsZURlbGVnYXRlLmNyZWF0ZUludGVybmFsQmluZGluZ0NvbnRleHQgPSBmdW5jdGlvbiAodGFibGU6IFRhYmxlKTogdm9pZCB7XG5cdGxldCBkaWFsb2c6IE1hbmFnZWRPYmplY3QgfCBudWxsID0gdGFibGU7XG5cdHdoaWxlIChkaWFsb2cgJiYgIWRpYWxvZy5pc0EoXCJzYXAudWkubWRjLnZhbHVlaGVscC5EaWFsb2dcIikpIHtcblx0XHRkaWFsb2cgPSAoZGlhbG9nIGFzIE1hbmFnZWRPYmplY3QpLmdldFBhcmVudCgpO1xuXHR9XG5cblx0Y29uc3QgaW50ZXJuYWxNb2RlbCA9IHRhYmxlLmdldE1vZGVsKFwiaW50ZXJuYWxcIikgYXMgSlNPTk1vZGVsO1xuXG5cdGlmIChkaWFsb2cgJiYgaW50ZXJuYWxNb2RlbCkge1xuXHRcdGNvbnN0IGludGVybmFsQmluZGluZ0NvbnRleHQgPSBkaWFsb2cuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKTtcblx0XHRsZXQgbmV3SW50ZXJuYWxCaW5kaW5nQ29udGV4dFBhdGg7XG5cdFx0aWYgKGludGVybmFsQmluZGluZ0NvbnRleHQpIHtcblx0XHRcdG5ld0ludGVybmFsQmluZGluZ0NvbnRleHRQYXRoID0gaW50ZXJuYWxCaW5kaW5nQ29udGV4dC5nZXRQYXRoKCkgKyBgOjpWSERpYWxvZzo6JHtkaWFsb2cuZ2V0SWQoKX06OnRhYmxlYDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0bmV3SW50ZXJuYWxCaW5kaW5nQ29udGV4dFBhdGggPSBgL2J1aWxkaW5nYmxvY2tzLyR7dGFibGUuZ2V0SWQoKX1gO1xuXHRcdFx0aW50ZXJuYWxNb2RlbC5zZXRQcm9wZXJ0eShcIi9idWlsZGluZ2Jsb2Nrc1wiLCB7IC4uLmludGVybmFsTW9kZWwuZ2V0UHJvcGVydHkoXCIvYnVpbGRpbmdibG9ja3NcIikgfSk7XG5cdFx0fVxuXHRcdGNvbnN0IG5ld0ludGVybmFsQmluZGluZ0NvbnRleHQgPSBpbnRlcm5hbE1vZGVsLmJpbmRDb250ZXh0KG5ld0ludGVybmFsQmluZGluZ0NvbnRleHRQYXRoKS5nZXRCb3VuZENvbnRleHQoKTtcblx0XHR0YWJsZS5zZXRCaW5kaW5nQ29udGV4dChuZXdJbnRlcm5hbEJpbmRpbmdDb250ZXh0LCBcImludGVybmFsXCIpO1xuXHR9XG59O1xuXG4vKipcbiAqIENvbGxlY3QgcmVsYXRlZCBwcm9wZXJ0aWVzIGZyb20gYSBwcm9wZXJ0eSdzIGFubm90YXRpb25zLlxuICogQHBhcmFtIGRhdGFNb2RlbFByb3BlcnR5UGF0aCBUaGUgbW9kZWwgb2JqZWN0IHBhdGggb2YgdGhlIHByb3BlcnR5LlxuICogQHJldHVybnMgVGhlIHJlbGF0ZWQgcHJvcGVydGllcyB0aGF0IHdlcmUgaWRlbnRpZmllZC5cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGNvbGxlY3RSZWxhdGVkUHJvcGVydGllcyhkYXRhTW9kZWxQcm9wZXJ0eVBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8UHJvcGVydHk+KTogQ29tcGxleFByb3BlcnR5TWFwIHtcblx0Y29uc3QgZGF0YU1vZGVsQWRkaXRpb25hbFByb3BlcnR5UGF0aCA9IGdldEFkZGl0aW9uYWxQcm9wZXJ0eShkYXRhTW9kZWxQcm9wZXJ0eVBhdGgpO1xuXHRjb25zdCByZWxhdGVkUHJvcGVydGllczogQ29tcGxleFByb3BlcnR5TWFwID0ge307XG5cdGlmIChkYXRhTW9kZWxBZGRpdGlvbmFsUHJvcGVydHlQYXRoPy50YXJnZXRPYmplY3QpIHtcblx0XHRjb25zdCBhZGRpdGlvbmFsUHJvcGVydHkgPSBkYXRhTW9kZWxBZGRpdGlvbmFsUHJvcGVydHlQYXRoLnRhcmdldE9iamVjdDtcblx0XHRjb25zdCBhZGRpdGlvbmFsUHJvcGVydHlQYXRoID0gZ2V0VGFyZ2V0T2JqZWN0UGF0aChkYXRhTW9kZWxBZGRpdGlvbmFsUHJvcGVydHlQYXRoLCB0cnVlKTtcblxuXHRcdGNvbnN0IHByb3BlcnR5ID0gZGF0YU1vZGVsUHJvcGVydHlQYXRoLnRhcmdldE9iamVjdCBhcyBQcm9wZXJ0eTtcblx0XHRjb25zdCBwcm9wZXJ0eVBhdGggPSBnZXRUYXJnZXRPYmplY3RQYXRoKGRhdGFNb2RlbFByb3BlcnR5UGF0aCwgdHJ1ZSk7XG5cblx0XHRjb25zdCB0ZXh0QW5ub3RhdGlvbiA9IHByb3BlcnR5LmFubm90YXRpb25zPy5Db21tb24/LlRleHQsXG5cdFx0XHR0ZXh0QXJyYW5nZW1lbnQgPSB0ZXh0QW5ub3RhdGlvbj8uYW5ub3RhdGlvbnM/LlVJPy5UZXh0QXJyYW5nZW1lbnQ/LnRvU3RyaW5nKCksXG5cdFx0XHRkaXNwbGF5TW9kZSA9IHRleHRBbm5vdGF0aW9uICYmIHRleHRBcnJhbmdlbWVudCAmJiBnZXREaXNwbGF5TW9kZShwcm9wZXJ0eSk7XG5cblx0XHRpZiAoZGlzcGxheU1vZGUgPT09IFwiRGVzY3JpcHRpb25cIikge1xuXHRcdFx0cmVsYXRlZFByb3BlcnRpZXNbYWRkaXRpb25hbFByb3BlcnR5UGF0aF0gPSBhZGRpdGlvbmFsUHJvcGVydHk7XG5cdFx0fSBlbHNlIGlmICgoZGlzcGxheU1vZGUgJiYgZGlzcGxheU1vZGUgIT09IFwiVmFsdWVcIikgfHwgIXRleHRBbm5vdGF0aW9uKSB7XG5cdFx0XHRyZWxhdGVkUHJvcGVydGllc1twcm9wZXJ0eVBhdGhdID0gcHJvcGVydHk7XG5cdFx0XHRyZWxhdGVkUHJvcGVydGllc1thZGRpdGlvbmFsUHJvcGVydHlQYXRoXSA9IGFkZGl0aW9uYWxQcm9wZXJ0eTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIHJlbGF0ZWRQcm9wZXJ0aWVzO1xufVxuXG5PRGF0YVRhYmxlRGVsZWdhdGUuX2NyZWF0ZVByb3BlcnR5SW5mb3MgPSBhc3luYyBmdW5jdGlvbiAodGFibGU6IFRhYmxlLCBtb2RlbDogT0RhdGFNb2RlbCk6IFByb21pc2U8UHJvcGVydHlJbmZvW10+IHtcblx0Y29uc3QgbWV0YWRhdGFJbmZvID0gKHRhYmxlLmdldERlbGVnYXRlKCkgYXMgeyBwYXlsb2FkOiBQYXlsb2FkIH0pLnBheWxvYWQ7XG5cdGNvbnN0IHByb3BlcnRpZXM6IFByb3BlcnR5SW5mb1tdID0gW107XG5cdGNvbnN0IGVudGl0eVNldFBhdGggPSBgLyR7bWV0YWRhdGFJbmZvLmNvbGxlY3Rpb25OYW1lfWA7XG5cdGNvbnN0IG1ldGFNb2RlbCA9IG1vZGVsLmdldE1ldGFNb2RlbCgpO1xuXG5cdHJldHVybiBtZXRhTW9kZWwucmVxdWVzdE9iamVjdChgJHtlbnRpdHlTZXRQYXRofUBgKS50aGVuKGZ1bmN0aW9uIChlbnRpdHlTZXRBbm5vdGF0aW9uczogTWV0YU1vZGVsRW50aXR5U2V0QW5ub3RhdGlvbikge1xuXHRcdGNvbnN0IHNvcnRSZXN0cmljdGlvbnNJbmZvID0gZ2V0U29ydFJlc3RyaWN0aW9uc0luZm8oZW50aXR5U2V0QW5ub3RhdGlvbnMpO1xuXHRcdGNvbnN0IGZpbHRlclJlc3RyaWN0aW9ucyA9IGVudGl0eVNldEFubm90YXRpb25zW1wiQE9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuRmlsdGVyUmVzdHJpY3Rpb25zXCJdO1xuXHRcdGNvbnN0IGZpbHRlclJlc3RyaWN0aW9uc0luZm8gPSBnZXRGaWx0ZXJSZXN0cmljdGlvbnNJbmZvKGZpbHRlclJlc3RyaWN0aW9ucyk7XG5cdFx0Y29uc3QgZmlsdGVyRnVuY3Rpb25zID0gZW50aXR5U2V0QW5ub3RhdGlvbnNbXCJAT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5GaWx0ZXJGdW5jdGlvbnNcIl07XG5cdFx0Y29uc3QgY2FzZVNlbnNpdGl2ZSA9IE1vZGVsSGVscGVyLmlzRmlsdGVyaW5nQ2FzZVNlbnNpdGl2ZShtZXRhTW9kZWwsIGZpbHRlckZ1bmN0aW9ucyk7XG5cdFx0Y29uc3QgY3VzdG9tRGF0YUZvckNvbHVtbnMgPSBNYWNyb3NEZWxlZ2F0ZVV0aWwuZ2V0Q3VzdG9tRGF0YTx7XG5cdFx0XHRjdXN0b21EYXRhOiAoUHJvcGVydHlJbmZvICYgeyAkVHlwZToga2V5b2YgdHlwZW9mIERlZmF1bHRUeXBlRm9yRWRtVHlwZSB9KVtdO1xuXHRcdH0+KHRhYmxlLCBcImNvbHVtbnNcIikhO1xuXHRcdGNvbnN0IHByb3BlcnRpZXNUb0JlQ3JlYXRlZDogUmVjb3JkPHN0cmluZywgUHJvcGVydHk+ID0ge307XG5cdFx0Y29uc3QgZGF0YU1vZGVsRW50aXR5UGF0aCA9IGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cygodGFibGUuZ2V0TW9kZWwoKSBhcyBPRGF0YU1vZGVsKS5nZXRNZXRhTW9kZWwoKS5nZXRDb250ZXh0KGVudGl0eVNldFBhdGgpKTtcblx0XHRjdXN0b21EYXRhRm9yQ29sdW1ucy5jdXN0b21EYXRhLmZvckVhY2goZnVuY3Rpb24gKGNvbHVtbkRlZjogUHJvcGVydHlJbmZvICYgeyAkVHlwZToga2V5b2YgdHlwZW9mIERlZmF1bHRUeXBlRm9yRWRtVHlwZSB9KSB7XG5cdFx0XHRsZXQgdHlwZUNvbmZpZyA9IGlzVHlwZUZpbHRlcmFibGUoY29sdW1uRGVmLiRUeXBlKVxuXHRcdFx0XHQ/IHRhYmxlLmdldFR5cGVNYXAoKS5nZXRUeXBlQ29uZmlnKGNvbHVtbkRlZi4kVHlwZSlcblx0XHRcdFx0OiBUeXBlTWFwLmdldFR5cGVDb25maWcoXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5TdHJpbmdcIik7XG5cdFx0XHRjb25zdCBwcm9wZXJ0eUluZm86IFByb3BlcnR5SW5mbyA9IHtcblx0XHRcdFx0a2V5OiBjb2x1bW5EZWYucGF0aCEsXG5cdFx0XHRcdGxhYmVsOiBjb2x1bW5EZWYubGFiZWxcblx0XHRcdH07XG5cblx0XHRcdGNvbnN0IGRhdGFNb2RlbFByb3BlcnR5UGF0aCA9IGVuaGFuY2VEYXRhTW9kZWxQYXRoPFByb3BlcnR5PihkYXRhTW9kZWxFbnRpdHlQYXRoLCBjb2x1bW5EZWYucGF0aCk7XG5cdFx0XHRjb25zdCBwcm9wZXJ0eSA9IGRhdGFNb2RlbFByb3BlcnR5UGF0aC50YXJnZXRPYmplY3QgYXMgUHJvcGVydHk7XG5cdFx0XHRpZiAocHJvcGVydHkpIHtcblx0XHRcdFx0Y29uc3QgdGFyZ2V0UHJvcGVydHlQYXRoID0gZ2V0VGFyZ2V0T2JqZWN0UGF0aChkYXRhTW9kZWxQcm9wZXJ0eVBhdGgsIHRydWUpO1xuXHRcdFx0XHRpZiAoaXNUeXBlRmlsdGVyYWJsZShwcm9wZXJ0eS50eXBlIGFzIGtleW9mIHR5cGVvZiBEZWZhdWx0VHlwZUZvckVkbVR5cGUpKSB7XG5cdFx0XHRcdFx0Y29uc3QgcHJvcGVydHlUeXBlQ29uZmlnID0gZ2V0VHlwZUNvbmZpZyhwcm9wZXJ0eSk7XG5cdFx0XHRcdFx0dHlwZUNvbmZpZyA9XG5cdFx0XHRcdFx0XHRUeXBlTWFwLmdldFR5cGVDb25maWcoXG5cdFx0XHRcdFx0XHRcdHByb3BlcnR5VHlwZUNvbmZpZy50eXBlID8/IFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuU3RyaW5nXCIsXG5cdFx0XHRcdFx0XHRcdHByb3BlcnR5VHlwZUNvbmZpZy5mb3JtYXRPcHRpb25zLFxuXHRcdFx0XHRcdFx0XHRwcm9wZXJ0eVR5cGVDb25maWcuY29uc3RyYWludHNcblx0XHRcdFx0XHRcdCkgPz8gdHlwZUNvbmZpZztcblx0XHRcdFx0fVxuXHRcdFx0XHQvL0NoZWNrIGlmIHRoZXJlIGlzIGFuIGFkZGl0aW9uYWwgcHJvcGVydHkgbGlua2VkIHRvIHRoZSBwcm9wZXJ0eSBhcyBhIFVuaXQsIEN1cnJlbmN5LCBUaW1lem9uZSBvciB0ZXh0QXJyYW5nZW1lbnRcblx0XHRcdFx0Y29uc3QgcmVsYXRlZFByb3BlcnRpZXNJbmZvID0gY29sbGVjdFJlbGF0ZWRQcm9wZXJ0aWVzKGRhdGFNb2RlbFByb3BlcnR5UGF0aCk7XG5cdFx0XHRcdGNvbnN0IHJlbGF0ZWRQcm9wZXJ0eVBhdGhzOiBzdHJpbmdbXSA9IE9iamVjdC5rZXlzKHJlbGF0ZWRQcm9wZXJ0aWVzSW5mbyk7XG5cblx0XHRcdFx0aWYgKHJlbGF0ZWRQcm9wZXJ0eVBhdGhzLmxlbmd0aCkge1xuXHRcdFx0XHRcdHByb3BlcnR5SW5mby5wcm9wZXJ0eUluZm9zID0gcmVsYXRlZFByb3BlcnR5UGF0aHM7XG5cdFx0XHRcdFx0Ly8gQ29sbGVjdCBpbmZvcm1hdGlvbiBvZiByZWxhdGVkIGNvbHVtbnMgdG8gYmUgY3JlYXRlZC5cblx0XHRcdFx0XHRyZWxhdGVkUHJvcGVydHlQYXRocy5mb3JFYWNoKChwYXRoKSA9PiB7XG5cdFx0XHRcdFx0XHRwcm9wZXJ0aWVzVG9CZUNyZWF0ZWRbcGF0aF0gPSByZWxhdGVkUHJvcGVydGllc0luZm9bcGF0aF07XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0Ly8gQWxzbyBhZGQgcHJvcGVydHkgZm9yIHRoZSBpbk91dCBQYXJhbWV0ZXJzIG9uIHRoZSBWYWx1ZUhlbHAgd2hlbiB0ZXh0QXJyYW5nZW1lbnQgaXMgc2V0IHRvICNUZXh0T25seVxuXHRcdFx0XHRcdC8vIEl0IHdpbGwgbm90IGJlIGxpbmtlZCB0byB0aGUgY29tcGxleCBQcm9wZXJ0eSAoQkNQIDIyNzAxNDExNTQpXG5cdFx0XHRcdFx0aWYgKCFyZWxhdGVkUHJvcGVydHlQYXRocy5maW5kKChwYXRoKSA9PiByZWxhdGVkUHJvcGVydGllc0luZm9bcGF0aF0gPT09IHByb3BlcnR5KSkge1xuXHRcdFx0XHRcdFx0cHJvcGVydGllc1RvQmVDcmVhdGVkW3RhcmdldFByb3BlcnR5UGF0aF0gPSBwcm9wZXJ0eTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0cHJvcGVydHlJbmZvLnBhdGggPSBjb2x1bW5EZWYucGF0aDtcblx0XHRcdFx0XHRwcm9wZXJ0eUluZm8uZGF0YVR5cGUgPSB0eXBlQ29uZmlnLmNsYXNzTmFtZTtcblx0XHRcdFx0XHRwcm9wZXJ0eUluZm8uY29uc3RyYWludHMgPSBjb2x1bW5EZWYuY29uc3RyYWludHM7XG5cdFx0XHRcdFx0cHJvcGVydHlJbmZvLmZvcm1hdE9wdGlvbnMgPSBjb2x1bW5EZWYuZm9ybWF0T3B0aW9ucztcblx0XHRcdFx0XHRwcm9wZXJ0eUluZm8uc29ydGFibGUgPSBpc1NvcnRhYmxlUHJvcGVydHkoc29ydFJlc3RyaWN0aW9uc0luZm8sIGNvbHVtbkRlZik7XG5cdFx0XHRcdFx0cHJvcGVydHlJbmZvLmZpbHRlcmFibGUgPSBpc0ZpbHRlcmFibGVQcm9wZXJ0eShmaWx0ZXJSZXN0cmljdGlvbnNJbmZvLCBjb2x1bW5EZWYpO1xuXHRcdFx0XHRcdHByb3BlcnR5SW5mby5tYXhDb25kaXRpb25zID0gZ2V0UHJvcGVydHlNYXhDb25kaXRpb25zKGZpbHRlclJlc3RyaWN0aW9uc0luZm8sIGNvbHVtbkRlZik7XG5cdFx0XHRcdFx0cHJvcGVydHlJbmZvLmNhc2VTZW5zaXRpdmUgPSBjYXNlU2Vuc2l0aXZlO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRwcm9wZXJ0eUluZm8ucGF0aCA9IGNvbHVtbkRlZi5wYXRoO1xuXHRcdFx0XHRwcm9wZXJ0eUluZm8uY2FzZVNlbnNpdGl2ZSA9IGNhc2VTZW5zaXRpdmU7XG5cdFx0XHRcdHByb3BlcnR5SW5mby5kYXRhVHlwZSA9IHR5cGVDb25maWcuY2xhc3NOYW1lO1xuXHRcdFx0fVxuXHRcdFx0cHJvcGVydGllcy5wdXNoKHByb3BlcnR5SW5mbyk7XG5cdFx0fSk7XG5cdFx0Y29uc3QgcmVsYXRlZENvbHVtbnMgPSBjcmVhdGVSZWxhdGVkUHJvcGVydGllcyhcblx0XHRcdHByb3BlcnRpZXNUb0JlQ3JlYXRlZCxcblx0XHRcdHByb3BlcnRpZXMsXG5cdFx0XHRzb3J0UmVzdHJpY3Rpb25zSW5mbyxcblx0XHRcdGZpbHRlclJlc3RyaWN0aW9uc0luZm8sXG5cdFx0XHRjYXNlU2Vuc2l0aXZlXG5cdFx0KTtcblx0XHRyZXR1cm4gcHJvcGVydGllcy5jb25jYXQocmVsYXRlZENvbHVtbnMpO1xuXHR9KTtcbn07XG5cbi8qKlxuICogVXBkYXRlcyB0aGUgYmluZGluZyBpbmZvIHdpdGggdGhlIHJlbGV2YW50IHBhdGggYW5kIG1vZGVsIGZyb20gdGhlIG1ldGFkYXRhLlxuICogQHBhcmFtIG1kY1RhYmxlIFRoZSBNRENUYWJsZSBpbnN0YW5jZVxuICogQHBhcmFtIGJpbmRpbmdJbmZvIFRoZSBiaW5kaW5nSW5mbyBvZiB0aGUgdGFibGVcbiAqL1xuT0RhdGFUYWJsZURlbGVnYXRlLnVwZGF0ZUJpbmRpbmdJbmZvID0gZnVuY3Rpb24gKG1kY1RhYmxlOiBUYWJsZSwgYmluZGluZ0luZm86IENvbGxlY3Rpb25CaW5kaW5nSW5mbyk6IHZvaWQge1xuXHRUYWJsZURlbGVnYXRlLnVwZGF0ZUJpbmRpbmdJbmZvLmFwcGx5KHRoaXMsIFttZGNUYWJsZSwgYmluZGluZ0luZm9dKTtcblxuXHRjb25zdCBtZXRhZGF0YUluZm8gPSAobWRjVGFibGUuZ2V0RGVsZWdhdGUoKSBhcyBNZGNUYWJsZURlbGVnYXRlKS5wYXlsb2FkO1xuXG5cdGlmIChtZXRhZGF0YUluZm8pIHtcblx0XHRiaW5kaW5nSW5mby5wYXRoID0gYmluZGluZ0luZm8/LnBhdGggfHwgbWV0YWRhdGFJbmZvLmNvbGxlY3Rpb25QYXRoIHx8IGAvJHttZXRhZGF0YUluZm8uY29sbGVjdGlvbk5hbWV9YDtcblx0fVxuXG5cdGJpbmRpbmdJbmZvLnBhcmFtZXRlcnMgPSBiaW5kaW5nSW5mby5wYXJhbWV0ZXJzIHx8IHt9O1xuXG5cdGNvbnN0IGZpbHRlckJhciA9IEVsZW1lbnQuZ2V0RWxlbWVudEJ5SWQobWRjVGFibGUuZ2V0RmlsdGVyKCkpIGFzIEZpbHRlckJhcixcblx0XHRpc0ZpbHRlckVuYWJsZWQgPSBtZGNUYWJsZS5pc0ZpbHRlcmluZ0VuYWJsZWQoKTtcblx0bGV0IGNvbmRpdGlvbnM6IFJlY29yZDxzdHJpbmcsIEZpbHRlckNvbmRpdGlvbnNbXT47XG5cdGxldCBpbm5lckZpbHRlckluZm8sIG91dGVyRmlsdGVySW5mbzogRmlsdGVySW5mbztcblx0Y29uc3QgZmlsdGVycyA9IFtdO1xuXHRjb25zdCB0YWJsZVByb3BlcnRpZXMgPSBNYWNyb3NEZWxlZ2F0ZVV0aWwuZ2V0Q2FjaGVkUHJvcGVydGllcyhtZGNUYWJsZSkgYXMgdW5rbm93biBhcyBQcm9wZXJ0eUluZm9bXTtcblxuXHQvL1RPRE86IGNvbnNpZGVyIGEgbWVjaGFuaXNtICgnRmlsdGVyTWVyZ2VVdGlsJyBvciBlbmhhbmNlICdGaWx0ZXJVdGlsJykgdG8gYWxsb3cgdGhlIGNvbm5lY3Rpb24gYmV0d2VlbiBkaWZmZXJlbnQgZmlsdGVycylcblx0aWYgKGlzRmlsdGVyRW5hYmxlZCkge1xuXHRcdGNvbmRpdGlvbnMgPSBtZGNUYWJsZS5nZXRDb25kaXRpb25zKCk7XG5cdFx0aW5uZXJGaWx0ZXJJbmZvID0gRmlsdGVyVXRpbC5nZXRGaWx0ZXJJbmZvKG1kY1RhYmxlLCBjb25kaXRpb25zLCB0YWJsZVByb3BlcnRpZXMhLCBbXSkgYXMgRmlsdGVySW5mbztcblx0XHRpZiAoaW5uZXJGaWx0ZXJJbmZvLmZpbHRlcnMpIHtcblx0XHRcdGZpbHRlcnMucHVzaChpbm5lckZpbHRlckluZm8uZmlsdGVycyk7XG5cdFx0fVxuXHR9XG5cdGNvbnN0IGlzVHJlZVRhYmxlID0gISFtZXRhZGF0YUluZm8/LmhpZXJhcmNoeVF1YWxpZmllcjtcblx0aWYgKGlzVHJlZVRhYmxlKSB7XG5cdFx0YmluZGluZ0luZm8ucGFyYW1ldGVycy4kJGFnZ3JlZ2F0aW9uID0ge1xuXHRcdFx0aGllcmFyY2h5UXVhbGlmaWVyOiBtZXRhZGF0YUluZm8uaGllcmFyY2h5UXVhbGlmaWVyLFxuXHRcdFx0ZXhwYW5kVG86IG1ldGFkYXRhSW5mby5pbml0aWFsRXhwYW5zaW9uTGV2ZWxcblx0XHR9O1xuXHR9XG5cdGlmIChmaWx0ZXJCYXIpIHtcblx0XHRjb25kaXRpb25zID0gZmlsdGVyQmFyLmdldENvbmRpdGlvbnMoKTtcblx0XHRpZiAoY29uZGl0aW9ucykge1xuXHRcdFx0Y29uc3QgcGFyYW1ldGVyTmFtZXMgPSBEZWxlZ2F0ZVV0aWwuZ2V0UGFyYW1ldGVyTmFtZXMoZmlsdGVyQmFyKTtcblx0XHRcdC8vIFRoZSB0YWJsZSBwcm9wZXJ0aWVzIG5lZWRzIHRvIHVwZGF0ZWQgd2l0aCB0aGUgZmlsdGVyIGZpZWxkIGlmIG5vIFNlbGVjdGlvbmZpZWxkcyBhcmUgYW5ub3RhdGVkIGFuZCBub3QgcGFydCBhcyB2YWx1ZSBoZWxwIHBhcmFtZXRlclxuXHRcdFx0T0RhdGFUYWJsZURlbGVnYXRlLl91cGRhdGVQcm9wZXJ0eUluZm8odGFibGVQcm9wZXJ0aWVzLCBtZGNUYWJsZSwgY29uZGl0aW9ucywgbWV0YWRhdGFJbmZvKTtcblx0XHRcdG91dGVyRmlsdGVySW5mbyA9IEZpbHRlclV0aWwuZ2V0RmlsdGVySW5mbyhmaWx0ZXJCYXIsIGNvbmRpdGlvbnMsIHRhYmxlUHJvcGVydGllcyEsIHBhcmFtZXRlck5hbWVzKTtcblxuXHRcdFx0aWYgKG91dGVyRmlsdGVySW5mby5maWx0ZXJzKSB7XG5cdFx0XHRcdGZpbHRlcnMucHVzaChvdXRlckZpbHRlckluZm8uZmlsdGVycyk7XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IHBhcmFtZXRlclBhdGggPSBEZWxlZ2F0ZVV0aWwuZ2V0UGFyYW1ldGVyc0luZm8oZmlsdGVyQmFyLCBjb25kaXRpb25zKTtcblx0XHRcdGlmIChwYXJhbWV0ZXJQYXRoKSB7XG5cdFx0XHRcdGJpbmRpbmdJbmZvLnBhdGggPSBwYXJhbWV0ZXJQYXRoO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRpZiAoIWlzVHJlZVRhYmxlKSB7XG5cdFx0XHQvLyBnZXQgdGhlIGJhc2ljIHNlYXJjaFxuXHRcdFx0YmluZGluZ0luZm8ucGFyYW1ldGVycy4kc2VhcmNoID0gQ29tbW9uVXRpbHMubm9ybWFsaXplU2VhcmNoVGVybShmaWx0ZXJCYXIuZ2V0U2VhcmNoKCkpIHx8IHVuZGVmaW5lZDtcblx0XHR9IGVsc2UgaWYgKGZpbHRlckJhci5nZXRTZWFyY2goKSkge1xuXHRcdFx0aWYgKCFiaW5kaW5nSW5mby5wYXJhbWV0ZXJzLiQkYWdncmVnYXRpb24pIHtcblx0XHRcdFx0YmluZGluZ0luZm8ucGFyYW1ldGVycy4kJGFnZ3JlZ2F0aW9uID0ge307XG5cdFx0XHR9XG5cdFx0XHRiaW5kaW5nSW5mby5wYXJhbWV0ZXJzLiQkYWdncmVnYXRpb24uc2VhcmNoID0gQ29tbW9uVXRpbHMubm9ybWFsaXplU2VhcmNoVGVybShmaWx0ZXJCYXIuZ2V0U2VhcmNoKCkpO1xuXHRcdFx0YmluZGluZ0luZm8ucGFyYW1ldGVycy4kJGFnZ3JlZ2F0aW9uLmV4cGFuZFRvID0gTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVI7XG5cdFx0fVxuXHR9XG5cdC8vIEJDUDogMjM3MDA3ODY2MCAtIHNoYXJlZFJlcXVlc3QgaXMgc2V0IHRvIGZhbHNlIGluIG9yZGVyIHRvIGF2b2lkIGRlYWRsb2NrIHNpdHVhdGlvbiB3aGVyZSB0aGUgdGhlIG9EYXRhXG5cdC8vIG1vZGVsIGNhY2hlIGlzIG5laXRoZXIgY2hhbmdlYWJsZSAocmVzdWx0IG9mIExpc3RCaW5kaW5nLiQkc2hhcmVkUmVxdWVzdCA9IHRydWUpIG5vciBkZWxldGFibGVcblx0Ly8gKHJlc3VsdCBvZiBDb250ZXh0LnNldFNlbGVjdGVkKHRydWUpIC0+IExpc3RCaW5kaW5nLmtlZXBBbGl2ZSlcblx0YmluZGluZ0luZm8ucGFyYW1ldGVycy4kJHNoYXJlZFJlcXVlc3QgPSBmYWxzZTtcblxuXHR0aGlzLl9hcHBseURlZmF1bHRTb3J0aW5nKGJpbmRpbmdJbmZvLCAobWRjVGFibGUuZ2V0RGVsZWdhdGUoKSBhcyBNZGNUYWJsZURlbGVnYXRlKS5wYXlsb2FkKTtcblx0Ly8gYWRkIHNlbGVjdCB0byBiaW5kaW5nSW5mbyAoQkNQIDIxNzAxNjMwMTIpXG5cdGJpbmRpbmdJbmZvLnBhcmFtZXRlcnMuJHNlbGVjdCA9IHRhYmxlUHJvcGVydGllcz8ucmVkdWNlKGZ1bmN0aW9uIChxdWVyeTogc3RyaW5nLCBwcm9wZXJ0eTogUHJvcGVydHlJbmZvKSB7XG5cdFx0Ly8gTmF2aWdhdGlvbiBwcm9wZXJ0aWVzIChyZXByZXNlbnRlZCBieSBYL1kpIHNob3VsZCBub3QgYmUgYWRkZWQgdG8gJHNlbGVjdC5cblx0XHQvLyBUb0RvIDogVGhleSBzaG91bGQgYmUgYWRkZWQgYXMgJGV4cGFuZD1YKCRzZWxlY3Q9WSkgaW5zdGVhZFxuXHRcdGlmIChwcm9wZXJ0eS5wYXRoICYmICFwcm9wZXJ0eS5wYXRoLmluY2x1ZGVzKFwiL1wiKSkge1xuXHRcdFx0cXVlcnkgPSBxdWVyeSA/IGAke3F1ZXJ5fSwke3Byb3BlcnR5LnBhdGh9YCA6IHByb3BlcnR5LnBhdGg7XG5cdFx0fVxuXHRcdHJldHVybiBxdWVyeTtcblx0fSwgXCJcIik7XG5cblx0Ly8gQWRkICRjb3VudFxuXHRiaW5kaW5nSW5mby5wYXJhbWV0ZXJzLiRjb3VudCA9IHRydWU7XG5cblx0Ly9JZiB0aGUgZW50aXR5IGlzIERyYWZ0RW5hYmxlZCBhZGQgYSBEcmFmdEZpbHRlclxuXHRpZiAoYmluZGluZ0luZm8ucGF0aCAmJiBNb2RlbEhlbHBlci5pc0RyYWZ0U3VwcG9ydGVkKG1kY1RhYmxlLmdldE1vZGVsKCk/LmdldE1ldGFNb2RlbCgpIGFzIE9EYXRhTWV0YU1vZGVsLCBiaW5kaW5nSW5mby5wYXRoKSkge1xuXHRcdGZpbHRlcnMucHVzaChuZXcgRmlsdGVyKFwiSXNBY3RpdmVFbnRpdHlcIiwgRmlsdGVyT3BlcmF0b3IuRVEsIHRydWUpKTtcblx0fVxuXHRiaW5kaW5nSW5mby5maWx0ZXJzID0gbmV3IEZpbHRlcihmaWx0ZXJzIGFzIEZpbHRlcltdLCB0cnVlKTtcbn07XG5cbk9EYXRhVGFibGVEZWxlZ2F0ZS5nZXRUeXBlTWFwID0gZnVuY3Rpb24gKCk6IG9iamVjdCB7XG5cdHJldHVybiBUeXBlTWFwO1xufTtcblxuLyoqXG4gKiBHZXQgdGFibGUgTW9kZWwuXG4gKiBAcGFyYW0gdGFibGUgSW5zdGFuY2Ugb2YgdGhlIE1EQ3RhYmxlXG4gKiBAcmV0dXJucyBNb2RlbFxuICovXG5PRGF0YVRhYmxlRGVsZWdhdGUuX2dldE1vZGVsID0gYXN5bmMgZnVuY3Rpb24gKHRhYmxlOiBUYWJsZSk6IFByb21pc2U8TW9kZWw+IHtcblx0Y29uc3QgbWV0YWRhdGFJbmZvID0gKHRhYmxlLmdldERlbGVnYXRlKCkgYXMgeyBwYXlsb2FkOiB7IG1vZGVsOiBzdHJpbmcgfSB9KS5wYXlsb2FkO1xuXHRsZXQgbW9kZWw6IE1vZGVsID0gdGFibGUuZ2V0TW9kZWwobWV0YWRhdGFJbmZvLm1vZGVsKSE7XG5cdGlmICghbW9kZWwpIHtcblx0XHRhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuXHRcdFx0dGFibGUuYXR0YWNoRXZlbnRPbmNlKFwibW9kZWxDb250ZXh0Q2hhbmdlXCIsIHJlc29sdmUpO1xuXHRcdH0pO1xuXHRcdG1vZGVsID0gdGFibGUuZ2V0TW9kZWwobWV0YWRhdGFJbmZvLm1vZGVsKSE7XG5cdH1cblx0cmV0dXJuIG1vZGVsO1xufTtcblxuLyoqXG4gKiBBcHBsaWVzIGEgZGVmYXVsdCBzb3J0IG9yZGVyIGlmIG5lZWRlZC4gVGhpcyBpcyBvbmx5IHRoZSBjYXNlIGlmIHRoZSByZXF1ZXN0IGlzIG5vdCBhICRzZWFyY2ggcmVxdWVzdFxuICogKG1lYW5zIHRoZSBwYXJhbWV0ZXIgJHNlYXJjaCBvZiB0aGUgYmluZGluZ0luZm8gaXMgdW5kZWZpbmVkKSBhbmQgaWYgYSBzb3J0IG9yZGVyIGhhcyBub3QgYmVlbiBzZXQgYWxyZWFkeSxcbiAqIGZvciBleGFtcGxlLCB1c2luZyBhIHByZXNlbnRhdGlvbiB2YXJpYW50IG9yIG1hbnVhbGx5IHNldCBieSB0aGUgdXNlci5cbiAqIEBwYXJhbSBiaW5kaW5nSW5mbyBUaGUgYmluZGluZ0luZm8gb2YgdGhlIHRhYmxlXG4gKiBAcGFyYW0gcGF5bG9hZCBUaGUgcGF5bG9hZCBvZiB0aGUgVGFibGVEZWxlZ2F0ZVxuICovXG5PRGF0YVRhYmxlRGVsZWdhdGUuX2FwcGx5RGVmYXVsdFNvcnRpbmcgPSBmdW5jdGlvbiAoYmluZGluZ0luZm86IENvbGxlY3Rpb25CaW5kaW5nSW5mbywgcGF5bG9hZDogUGF5bG9hZCk6IHZvaWQge1xuXHRpZiAoXG5cdFx0YmluZGluZ0luZm8ucGFyYW1ldGVycyAmJlxuXHRcdGJpbmRpbmdJbmZvLnBhcmFtZXRlcnMuJHNlYXJjaCA9PSB1bmRlZmluZWQgJiZcblx0XHRiaW5kaW5nSW5mby5wYXJhbWV0ZXJzLiQkYWdncmVnYXRpb24/LnNlYXJjaCA9PSB1bmRlZmluZWQgJiZcblx0XHRiaW5kaW5nSW5mby5zb3J0ZXIgJiZcblx0XHRiaW5kaW5nSW5mby5zb3J0ZXIubGVuZ3RoID09IDBcblx0KSB7XG5cdFx0Y29uc3QgZGVmYXVsdFNvcnRQcm9wZXJ0eU5hbWUgPSBwYXlsb2FkID8gcGF5bG9hZC5kZWZhdWx0U29ydFByb3BlcnR5TmFtZSA6IHVuZGVmaW5lZDtcblx0XHRpZiAoZGVmYXVsdFNvcnRQcm9wZXJ0eU5hbWUpIHtcblx0XHRcdGJpbmRpbmdJbmZvLnNvcnRlci5wdXNoKG5ldyBTb3J0ZXIoZGVmYXVsdFNvcnRQcm9wZXJ0eU5hbWUsIGZhbHNlKSk7XG5cdFx0fVxuXHR9XG59O1xuXG4vKipcbiAqIFVwZGF0ZXMgdGhlIHRhYmxlIHByb3BlcnRpZXMgd2l0aCBmaWx0ZXIgZmllbGQgaW5mb3MuXG4gKiBAcGFyYW0gYVRhYmxlUHJvcGVydGllcyBBcnJheSB3aXRoIHRhYmxlIHByb3BlcnRpZXNcbiAqIEBwYXJhbSBvTURDVGFibGUgVGhlIE1EQ1RhYmxlIGluc3RhbmNlXG4gKiBAcGFyYW0gbUNvbmRpdGlvbnMgVGhlIGNvbmRpdGlvbnMgb2YgdGhlIHRhYmxlXG4gKiBAcGFyYW0gb01ldGFkYXRhSW5mbyBUaGUgbWV0YWRhdGEgaW5mbyBvZiB0aGUgZmlsdGVyIGZpZWxkXG4gKi9cbk9EYXRhVGFibGVEZWxlZ2F0ZS5fdXBkYXRlUHJvcGVydHlJbmZvID0gZnVuY3Rpb24gKFxuXHRhVGFibGVQcm9wZXJ0aWVzOiBQcm9wZXJ0eUluZm9bXSxcblx0b01EQ1RhYmxlOiBUYWJsZSxcblx0bUNvbmRpdGlvbnM6IFJlY29yZDxzdHJpbmcsIENvbmRpdGlvbk9iamVjdFtdPixcblx0b01ldGFkYXRhSW5mbzogUGF5bG9hZFxuKTogdm9pZCB7XG5cdGNvbnN0IGFDb25kaXRpb25LZXkgPSBPYmplY3Qua2V5cyhtQ29uZGl0aW9ucyksXG5cdFx0b01ldGFNb2RlbCA9IChvTURDVGFibGUuZ2V0TW9kZWwoKSBhcyBPRGF0YU1vZGVsKS5nZXRNZXRhTW9kZWwoKSE7XG5cdGFDb25kaXRpb25LZXkuZm9yRWFjaChmdW5jdGlvbiAoY29uZGl0aW9uS2V5OiBzdHJpbmcpIHtcblx0XHQvLyBUaGUgdHlwZUNvbmZpZyBpcyBub3Qgc2V0IGluIHRoZSB0YWJsZSBwcm9wZXJ0eUluZm9zLCBidXQgd2UgbmVlZCB0byBzZXQgaXQgZm9yIHRoZSBmaWx0ZXIgZmllbGRzXG5cdFx0Y29uc3QgY29uZGl0aW9uS2V5VHlwZSA9IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KGAvJHtvTWV0YWRhdGFJbmZvLmNvbGxlY3Rpb25OYW1lfS8ke2NvbmRpdGlvbktleX1gKT8uJFR5cGUgPz8gXCJFZG0uU3RyaW5nXCI7XG5cdFx0Y29uc3QgdHlwZUNvbmZpZyA9IG9NRENUYWJsZS5nZXRUeXBlTWFwKCkuZ2V0VHlwZUNvbmZpZyhjb25kaXRpb25LZXlUeXBlKTtcblx0XHRhVGFibGVQcm9wZXJ0aWVzLmZvckVhY2goKHRhYmxlUHJvcGVydHksIGluZGV4KSA9PiB7XG5cdFx0XHRpZiAodGFibGVQcm9wZXJ0eS5wYXRoID09PSBjb25kaXRpb25LZXkpIHtcblx0XHRcdFx0KGFUYWJsZVByb3BlcnRpZXNbaW5kZXhdIGFzIFByb3BlcnR5SW5mbyAmIHsgdHlwZUNvbmZpZzogb2JqZWN0IH0pLnR5cGVDb25maWcgPSB0eXBlQ29uZmlnO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdGlmIChcblx0XHRcdGFUYWJsZVByb3BlcnRpZXMuZmluZEluZGV4KGZ1bmN0aW9uICh0YWJsZVByb3BlcnR5OiBQcm9wZXJ0eUluZm8pIHtcblx0XHRcdFx0cmV0dXJuIHRhYmxlUHJvcGVydHkucGF0aCA9PT0gY29uZGl0aW9uS2V5O1xuXHRcdFx0fSkgPT09IC0xXG5cdFx0KSB7XG5cdFx0XHRjb25zdCBvQ29sdW1uRGVmOiBQcm9wZXJ0eUluZm8gPSB7XG5cdFx0XHRcdGtleTogY29uZGl0aW9uS2V5LFxuXHRcdFx0XHRsYWJlbDogY29uZGl0aW9uS2V5LFxuXHRcdFx0XHRwYXRoOiBjb25kaXRpb25LZXksXG5cdFx0XHRcdGRhdGFUeXBlOiB0eXBlQ29uZmlnLnR5cGVJbnN0YW5jZS5iYXNlVHlwZSxcblx0XHRcdFx0Zm9ybWF0T3B0aW9uczogdHlwZUNvbmZpZy50eXBlSW5zdGFuY2U/Lm9Gb3JtYXRPcHRpb25zLFxuXHRcdFx0XHRjb25zdHJhaW50czogdHlwZUNvbmZpZy50eXBlSW5zdGFuY2U/Lm9Db25zdHJhaW50c1xuXHRcdFx0fTtcblx0XHRcdGFUYWJsZVByb3BlcnRpZXMucHVzaChvQ29sdW1uRGVmKTtcblx0XHR9XG5cdH0pO1xufTtcblxuT0RhdGFUYWJsZURlbGVnYXRlLnVwZGF0ZUJpbmRpbmcgPSBmdW5jdGlvbiAoXG5cdG9UYWJsZTogVGFibGUsXG5cdG9CaW5kaW5nSW5mbzogQmFzZUFnZ3JlZ2F0aW9uQmluZGluZ0luZm8gJiB7XG5cdFx0cGFyYW1ldGVyczoge1xuXHRcdFx0JHNlYXJjaD86IHN0cmluZztcblx0XHR9O1xuXHR9LFxuXHRvQmluZGluZzogT0RhdGFMaXN0QmluZGluZ1xuKTogdm9pZCB7XG5cdGxldCBiTmVlZE1hbnVhbFJlZnJlc2ggPSBmYWxzZTtcblx0Y29uc3Qgb0ludGVybmFsQmluZGluZ0NvbnRleHQgPSBvVGFibGUuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKTtcblx0Y29uc3Qgc01hbnVhbFVwZGF0ZVByb3BlcnR5S2V5ID0gXCJwZW5kaW5nTWFudWFsQmluZGluZ1VwZGF0ZVwiO1xuXHRjb25zdCBzTGFzdFNlYXJjaCA9IFwibGFzdFNlYXJjaFwiO1xuXHRjb25zdCBzTGFzdEZpbHRlciA9IFwibGFzdEZpbHRlclwiO1xuXHRjb25zdCBiUGVuZGluZ01hbnVhbFVwZGF0ZSA9IG9JbnRlcm5hbEJpbmRpbmdDb250ZXh0Py5nZXRQcm9wZXJ0eShzTWFudWFsVXBkYXRlUHJvcGVydHlLZXkpO1xuXHRjb25zdCBsYXN0U2VhcmNoID0gb0ludGVybmFsQmluZGluZ0NvbnRleHQ/LmdldFByb3BlcnR5KHNMYXN0U2VhcmNoKTtcblx0Y29uc3QgbGFzdEZpbHRlciA9IG9JbnRlcm5hbEJpbmRpbmdDb250ZXh0Py5nZXRQcm9wZXJ0eShzTGFzdEZpbHRlcik7XG5cdGxldCBvUm93QmluZGluZyA9IG9UYWJsZS5nZXRSb3dCaW5kaW5nKCk7XG5cblx0Ly9vQmluZGluZz1udWxsIG1lYW5zIHRoYXQgYSByZWJpbmRpbmcgbmVlZHMgdG8gYmUgZm9yY2VkIHZpYSB1cGRhdGVCaW5kaW5nIGluIG1kYyBUYWJsZURlbGVnYXRlXG5cdFRhYmxlRGVsZWdhdGUudXBkYXRlQmluZGluZy5hcHBseShPRGF0YVRhYmxlRGVsZWdhdGUsIFtvVGFibGUsIG9CaW5kaW5nSW5mbywgb0JpbmRpbmddKTtcblx0Ly9nZXQgcm93IGJpbmRpbmcgYWZ0ZXIgcmViaW5kIGZyb20gVGFibGVEZWxlZ2F0ZS51cGRhdGVCaW5kaW5nIGluIGNhc2Ugb0JpbmRpbmcgd2FzIG51bGxcblx0aWYgKCFvUm93QmluZGluZykge1xuXHRcdG9Sb3dCaW5kaW5nID0gb1RhYmxlLmdldFJvd0JpbmRpbmcoKTtcblx0fVxuXHRpZiAob1Jvd0JpbmRpbmcpIHtcblx0XHQvKipcblx0XHQgKiBNYW51YWwgcmVmcmVzaCBpZiBmaWx0ZXJzIGFyZSBub3QgY2hhbmdlZCBieSBiaW5kaW5nLnJlZnJlc2goKSBzaW5jZSB1cGRhdGluZyB0aGUgYmluZGluZ0luZm9cblx0XHQgKiBpcyBub3QgZW5vdWdoIHRvIHRyaWdnZXIgYSBiYXRjaCByZXF1ZXN0LlxuXHRcdCAqIEluIGNhc2UgdGhlcmUgaXMgbm8gaW50ZXJuYWxCaW5kaW5nQ29udGV4dCAoc2VlIEJDUCAyMjgwMTYxNTI0KSB3ZSBjYW4gbm90IGRldGVybWluZSBpZiBhIG1hbnVhbFxuXHRcdCAqIHJlZnJlc2ggaXMgbmVlZGVkIG9yIG5vdC4gVGhlcmVmb3JlLCB3ZSBhbHdheXMgcmVmcmVzaCBpbiB0aGlzIHNwZWNpYWwgY2FzZVxuXHRcdCAqL1xuXHRcdGJOZWVkTWFudWFsUmVmcmVzaCA9IG9JbnRlcm5hbEJpbmRpbmdDb250ZXh0XG5cdFx0XHQ/IGRlZXBFcXVhbChvQmluZGluZ0luZm8uZmlsdGVycywgbGFzdEZpbHRlcikgJiYgb0JpbmRpbmdJbmZvLnBhcmFtZXRlcnM/LiRzZWFyY2ggPT09IGxhc3RTZWFyY2ggJiYgIWJQZW5kaW5nTWFudWFsVXBkYXRlXG5cdFx0XHQ6IHRydWU7XG5cdH1cblx0b0ludGVybmFsQmluZGluZ0NvbnRleHQ/LnNldFByb3BlcnR5KHNMYXN0U2VhcmNoLCBvQmluZGluZ0luZm8ucGFyYW1ldGVycz8uJHNlYXJjaCk7XG5cdG9JbnRlcm5hbEJpbmRpbmdDb250ZXh0Py5zZXRQcm9wZXJ0eShzTGFzdEZpbHRlciwgb0JpbmRpbmdJbmZvLmZpbHRlcnMpO1xuXG5cdGlmIChiTmVlZE1hbnVhbFJlZnJlc2ggJiYgb1RhYmxlLmdldEZpbHRlcigpKSB7XG5cdFx0b0ludGVybmFsQmluZGluZ0NvbnRleHQ/LnNldFByb3BlcnR5KHNNYW51YWxVcGRhdGVQcm9wZXJ0eUtleSwgdHJ1ZSk7XG5cdFx0b1Jvd0JpbmRpbmdcblx0XHRcdC5yZXF1ZXN0UmVmcmVzaChvUm93QmluZGluZy5nZXRHcm91cElkKCkpXG5cdFx0XHQuZmluYWxseShmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdG9JbnRlcm5hbEJpbmRpbmdDb250ZXh0Py5zZXRQcm9wZXJ0eShzTWFudWFsVXBkYXRlUHJvcGVydHlLZXksIGZhbHNlKTtcblx0XHRcdH0pXG5cdFx0XHQuY2F0Y2goZnVuY3Rpb24gKG9FcnJvcjogdW5rbm93bikge1xuXHRcdFx0XHRMb2cuZXJyb3IoXCJFcnJvciB3aGlsZSByZWZyZXNoaW5nIGEgZmlsdGVyQmFyIFZIIHRhYmxlXCIsIG9FcnJvciBhcyBzdHJpbmcpO1xuXHRcdFx0fSk7XG5cdH1cblx0b1RhYmxlLmZpcmVFdmVudChcImJpbmRpbmdVcGRhdGVkXCIpO1xuXHQvL25vIG5lZWQgdG8gY2hlY2sgZm9yIHNlbWFudGljIHRhcmdldHMgaGVyZSBzaW5jZSB3ZSBhcmUgaW4gYSBWSCBhbmQgZG9uJ3Qgd2FudCB0byBhbGxvdyBmdXJ0aGVyIG5hdmlnYXRpb25cbn07XG5cbi8qKlxuICogQ3JlYXRlcyBhIHNpbXBsZSBwcm9wZXJ0eSBmb3IgZWFjaCBpZGVudGlmaWVkIGNvbXBsZXggcHJvcGVydHkuXG4gKiBAcGFyYW0gcHJvcGVydGllc1RvQmVDcmVhdGVkIElkZW50aWZpZWQgcHJvcGVydGllcy5cbiAqIEBwYXJhbSBleGlzdGluZ0NvbHVtbnMgVGhlIGxpc3Qgb2YgY29sdW1ucyBjcmVhdGVkIGZvciBwcm9wZXJ0aWVzIGRlZmluZWQgb24gdGhlIFZhbHVlIExpc3QuXG4gKiBAcGFyYW0gc29ydFJlc3RyaWN0aW9uc0luZm8gQW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIHNvcnQgcmVzdHJpY3Rpb24gaW5mb3JtYXRpb25cbiAqIEBwYXJhbSBmaWx0ZXJSZXN0cmljdGlvbnNJbmZvIEFuIG9iamVjdCBjb250YWluaW5nIHRoZSBmaWx0ZXIgcmVzdHJpY3Rpb24gaW5mb3JtYXRpb25cbiAqIEByZXR1cm5zIFRoZSBhcnJheSBvZiBwcm9wZXJ0aWVzIGNyZWF0ZWQuXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBjcmVhdGVSZWxhdGVkUHJvcGVydGllcyhcblx0cHJvcGVydGllc1RvQmVDcmVhdGVkOiBSZWNvcmQ8c3RyaW5nLCBQcm9wZXJ0eT4sXG5cdGV4aXN0aW5nQ29sdW1uczogUHJvcGVydHlJbmZvW10sXG5cdHNvcnRSZXN0cmljdGlvbnNJbmZvOiBTb3J0UmVzdHJpY3Rpb25zSW5mb1R5cGUsXG5cdGZpbHRlclJlc3RyaWN0aW9uc0luZm86IEZpbHRlclJlc3RyaWN0aW9uc0luZm9UeXBlLFxuXHRjYXNlU2Vuc2l0aXZlPzogYm9vbGVhblxuKTogUHJvcGVydHlJbmZvW10ge1xuXHRjb25zdCByZWxhdGVkUHJvcGVydHlOYW1lTWFwOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge30sXG5cdFx0cmVsYXRlZENvbHVtbnM6IFByb3BlcnR5SW5mb1tdID0gW107XG5cdE9iamVjdC5rZXlzKHByb3BlcnRpZXNUb0JlQ3JlYXRlZCkuZm9yRWFjaCgocGF0aCkgPT4ge1xuXHRcdGNvbnN0IHByb3BlcnR5ID0gcHJvcGVydGllc1RvQmVDcmVhdGVkW3BhdGhdLFxuXHRcdFx0cmVsYXRlZENvbHVtbiA9IGV4aXN0aW5nQ29sdW1ucy5maW5kKChjb2x1bW4pID0+IGNvbHVtbi5wYXRoID09PSBwYXRoKTsgLy8gQ29tcGxleCBwcm9wZXJ0aWVzIGRvZXNuJ3QgaGF2ZSBwYXRoIHNvIG9ubHkgc2ltcGxlIGNvbHVtbiBhcmUgZm91bmRcblx0XHRpZiAoIXJlbGF0ZWRDb2x1bW4pIHtcblx0XHRcdGNvbnN0IG5ld05hbWUgPSBgUHJvcGVydHk6OiR7cGF0aH1gO1xuXHRcdFx0cmVsYXRlZFByb3BlcnR5TmFtZU1hcFtwYXRoXSA9IG5ld05hbWU7XG5cdFx0XHRjb25zdCBwcm9wZXJ0eVR5cGVDb25maWcgPSBnZXRUeXBlQ29uZmlnKHByb3BlcnR5KTtcblx0XHRcdGNvbnN0IHZhbHVlSGVscENvbHVtblR5cGVDb25maWcgPSBUeXBlTWFwLmdldFR5cGVDb25maWcoXG5cdFx0XHRcdHByb3BlcnR5VHlwZUNvbmZpZy50eXBlID8/IFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuU3RyaW5nXCIsXG5cdFx0XHRcdHByb3BlcnR5VHlwZUNvbmZpZy5mb3JtYXRPcHRpb25zLFxuXHRcdFx0XHRwcm9wZXJ0eVR5cGVDb25maWcuY29uc3RyYWludHNcblx0XHRcdCk7XG5cdFx0XHRjb25zdCB2YWx1ZUhlbHBUYWJsZUNvbHVtbjogUHJvcGVydHlJbmZvID0ge1xuXHRcdFx0XHRrZXk6IG5ld05hbWUsXG5cdFx0XHRcdGxhYmVsOiBnZXRMYWJlbChwcm9wZXJ0eSksXG5cdFx0XHRcdHBhdGgsXG5cdFx0XHRcdHNvcnRhYmxlOiBpc1NvcnRhYmxlUHJvcGVydHkoc29ydFJlc3RyaWN0aW9uc0luZm8sIHByb3BlcnR5KSxcblx0XHRcdFx0ZmlsdGVyYWJsZTogaXNGaWx0ZXJhYmxlUHJvcGVydHkoZmlsdGVyUmVzdHJpY3Rpb25zSW5mbywgcHJvcGVydHkpLFxuXHRcdFx0XHRkYXRhVHlwZTogdmFsdWVIZWxwQ29sdW1uVHlwZUNvbmZpZy5jbGFzc05hbWUsXG5cdFx0XHRcdGZvcm1hdE9wdGlvbnM6IGlzVHlwZUZpbHRlcmFibGUocHJvcGVydHkudHlwZSBhcyBrZXlvZiB0eXBlb2YgRGVmYXVsdFR5cGVGb3JFZG1UeXBlKVxuXHRcdFx0XHRcdD8gcHJvcGVydHlUeXBlQ29uZmlnLmZvcm1hdE9wdGlvbnNcblx0XHRcdFx0XHQ6IHVuZGVmaW5lZCxcblx0XHRcdFx0Y29uc3RyYWludHM6IGlzVHlwZUZpbHRlcmFibGUocHJvcGVydHkudHlwZSBhcyBrZXlvZiB0eXBlb2YgRGVmYXVsdFR5cGVGb3JFZG1UeXBlKVxuXHRcdFx0XHRcdD8gcHJvcGVydHlUeXBlQ29uZmlnLmNvbnN0cmFpbnRzXG5cdFx0XHRcdFx0OiB1bmRlZmluZWQsXG5cdFx0XHRcdGNhc2VTZW5zaXRpdmVcblx0XHRcdH07XG5cdFx0XHR2YWx1ZUhlbHBUYWJsZUNvbHVtbi5tYXhDb25kaXRpb25zID0gZ2V0UHJvcGVydHlNYXhDb25kaXRpb25zKGZpbHRlclJlc3RyaWN0aW9uc0luZm8sIHZhbHVlSGVscFRhYmxlQ29sdW1uKTtcblx0XHRcdHJlbGF0ZWRDb2x1bW5zLnB1c2godmFsdWVIZWxwVGFibGVDb2x1bW4pO1xuXHRcdH1cblx0fSk7XG5cdC8vIFRoZSBwcm9wZXJ0eSAna2V5JyBoYXMgYmVlbiBwcmVmaXhlZCB3aXRoICdQcm9wZXJ0eTo6JyBmb3IgdW5pcXVlbmVzcy5cblx0Ly8gVXBkYXRlIHRoZSBzYW1lIGluIG90aGVyIHByb3BlcnR5SW5mb3NbXSByZWZlcmVuY2VzIHdoaWNoIHBvaW50IHRvIHRoaXMgcHJvcGVydHkuXG5cdGV4aXN0aW5nQ29sdW1ucy5mb3JFYWNoKChjb2x1bW4pID0+IHtcblx0XHRpZiAoY29sdW1uLnByb3BlcnR5SW5mb3MpIHtcblx0XHRcdGNvbHVtbi5wcm9wZXJ0eUluZm9zID0gY29sdW1uLnByb3BlcnR5SW5mb3M/Lm1hcCgoY29sdW1uTmFtZSkgPT4gcmVsYXRlZFByb3BlcnR5TmFtZU1hcFtjb2x1bW5OYW1lXSA/PyBjb2x1bW5OYW1lKTtcblx0XHR9XG5cdH0pO1xuXHRyZXR1cm4gcmVsYXRlZENvbHVtbnM7XG59XG5cbi8qKlxuICogSWRlbnRpZmllcyB0aGUgbWF4Q29uZGl0aW9ucyBmb3IgYSBnaXZlbiBwcm9wZXJ0eS5cbiAqIEBwYXJhbSBmaWx0ZXJSZXN0cmljdGlvbnNJbmZvIFRoZSBmaWx0ZXIgcmVzdHJpY3Rpb24gaW5mb3JtYXRpb24gZnJvbSB0aGUgcmVzdHJpY3Rpb24gYW5ub3RhdGlvbi5cbiAqIEBwYXJhbSBwcm9wZXJ0eSBUaGUgdGFyZ2V0IHByb3BlcnR5LlxuICogQHJldHVybnMgYC0xYCBvciBgMWAgaWYgdGhlIHByb3BlcnR5IGlzIGEgTXVsdGlWYWx1ZUZpbHRlckV4cHJlc3Npb24uXG4gKiBAcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIGdldFByb3BlcnR5TWF4Q29uZGl0aW9ucyhmaWx0ZXJSZXN0cmljdGlvbnNJbmZvOiBGaWx0ZXJSZXN0cmljdGlvbnNJbmZvVHlwZSwgcHJvcGVydHk6IFByb3BlcnR5SW5mbyB8IFByb3BlcnR5KTogbnVtYmVyIHtcblx0Y29uc3QgcHJvcGVydHlQYXRoID0gZ2V0UGF0aChwcm9wZXJ0eSk7XG5cdHJldHVybiBwcm9wZXJ0eVBhdGggJiZcblx0XHRmaWx0ZXJSZXN0cmljdGlvbnNJbmZvLnByb3BlcnR5SW5mbz8uaGFzT3duUHJvcGVydHkocHJvcGVydHlQYXRoKSAmJlxuXHRcdGlzTXVsdGlWYWx1ZUZpbHRlckV4cHJlc3Npb24oZmlsdGVyUmVzdHJpY3Rpb25zSW5mby5wcm9wZXJ0eUluZm9bcHJvcGVydHlQYXRoXSBhcyB1bmtub3duIGFzIHN0cmluZylcblx0XHQ/IC0xXG5cdFx0OiAxO1xufVxuXG4vKipcbiAqIElkZW50aWZpZXMgdGhlIGFkZGl0aW9uYWwgcHJvcGVydHkgd2hpY2ggcmVmZXJlbmNlcyB0byB0aGUgdW5pdCwgdGltZXpvbmUsIHRleHRBcnJhbmdlbWVudCBvciBjdXJyZW5jeS5cbiAqIEBwYXJhbSBkYXRhTW9kZWxQcm9wZXJ0eVBhdGggVGhlIG1vZGVsIG9iamVjdCBwYXRoIG9mIHRoZSBwcm9wZXJ0eS5cbiAqIEByZXR1cm5zIFRoZSBhZGRpdGlvbmFsIHByb3BlcnR5LlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gZ2V0QWRkaXRpb25hbFByb3BlcnR5KGRhdGFNb2RlbFByb3BlcnR5UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDxQcm9wZXJ0eT4pOiBEYXRhTW9kZWxPYmplY3RQYXRoPFByb3BlcnR5PiB8IHVuZGVmaW5lZCB7XG5cdGNvbnN0IHByb3BlcnR5ID0gZGF0YU1vZGVsUHJvcGVydHlQYXRoLnRhcmdldE9iamVjdDtcblx0Y29uc3QgYWRkaXRpb25hbFByb3BlcnR5UGF0aCA9XG5cdFx0cHJvcGVydHkgJiZcblx0XHQoZ2V0QXNzb2NpYXRlZFRleHRQcm9wZXJ0eVBhdGgocHJvcGVydHkpIHx8XG5cdFx0XHRnZXRBc3NvY2lhdGVkQ3VycmVuY3lQcm9wZXJ0eVBhdGgocHJvcGVydHkpIHx8XG5cdFx0XHRnZXRBc3NvY2lhdGVkVW5pdFByb3BlcnR5UGF0aChwcm9wZXJ0eSkgfHxcblx0XHRcdGdldEFzc29jaWF0ZWRUaW1lem9uZVByb3BlcnR5UGF0aChwcm9wZXJ0eSkpO1xuXHRpZiAoIWFkZGl0aW9uYWxQcm9wZXJ0eVBhdGgpIHtcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cdGNvbnN0IGRhdGFNb2RlbEFkZGl0aW9uYWxQcm9wZXJ0eSA9IGVuaGFuY2VEYXRhTW9kZWxQYXRoPFByb3BlcnR5PihkYXRhTW9kZWxQcm9wZXJ0eVBhdGgsIGFkZGl0aW9uYWxQcm9wZXJ0eVBhdGgpO1xuXG5cdC8vQWRkaXRpb25hbCBQcm9wZXJ0eSBjb3VsZCByZWZlciB0byBhIG5hdmlnYXRpb24gcHJvcGVydHksIGtlZXAgdGhlIGtleSBhbmQgcGF0aCBhcyBuYXZpZ2F0aW9uIHByb3BlcnR5XG5cdGNvbnN0IGFkZGl0aW9uYWxQcm9wZXJ0eSA9IGRhdGFNb2RlbEFkZGl0aW9uYWxQcm9wZXJ0eS50YXJnZXRPYmplY3Q7XG5cdGlmICghYWRkaXRpb25hbFByb3BlcnR5KSB7XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXHRyZXR1cm4gZGF0YU1vZGVsQWRkaXRpb25hbFByb3BlcnR5O1xufVxuXG5leHBvcnQgZGVmYXVsdCBPRGF0YVRhYmxlRGVsZWdhdGU7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQTBEQTtBQUNBO0FBQ0E7RUFDQSxNQUFNQSxrQkFBa0IsR0FBR0MsTUFBTSxDQUFDQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUVDLGFBQWEsQ0FBQzs7RUFFM0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNBSCxrQkFBa0IsQ0FBQ0ksZUFBZSxH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
|
|
431
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJPRGF0YVRhYmxlRGVsZWdhdGUiLCJPYmplY3QiLCJhc3NpZ24iLCJUYWJsZURlbGVnYXRlIiwiZmV0Y2hQcm9wZXJ0aWVzIiwidGFibGUiLCJtb2RlbCIsIl9nZXRNb2RlbCIsInByb3BlcnRpZXMiLCJfY3JlYXRlUHJvcGVydHlJbmZvcyIsImNyZWF0ZUludGVybmFsQmluZGluZ0NvbnRleHQiLCJNYWNyb3NEZWxlZ2F0ZVV0aWwiLCJzZXRDYWNoZWRQcm9wZXJ0aWVzIiwiZ2V0QmluZGluZ0NvbnRleHQiLCJzZXRQcm9wZXJ0eSIsImRpYWxvZyIsImlzQSIsImdldFBhcmVudCIsImludGVybmFsTW9kZWwiLCJnZXRNb2RlbCIsImludGVybmFsQmluZGluZ0NvbnRleHQiLCJuZXdJbnRlcm5hbEJpbmRpbmdDb250ZXh0UGF0aCIsImdldFBhdGgiLCJnZXRJZCIsImdldFByb3BlcnR5IiwibmV3SW50ZXJuYWxCaW5kaW5nQ29udGV4dCIsImJpbmRDb250ZXh0IiwiZ2V0Qm91bmRDb250ZXh0Iiwic2V0QmluZGluZ0NvbnRleHQiLCJjb2xsZWN0UmVsYXRlZFByb3BlcnRpZXMiLCJkYXRhTW9kZWxQcm9wZXJ0eVBhdGgiLCJkYXRhTW9kZWxBZGRpdGlvbmFsUHJvcGVydHlQYXRoIiwiZ2V0QWRkaXRpb25hbFByb3BlcnR5IiwicmVsYXRlZFByb3BlcnRpZXMiLCJ0YXJnZXRPYmplY3QiLCJhZGRpdGlvbmFsUHJvcGVydHkiLCJhZGRpdGlvbmFsUHJvcGVydHlQYXRoIiwiZ2V0VGFyZ2V0T2JqZWN0UGF0aCIsInByb3BlcnR5IiwicHJvcGVydHlQYXRoIiwidGV4dEFubm90YXRpb24iLCJhbm5vdGF0aW9ucyIsIkNvbW1vbiIsIlRleHQiLCJ0ZXh0QXJyYW5nZW1lbnQiLCJVSSIsIlRleHRBcnJhbmdlbWVudCIsInRvU3RyaW5nIiwiZGlzcGxheU1vZGUiLCJnZXREaXNwbGF5TW9kZSIsInRhcmdldEVudGl0eVR5cGUiLCJtZXRhZGF0YUluZm8iLCJnZXREZWxlZ2F0ZSIsInBheWxvYWQiLCJlbnRpdHlTZXRQYXRoIiwiY29sbGVjdGlvbk5hbWUiLCJtZXRhTW9kZWwiLCJnZXRNZXRhTW9kZWwiLCJyZXF1ZXN0T2JqZWN0IiwidGhlbiIsImVudGl0eVNldEFubm90YXRpb25zIiwic29ydFJlc3RyaWN0aW9uc0luZm8iLCJnZXRTb3J0UmVzdHJpY3Rpb25zSW5mbyIsImZpbHRlclJlc3RyaWN0aW9ucyIsImZpbHRlclJlc3RyaWN0aW9uc0luZm8iLCJnZXRGaWx0ZXJSZXN0cmljdGlvbnNJbmZvIiwiZmlsdGVyRnVuY3Rpb25zIiwiY2FzZVNlbnNpdGl2ZSIsIk1vZGVsSGVscGVyIiwiaXNGaWx0ZXJpbmdDYXNlU2Vuc2l0aXZlIiwiY3VzdG9tRGF0YUZvckNvbHVtbnMiLCJnZXRDdXN0b21EYXRhIiwicHJvcGVydGllc1RvQmVDcmVhdGVkIiwiZGF0YU1vZGVsRW50aXR5UGF0aCIsImdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyIsImdldENvbnRleHQiLCJjdXN0b21EYXRhIiwiZm9yRWFjaCIsImNvbHVtbkRlZiIsInR5cGVDb25maWciLCJpc1R5cGVGaWx0ZXJhYmxlIiwiJFR5cGUiLCJnZXRUeXBlTWFwIiwiZ2V0VHlwZUNvbmZpZyIsIlR5cGVNYXAiLCJwcm9wZXJ0eUluZm8iLCJrZXkiLCJwYXRoIiwibGFiZWwiLCJlbmhhbmNlRGF0YU1vZGVsUGF0aCIsInRhcmdldFByb3BlcnR5UGF0aCIsInR5cGUiLCJwcm9wZXJ0eVR5cGVDb25maWciLCJmb3JtYXRPcHRpb25zIiwiY29uc3RyYWludHMiLCJyZWxhdGVkUHJvcGVydGllc0luZm8iLCJyZWxhdGVkUHJvcGVydHlQYXRocyIsImtleXMiLCJsZW5ndGgiLCJwcm9wZXJ0eUluZm9zIiwiZmluZCIsImRhdGFUeXBlIiwiY2xhc3NOYW1lIiwidHlwZUluc3RhbmNlIiwib0NvbnN0cmFpbnRzIiwib0Zvcm1hdE9wdGlvbnMiLCJzb3J0YWJsZSIsImlzU29ydGFibGVQcm9wZXJ0eSIsImZpbHRlcmFibGUiLCJpc0ZpbHRlcmFibGVQcm9wZXJ0eSIsIm1heENvbmRpdGlvbnMiLCJnZXRQcm9wZXJ0eU1heENvbmRpdGlvbnMiLCJwdXNoIiwicmVsYXRlZENvbHVtbnMiLCJjcmVhdGVSZWxhdGVkUHJvcGVydGllcyIsImNvbmNhdCIsInVwZGF0ZUJpbmRpbmdJbmZvIiwibWRjVGFibGUiLCJiaW5kaW5nSW5mbyIsImFwcGx5IiwiY29sbGVjdGlvblBhdGgiLCJwYXJhbWV0ZXJzIiwiZmlsdGVyQmFyIiwiRWxlbWVudCIsImdldEVsZW1lbnRCeUlkIiwiZ2V0RmlsdGVyIiwiaXNGaWx0ZXJFbmFibGVkIiwiaXNGaWx0ZXJpbmdFbmFibGVkIiwiY29uZGl0aW9ucyIsImlubmVyRmlsdGVySW5mbyIsIm91dGVyRmlsdGVySW5mbyIsImZpbHRlcnMiLCJ0YWJsZVByb3BlcnRpZXMiLCJnZXRDYWNoZWRQcm9wZXJ0aWVzIiwiZ2V0Q29uZGl0aW9ucyIsIkZpbHRlclV0aWwiLCJnZXRGaWx0ZXJJbmZvIiwiaXNUcmVlVGFibGUiLCJoaWVyYXJjaHlRdWFsaWZpZXIiLCIkJGFnZ3JlZ2F0aW9uIiwiZXhwYW5kVG8iLCJpbml0aWFsRXhwYW5zaW9uTGV2ZWwiLCJwYXJhbWV0ZXJOYW1lcyIsIkRlbGVnYXRlVXRpbCIsImdldFBhcmFtZXRlck5hbWVzIiwiX3VwZGF0ZVByb3BlcnR5SW5mbyIsInBhcmFtZXRlclBhdGgiLCJnZXRQYXJhbWV0ZXJzSW5mbyIsIiRzZWFyY2giLCJDb21tb25VdGlscyIsIm5vcm1hbGl6ZVNlYXJjaFRlcm0iLCJnZXRTZWFyY2giLCJ1bmRlZmluZWQiLCJzZWFyY2giLCJOdW1iZXIiLCJNQVhfU0FGRV9JTlRFR0VSIiwiJCRzaGFyZWRSZXF1ZXN0IiwiX2FwcGx5RGVmYXVsdFNvcnRpbmciLCIkc2VsZWN0IiwicmVkdWNlIiwicXVlcnkiLCJpbmNsdWRlcyIsIiRjb3VudCIsImlzRHJhZnRTdXBwb3J0ZWQiLCJGaWx0ZXIiLCJGaWx0ZXJPcGVyYXRvciIsIkVRIiwiUHJvbWlzZSIsInJlc29sdmUiLCJhdHRhY2hFdmVudE9uY2UiLCJzb3J0ZXIiLCJkZWZhdWx0U29ydFByb3BlcnR5TmFtZSIsIlNvcnRlciIsImFUYWJsZVByb3BlcnRpZXMiLCJvTURDVGFibGUiLCJtQ29uZGl0aW9ucyIsIm9NZXRhZGF0YUluZm8iLCJhQ29uZGl0aW9uS2V5Iiwib01ldGFNb2RlbCIsImNvbmRpdGlvbktleSIsImNvbmRpdGlvbktleVR5cGUiLCJnZXRPYmplY3QiLCJ0YWJsZVByb3BlcnR5IiwiaW5kZXgiLCJmaW5kSW5kZXgiLCJvQ29sdW1uRGVmIiwiYmFzZVR5cGUiLCJ1cGRhdGVCaW5kaW5nIiwib1RhYmxlIiwib0JpbmRpbmdJbmZvIiwib0JpbmRpbmciLCJiTmVlZE1hbnVhbFJlZnJlc2giLCJvSW50ZXJuYWxCaW5kaW5nQ29udGV4dCIsInNNYW51YWxVcGRhdGVQcm9wZXJ0eUtleSIsInNMYXN0U2VhcmNoIiwic0xhc3RGaWx0ZXIiLCJiUGVuZGluZ01hbnVhbFVwZGF0ZSIsImxhc3RTZWFyY2giLCJsYXN0RmlsdGVyIiwib1Jvd0JpbmRpbmciLCJnZXRSb3dCaW5kaW5nIiwiZGVlcEVxdWFsIiwicmVxdWVzdFJlZnJlc2giLCJnZXRHcm91cElkIiwiZmluYWxseSIsImNhdGNoIiwib0Vycm9yIiwiTG9nIiwiZXJyb3IiLCJmaXJlRXZlbnQiLCJleGlzdGluZ0NvbHVtbnMiLCJyZWxhdGVkUHJvcGVydHlOYW1lTWFwIiwicmVsYXRlZENvbHVtbiIsImNvbHVtbiIsIm5ld05hbWUiLCJ2YWx1ZUhlbHBDb2x1bW5UeXBlQ29uZmlnIiwidmFsdWVIZWxwVGFibGVDb2x1bW4iLCJnZXRMYWJlbCIsIm1hcCIsImNvbHVtbk5hbWUiLCJoYXNPd25Qcm9wZXJ0eSIsImlzTXVsdGlWYWx1ZUZpbHRlckV4cHJlc3Npb24iLCJnZXRBc3NvY2lhdGVkVGV4dFByb3BlcnR5UGF0aCIsImdldEFzc29jaWF0ZWRDdXJyZW5jeVByb3BlcnR5UGF0aCIsImdldEFzc29jaWF0ZWRVbml0UHJvcGVydHlQYXRoIiwiZ2V0QXNzb2NpYXRlZFRpbWV6b25lUHJvcGVydHlQYXRoIiwiZGF0YU1vZGVsQWRkaXRpb25hbFByb3BlcnR5Il0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJUYWJsZURlbGVnYXRlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgUHJvcGVydHkgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IGRlZXBFcXVhbCBmcm9tIFwic2FwL2Jhc2UvdXRpbC9kZWVwRXF1YWxcIjtcbmltcG9ydCBDb21tb25VdGlscyBmcm9tIFwic2FwL2ZlL2NvcmUvQ29tbW9uVXRpbHNcIjtcbmltcG9ydCB7IGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01ldGFNb2RlbENvbnZlcnRlclwiO1xuaW1wb3J0IHsgZ2V0VHlwZUNvbmZpZyB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi90YWJsZS9Db2x1bW5zXCI7XG5pbXBvcnQgdHlwZSB7IEZpbHRlclJlc3RyaWN0aW9uc0luZm9UeXBlLCBTb3J0UmVzdHJpY3Rpb25zSW5mb1R5cGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9NZXRhTW9kZWxGdW5jdGlvblwiO1xuaW1wb3J0IHsgZ2V0RmlsdGVyUmVzdHJpY3Rpb25zSW5mbywgZ2V0U29ydFJlc3RyaWN0aW9uc0luZm8sIGlzTXVsdGlWYWx1ZUZpbHRlckV4cHJlc3Npb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9NZXRhTW9kZWxGdW5jdGlvblwiO1xuaW1wb3J0IE1vZGVsSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgdHlwZSB7IERhdGFNb2RlbE9iamVjdFBhdGggfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9EYXRhTW9kZWxQYXRoSGVscGVyXCI7XG5pbXBvcnQgeyBlbmhhbmNlRGF0YU1vZGVsUGF0aCwgZ2V0VGFyZ2V0T2JqZWN0UGF0aCB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0RhdGFNb2RlbFBhdGhIZWxwZXJcIjtcbmltcG9ydCB7IGdldERpc3BsYXlNb2RlIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRGlzcGxheU1vZGVGb3JtYXR0ZXJcIjtcbmltcG9ydCB7XG5cdGdldEFzc29jaWF0ZWRDdXJyZW5jeVByb3BlcnR5UGF0aCxcblx0Z2V0QXNzb2NpYXRlZFRleHRQcm9wZXJ0eVBhdGgsXG5cdGdldEFzc29jaWF0ZWRUaW1lem9uZVByb3BlcnR5UGF0aCxcblx0Z2V0QXNzb2NpYXRlZFVuaXRQcm9wZXJ0eVBhdGgsXG5cdGdldExhYmVsXG59IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL1Byb3BlcnR5SGVscGVyXCI7XG5pbXBvcnQgdHlwZSB7IERlZmF1bHRUeXBlRm9yRWRtVHlwZSB9IGZyb20gXCJzYXAvZmUvY29yZS90eXBlL0VETVwiO1xuaW1wb3J0IHsgaXNUeXBlRmlsdGVyYWJsZSB9IGZyb20gXCJzYXAvZmUvY29yZS90eXBlL0VETVwiO1xuaW1wb3J0IHR5cGUgeyBDb2xsZWN0aW9uQmluZGluZ0luZm8sIEZpbHRlckluZm8gfSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9Db2xsZWN0aW9uQmluZGluZ0luZm9cIjtcbmltcG9ydCBNYWNyb3NEZWxlZ2F0ZVV0aWwgZnJvbSBcInNhcC9mZS9tYWNyb3MvRGVsZWdhdGVVdGlsXCI7XG5pbXBvcnQgdHlwZSB7IEZpbHRlckNvbmRpdGlvbnMgfSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9maWx0ZXJCYXIvRmlsdGVySGVscGVyXCI7XG5pbXBvcnQgeyBnZXRQYXRoLCBpc0ZpbHRlcmFibGVQcm9wZXJ0eSwgaXNTb3J0YWJsZVByb3BlcnR5IH0gZnJvbSBcInNhcC9mZS9tYWNyb3MvaW50ZXJuYWwvdmFsdWVoZWxwL1RhYmxlRGVsZWdhdGVIZWxwZXJcIjtcbmltcG9ydCB0eXBlIE1hbmFnZWRPYmplY3QgZnJvbSBcInNhcC91aS9iYXNlL01hbmFnZWRPYmplY3RcIjtcbmltcG9ydCB0eXBlIHsgQmFzZUFnZ3JlZ2F0aW9uQmluZGluZ0luZm8gfSBmcm9tIFwic2FwL3VpL2Jhc2UvTWFuYWdlZE9iamVjdFwiO1xuaW1wb3J0IEVsZW1lbnQgZnJvbSBcInNhcC91aS9jb3JlL0VsZW1lbnRcIjtcbmltcG9ydCB0eXBlIEZpbHRlckJhciBmcm9tIFwic2FwL3VpL21kYy9GaWx0ZXJCYXJcIjtcbmltcG9ydCB0eXBlIFRhYmxlIGZyb20gXCJzYXAvdWkvbWRjL1RhYmxlXCI7XG5pbXBvcnQgdHlwZSB7IE1EQ1RhYmxlUHJvcGVydHlJbmZvIGFzIFByb3BlcnR5SW5mbyB9IGZyb20gXCJzYXAvdWkvbWRjL1RhYmxlXCI7XG5pbXBvcnQgdHlwZSB7IENvbmRpdGlvbk9iamVjdCB9IGZyb20gXCJzYXAvdWkvbWRjL2NvbmRpdGlvbi9Db25kaXRpb25cIjtcbmltcG9ydCBUYWJsZURlbGVnYXRlIGZyb20gXCJzYXAvdWkvbWRjL29kYXRhL3Y0L1RhYmxlRGVsZWdhdGVcIjtcbmltcG9ydCBUeXBlTWFwIGZyb20gXCJzYXAvdWkvbWRjL29kYXRhL3Y0L1R5cGVNYXBcIjtcbmltcG9ydCBEZWxlZ2F0ZVV0aWwgZnJvbSBcInNhcC91aS9tZGMvb2RhdGEvdjQvdXRpbC9EZWxlZ2F0ZVV0aWxcIjtcbmltcG9ydCBGaWx0ZXJVdGlsIGZyb20gXCJzYXAvdWkvbWRjL3V0aWwvRmlsdGVyVXRpbFwiO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL0NvbnRleHRcIjtcbmltcG9ydCBGaWx0ZXIgZnJvbSBcInNhcC91aS9tb2RlbC9GaWx0ZXJcIjtcbmltcG9ydCBGaWx0ZXJPcGVyYXRvciBmcm9tIFwic2FwL3VpL21vZGVsL0ZpbHRlck9wZXJhdG9yXCI7XG5pbXBvcnQgdHlwZSBNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL01vZGVsXCI7XG5pbXBvcnQgU29ydGVyIGZyb20gXCJzYXAvdWkvbW9kZWwvU29ydGVyXCI7XG5pbXBvcnQgdHlwZSBKU09OTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9qc29uL0pTT05Nb2RlbFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFMaXN0QmluZGluZyBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTGlzdEJpbmRpbmdcIjtcbmltcG9ydCB0eXBlIE9EYXRhTWV0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNZXRhTW9kZWxcIjtcbmltcG9ydCB0eXBlIE9EYXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1vZGVsXCI7XG5pbXBvcnQgdHlwZSB7IE1ldGFNb2RlbEVudGl0eVNldEFubm90YXRpb24gfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdHlwZXMvbWV0YW1vZGVsX3R5cGVzXCI7XG5cbnR5cGUgQ29tcGxleFByb3BlcnR5TWFwID0gUmVjb3JkPHN0cmluZywgUHJvcGVydHk+O1xuXG50eXBlIE1kY1RhYmxlRGVsZWdhdGUgPSB7IG5hbWU6IHN0cmluZzsgcGF5bG9hZDogUGF5bG9hZCB9O1xuXG50eXBlIFBheWxvYWQgPSB7XG5cdGNvbGxlY3Rpb25OYW1lPzogc3RyaW5nO1xuXHRjb2xsZWN0aW9uUGF0aD86IHN0cmluZztcblx0ZGVmYXVsdFNvcnRQcm9wZXJ0eU5hbWU/OiBzdHJpbmc7XG5cdGhpZXJhcmNoeVF1YWxpZmllcj86IHN0cmluZztcblx0aW5pdGlhbEV4cGFuc2lvbkxldmVsPzogbnVtYmVyO1xufTtcbi8qKlxuICogVGVzdCBkZWxlZ2F0ZSBmb3IgT0RhdGEgVjQuXG4gKi9cbmNvbnN0IE9EYXRhVGFibGVEZWxlZ2F0ZSA9IE9iamVjdC5hc3NpZ24oe30sIFRhYmxlRGVsZWdhdGUpO1xuXG4vKipcbiAqIEZldGNoZXMgdGhlIHJlbGV2YW50IG1ldGFkYXRhIGZvciB0aGUgdGFibGUgYW5kIHJldHVybnMgcHJvcGVydHkgaW5mbyBhcnJheS5cbiAqIEBwYXJhbSB0YWJsZSBJbnN0YW5jZSBvZiB0aGUgTURDdGFibGVcbiAqIEByZXR1cm5zIEFycmF5IG9mIHByb3BlcnR5IGluZm9cbiAqL1xuT0RhdGFUYWJsZURlbGVnYXRlLmZldGNoUHJvcGVydGllcyA9IGFzeW5jIGZ1bmN0aW9uICh0YWJsZTogVGFibGUpOiBQcm9taXNlPFByb3BlcnR5SW5mbz4ge1xuXHRjb25zdCBtb2RlbCA9IGF3YWl0IHRoaXMuX2dldE1vZGVsKHRhYmxlKTtcblx0Y29uc3QgcHJvcGVydGllcyA9IGF3YWl0IHRoaXMuX2NyZWF0ZVByb3BlcnR5SW5mb3ModGFibGUsIG1vZGVsKTtcblx0T0RhdGFUYWJsZURlbGVnYXRlLmNyZWF0ZUludGVybmFsQmluZGluZ0NvbnRleHQodGFibGUpO1xuXHRNYWNyb3NEZWxlZ2F0ZVV0aWwuc2V0Q2FjaGVkUHJvcGVydGllcyh0YWJsZSwgcHJvcGVydGllcyk7XG5cdCh0YWJsZS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIENvbnRleHQpLnNldFByb3BlcnR5KFwidGFibGVQcm9wZXJ0aWVzQXZhaWxhYmxlXCIsIHRydWUpO1xuXHRyZXR1cm4gcHJvcGVydGllcztcbn07XG5cbk9EYXRhVGFibGVEZWxlZ2F0ZS5jcmVhdGVJbnRlcm5hbEJpbmRpbmdDb250ZXh0ID0gZnVuY3Rpb24gKHRhYmxlOiBUYWJsZSk6IHZvaWQge1xuXHRsZXQgZGlhbG9nOiBNYW5hZ2VkT2JqZWN0IHwgbnVsbCA9IHRhYmxlO1xuXHR3aGlsZSAoZGlhbG9nICYmICFkaWFsb2cuaXNBKFwic2FwLnVpLm1kYy52YWx1ZWhlbHAuRGlhbG9nXCIpKSB7XG5cdFx0ZGlhbG9nID0gKGRpYWxvZyBhcyBNYW5hZ2VkT2JqZWN0KS5nZXRQYXJlbnQoKTtcblx0fVxuXG5cdGNvbnN0IGludGVybmFsTW9kZWwgPSB0YWJsZS5nZXRNb2RlbChcImludGVybmFsXCIpIGFzIEpTT05Nb2RlbDtcblxuXHRpZiAoZGlhbG9nICYmIGludGVybmFsTW9kZWwpIHtcblx0XHRjb25zdCBpbnRlcm5hbEJpbmRpbmdDb250ZXh0ID0gZGlhbG9nLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIik7XG5cdFx0bGV0IG5ld0ludGVybmFsQmluZGluZ0NvbnRleHRQYXRoO1xuXHRcdGlmIChpbnRlcm5hbEJpbmRpbmdDb250ZXh0KSB7XG5cdFx0XHRuZXdJbnRlcm5hbEJpbmRpbmdDb250ZXh0UGF0aCA9IGludGVybmFsQmluZGluZ0NvbnRleHQuZ2V0UGF0aCgpICsgYDo6VkhEaWFsb2c6OiR7ZGlhbG9nLmdldElkKCl9Ojp0YWJsZWA7XG5cdFx0fSBlbHNlIHtcblx0XHRcdG5ld0ludGVybmFsQmluZGluZ0NvbnRleHRQYXRoID0gYC9idWlsZGluZ2Jsb2Nrcy8ke3RhYmxlLmdldElkKCl9YDtcblx0XHRcdGludGVybmFsTW9kZWwuc2V0UHJvcGVydHkoXCIvYnVpbGRpbmdibG9ja3NcIiwgeyAuLi5pbnRlcm5hbE1vZGVsLmdldFByb3BlcnR5KFwiL2J1aWxkaW5nYmxvY2tzXCIpIH0pO1xuXHRcdH1cblx0XHRjb25zdCBuZXdJbnRlcm5hbEJpbmRpbmdDb250ZXh0ID0gaW50ZXJuYWxNb2RlbC5iaW5kQ29udGV4dChuZXdJbnRlcm5hbEJpbmRpbmdDb250ZXh0UGF0aCkuZ2V0Qm91bmRDb250ZXh0KCk7XG5cdFx0dGFibGUuc2V0QmluZGluZ0NvbnRleHQobmV3SW50ZXJuYWxCaW5kaW5nQ29udGV4dCwgXCJpbnRlcm5hbFwiKTtcblx0fVxufTtcblxuLyoqXG4gKiBDb2xsZWN0IHJlbGF0ZWQgcHJvcGVydGllcyBmcm9tIGEgcHJvcGVydHkncyBhbm5vdGF0aW9ucy5cbiAqIEBwYXJhbSBkYXRhTW9kZWxQcm9wZXJ0eVBhdGggVGhlIG1vZGVsIG9iamVjdCBwYXRoIG9mIHRoZSBwcm9wZXJ0eS5cbiAqIEByZXR1cm5zIFRoZSByZWxhdGVkIHByb3BlcnRpZXMgdGhhdCB3ZXJlIGlkZW50aWZpZWQuXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBjb2xsZWN0UmVsYXRlZFByb3BlcnRpZXMoZGF0YU1vZGVsUHJvcGVydHlQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPFByb3BlcnR5Pik6IENvbXBsZXhQcm9wZXJ0eU1hcCB7XG5cdGNvbnN0IGRhdGFNb2RlbEFkZGl0aW9uYWxQcm9wZXJ0eVBhdGggPSBnZXRBZGRpdGlvbmFsUHJvcGVydHkoZGF0YU1vZGVsUHJvcGVydHlQYXRoKTtcblx0Y29uc3QgcmVsYXRlZFByb3BlcnRpZXM6IENvbXBsZXhQcm9wZXJ0eU1hcCA9IHt9O1xuXHRpZiAoZGF0YU1vZGVsQWRkaXRpb25hbFByb3BlcnR5UGF0aD8udGFyZ2V0T2JqZWN0KSB7XG5cdFx0Y29uc3QgYWRkaXRpb25hbFByb3BlcnR5ID0gZGF0YU1vZGVsQWRkaXRpb25hbFByb3BlcnR5UGF0aC50YXJnZXRPYmplY3Q7XG5cdFx0Y29uc3QgYWRkaXRpb25hbFByb3BlcnR5UGF0aCA9IGdldFRhcmdldE9iamVjdFBhdGgoZGF0YU1vZGVsQWRkaXRpb25hbFByb3BlcnR5UGF0aCwgdHJ1ZSk7XG5cblx0XHRjb25zdCBwcm9wZXJ0eSA9IGRhdGFNb2RlbFByb3BlcnR5UGF0aC50YXJnZXRPYmplY3QgYXMgUHJvcGVydHk7XG5cdFx0Y29uc3QgcHJvcGVydHlQYXRoID0gZ2V0VGFyZ2V0T2JqZWN0UGF0aChkYXRhTW9kZWxQcm9wZXJ0eVBhdGgsIHRydWUpO1xuXG5cdFx0Y29uc3QgdGV4dEFubm90YXRpb24gPSBwcm9wZXJ0eS5hbm5vdGF0aW9ucz8uQ29tbW9uPy5UZXh0LFxuXHRcdFx0dGV4dEFycmFuZ2VtZW50ID0gdGV4dEFubm90YXRpb24/LmFubm90YXRpb25zPy5VST8uVGV4dEFycmFuZ2VtZW50Py50b1N0cmluZygpLFxuXHRcdFx0ZGlzcGxheU1vZGUgPSB0ZXh0QW5ub3RhdGlvbiAmJiB0ZXh0QXJyYW5nZW1lbnQgJiYgZ2V0RGlzcGxheU1vZGUocHJvcGVydHksIGRhdGFNb2RlbFByb3BlcnR5UGF0aC50YXJnZXRFbnRpdHlUeXBlKTtcblxuXHRcdGlmIChkaXNwbGF5TW9kZSA9PT0gXCJEZXNjcmlwdGlvblwiKSB7XG5cdFx0XHRyZWxhdGVkUHJvcGVydGllc1thZGRpdGlvbmFsUHJvcGVydHlQYXRoXSA9IGFkZGl0aW9uYWxQcm9wZXJ0eTtcblx0XHR9IGVsc2UgaWYgKChkaXNwbGF5TW9kZSAmJiBkaXNwbGF5TW9kZSAhPT0gXCJWYWx1ZVwiKSB8fCAhdGV4dEFubm90YXRpb24pIHtcblx0XHRcdHJlbGF0ZWRQcm9wZXJ0aWVzW3Byb3BlcnR5UGF0aF0gPSBwcm9wZXJ0eTtcblx0XHRcdHJlbGF0ZWRQcm9wZXJ0aWVzW2FkZGl0aW9uYWxQcm9wZXJ0eVBhdGhdID0gYWRkaXRpb25hbFByb3BlcnR5O1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gcmVsYXRlZFByb3BlcnRpZXM7XG59XG5cbk9EYXRhVGFibGVEZWxlZ2F0ZS5fY3JlYXRlUHJvcGVydHlJbmZvcyA9IGFzeW5jIGZ1bmN0aW9uICh0YWJsZTogVGFibGUsIG1vZGVsOiBPRGF0YU1vZGVsKTogUHJvbWlzZTxQcm9wZXJ0eUluZm9bXT4ge1xuXHRjb25zdCBtZXRhZGF0YUluZm8gPSAodGFibGUuZ2V0RGVsZWdhdGUoKSBhcyB7IHBheWxvYWQ6IFBheWxvYWQgfSkucGF5bG9hZDtcblx0Y29uc3QgcHJvcGVydGllczogUHJvcGVydHlJbmZvW10gPSBbXTtcblx0Y29uc3QgZW50aXR5U2V0UGF0aCA9IGAvJHttZXRhZGF0YUluZm8uY29sbGVjdGlvbk5hbWV9YDtcblx0Y29uc3QgbWV0YU1vZGVsID0gbW9kZWwuZ2V0TWV0YU1vZGVsKCk7XG5cblx0cmV0dXJuIG1ldGFNb2RlbC5yZXF1ZXN0T2JqZWN0KGAke2VudGl0eVNldFBhdGh9QGApLnRoZW4oZnVuY3Rpb24gKGVudGl0eVNldEFubm90YXRpb25zOiBNZXRhTW9kZWxFbnRpdHlTZXRBbm5vdGF0aW9uKSB7XG5cdFx0Y29uc3Qgc29ydFJlc3RyaWN0aW9uc0luZm8gPSBnZXRTb3J0UmVzdHJpY3Rpb25zSW5mbyhlbnRpdHlTZXRBbm5vdGF0aW9ucyk7XG5cdFx0Y29uc3QgZmlsdGVyUmVzdHJpY3Rpb25zID0gZW50aXR5U2V0QW5ub3RhdGlvbnNbXCJAT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5GaWx0ZXJSZXN0cmljdGlvbnNcIl07XG5cdFx0Y29uc3QgZmlsdGVyUmVzdHJpY3Rpb25zSW5mbyA9IGdldEZpbHRlclJlc3RyaWN0aW9uc0luZm8oZmlsdGVyUmVzdHJpY3Rpb25zKTtcblx0XHRjb25zdCBmaWx0ZXJGdW5jdGlvbnMgPSBlbnRpdHlTZXRBbm5vdGF0aW9uc1tcIkBPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLkZpbHRlckZ1bmN0aW9uc1wiXTtcblx0XHRjb25zdCBjYXNlU2Vuc2l0aXZlID0gTW9kZWxIZWxwZXIuaXNGaWx0ZXJpbmdDYXNlU2Vuc2l0aXZlKG1ldGFNb2RlbCwgZmlsdGVyRnVuY3Rpb25zKTtcblx0XHRjb25zdCBjdXN0b21EYXRhRm9yQ29sdW1ucyA9IE1hY3Jvc0RlbGVnYXRlVXRpbC5nZXRDdXN0b21EYXRhPHtcblx0XHRcdGN1c3RvbURhdGE6IChQcm9wZXJ0eUluZm8gJiB7ICRUeXBlOiBrZXlvZiB0eXBlb2YgRGVmYXVsdFR5cGVGb3JFZG1UeXBlIH0pW107XG5cdFx0fT4odGFibGUsIFwiY29sdW1uc1wiKSE7XG5cdFx0Y29uc3QgcHJvcGVydGllc1RvQmVDcmVhdGVkOiBSZWNvcmQ8c3RyaW5nLCBQcm9wZXJ0eT4gPSB7fTtcblx0XHRjb25zdCBkYXRhTW9kZWxFbnRpdHlQYXRoID0gZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzKCh0YWJsZS5nZXRNb2RlbCgpIGFzIE9EYXRhTW9kZWwpLmdldE1ldGFNb2RlbCgpLmdldENvbnRleHQoZW50aXR5U2V0UGF0aCkpO1xuXHRcdGN1c3RvbURhdGFGb3JDb2x1bW5zLmN1c3RvbURhdGEuZm9yRWFjaChmdW5jdGlvbiAoY29sdW1uRGVmOiBQcm9wZXJ0eUluZm8gJiB7ICRUeXBlOiBrZXlvZiB0eXBlb2YgRGVmYXVsdFR5cGVGb3JFZG1UeXBlIH0pIHtcblx0XHRcdGxldCB0eXBlQ29uZmlnID0gaXNUeXBlRmlsdGVyYWJsZShjb2x1bW5EZWYuJFR5cGUpXG5cdFx0XHRcdD8gdGFibGUuZ2V0VHlwZU1hcCgpLmdldFR5cGVDb25maWcoY29sdW1uRGVmLiRUeXBlKVxuXHRcdFx0XHQ6IFR5cGVNYXAuZ2V0VHlwZUNvbmZpZyhcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLlN0cmluZ1wiKTtcblx0XHRcdGNvbnN0IHByb3BlcnR5SW5mbzogUHJvcGVydHlJbmZvID0ge1xuXHRcdFx0XHRrZXk6IGNvbHVtbkRlZi5wYXRoISxcblx0XHRcdFx0bGFiZWw6IGNvbHVtbkRlZi5sYWJlbFxuXHRcdFx0fTtcblxuXHRcdFx0Y29uc3QgZGF0YU1vZGVsUHJvcGVydHlQYXRoID0gZW5oYW5jZURhdGFNb2RlbFBhdGg8UHJvcGVydHk+KGRhdGFNb2RlbEVudGl0eVBhdGgsIGNvbHVtbkRlZi5wYXRoKTtcblx0XHRcdGNvbnN0IHByb3BlcnR5ID0gZGF0YU1vZGVsUHJvcGVydHlQYXRoLnRhcmdldE9iamVjdCBhcyBQcm9wZXJ0eTtcblx0XHRcdGlmIChwcm9wZXJ0eSkge1xuXHRcdFx0XHRjb25zdCB0YXJnZXRQcm9wZXJ0eVBhdGggPSBnZXRUYXJnZXRPYmplY3RQYXRoKGRhdGFNb2RlbFByb3BlcnR5UGF0aCwgdHJ1ZSk7XG5cdFx0XHRcdGlmIChpc1R5cGVGaWx0ZXJhYmxlKHByb3BlcnR5LnR5cGUgYXMga2V5b2YgdHlwZW9mIERlZmF1bHRUeXBlRm9yRWRtVHlwZSkpIHtcblx0XHRcdFx0XHRjb25zdCBwcm9wZXJ0eVR5cGVDb25maWcgPSBnZXRUeXBlQ29uZmlnKHByb3BlcnR5KTtcblx0XHRcdFx0XHR0eXBlQ29uZmlnID1cblx0XHRcdFx0XHRcdFR5cGVNYXAuZ2V0VHlwZUNvbmZpZyhcblx0XHRcdFx0XHRcdFx0cHJvcGVydHlUeXBlQ29uZmlnLnR5cGUgPz8gXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5TdHJpbmdcIixcblx0XHRcdFx0XHRcdFx0cHJvcGVydHlUeXBlQ29uZmlnLmZvcm1hdE9wdGlvbnMsXG5cdFx0XHRcdFx0XHRcdHByb3BlcnR5VHlwZUNvbmZpZy5jb25zdHJhaW50c1xuXHRcdFx0XHRcdFx0KSA/PyB0eXBlQ29uZmlnO1xuXHRcdFx0XHR9XG5cdFx0XHRcdC8vQ2hlY2sgaWYgdGhlcmUgaXMgYW4gYWRkaXRpb25hbCBwcm9wZXJ0eSBsaW5rZWQgdG8gdGhlIHByb3BlcnR5IGFzIGEgVW5pdCwgQ3VycmVuY3ksIFRpbWV6b25lIG9yIHRleHRBcnJhbmdlbWVudFxuXHRcdFx0XHRjb25zdCByZWxhdGVkUHJvcGVydGllc0luZm8gPSBjb2xsZWN0UmVsYXRlZFByb3BlcnRpZXMoZGF0YU1vZGVsUHJvcGVydHlQYXRoKTtcblx0XHRcdFx0Y29uc3QgcmVsYXRlZFByb3BlcnR5UGF0aHM6IHN0cmluZ1tdID0gT2JqZWN0LmtleXMocmVsYXRlZFByb3BlcnRpZXNJbmZvKTtcblxuXHRcdFx0XHRpZiAocmVsYXRlZFByb3BlcnR5UGF0aHMubGVuZ3RoKSB7XG5cdFx0XHRcdFx0cHJvcGVydHlJbmZvLnByb3BlcnR5SW5mb3MgPSByZWxhdGVkUHJvcGVydHlQYXRocztcblx0XHRcdFx0XHQvLyBDb2xsZWN0IGluZm9ybWF0aW9uIG9mIHJlbGF0ZWQgY29sdW1ucyB0byBiZSBjcmVhdGVkLlxuXHRcdFx0XHRcdHJlbGF0ZWRQcm9wZXJ0eVBhdGhzLmZvckVhY2goKHBhdGgpID0+IHtcblx0XHRcdFx0XHRcdHByb3BlcnRpZXNUb0JlQ3JlYXRlZFtwYXRoXSA9IHJlbGF0ZWRQcm9wZXJ0aWVzSW5mb1twYXRoXTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHQvLyBBbHNvIGFkZCBwcm9wZXJ0eSBmb3IgdGhlIGluT3V0IFBhcmFtZXRlcnMgb24gdGhlIFZhbHVlSGVscCB3aGVuIHRleHRBcnJhbmdlbWVudCBpcyBzZXQgdG8gI1RleHRPbmx5XG5cdFx0XHRcdFx0Ly8gSXQgd2lsbCBub3QgYmUgbGlua2VkIHRvIHRoZSBjb21wbGV4IFByb3BlcnR5IChCQ1AgMjI3MDE0MTE1NClcblx0XHRcdFx0XHRpZiAoIXJlbGF0ZWRQcm9wZXJ0eVBhdGhzLmZpbmQoKHBhdGgpID0+IHJlbGF0ZWRQcm9wZXJ0aWVzSW5mb1twYXRoXSA9PT0gcHJvcGVydHkpKSB7XG5cdFx0XHRcdFx0XHRwcm9wZXJ0aWVzVG9CZUNyZWF0ZWRbdGFyZ2V0UHJvcGVydHlQYXRoXSA9IHByb3BlcnR5O1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRwcm9wZXJ0eUluZm8ucGF0aCA9IGNvbHVtbkRlZi5wYXRoO1xuXHRcdFx0XHRcdHByb3BlcnR5SW5mby5kYXRhVHlwZSA9IHR5cGVDb25maWcuY2xhc3NOYW1lO1xuXHRcdFx0XHRcdHByb3BlcnR5SW5mby5jb25zdHJhaW50cyA9IHR5cGVDb25maWcudHlwZUluc3RhbmNlLm9Db25zdHJhaW50cztcblx0XHRcdFx0XHRwcm9wZXJ0eUluZm8uZm9ybWF0T3B0aW9ucyA9IHR5cGVDb25maWcudHlwZUluc3RhbmNlLm9Gb3JtYXRPcHRpb25zO1xuXHRcdFx0XHRcdHByb3BlcnR5SW5mby5zb3J0YWJsZSA9IGlzU29ydGFibGVQcm9wZXJ0eShzb3J0UmVzdHJpY3Rpb25zSW5mbywgY29sdW1uRGVmKTtcblx0XHRcdFx0XHRwcm9wZXJ0eUluZm8uZmlsdGVyYWJsZSA9IGlzRmlsdGVyYWJsZVByb3BlcnR5KGZpbHRlclJlc3RyaWN0aW9uc0luZm8sIGNvbHVtbkRlZik7XG5cdFx0XHRcdFx0cHJvcGVydHlJbmZvLm1heENvbmRpdGlvbnMgPSBnZXRQcm9wZXJ0eU1heENvbmRpdGlvbnMoZmlsdGVyUmVzdHJpY3Rpb25zSW5mbywgY29sdW1uRGVmKTtcblx0XHRcdFx0XHRwcm9wZXJ0eUluZm8uY2FzZVNlbnNpdGl2ZSA9IGNhc2VTZW5zaXRpdmU7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHByb3BlcnR5SW5mby5wYXRoID0gY29sdW1uRGVmLnBhdGg7XG5cdFx0XHRcdHByb3BlcnR5SW5mby5jYXNlU2Vuc2l0aXZlID0gY2FzZVNlbnNpdGl2ZTtcblx0XHRcdFx0cHJvcGVydHlJbmZvLmRhdGFUeXBlID0gdHlwZUNvbmZpZy5jbGFzc05hbWU7XG5cdFx0XHR9XG5cdFx0XHRwcm9wZXJ0aWVzLnB1c2gocHJvcGVydHlJbmZvKTtcblx0XHR9KTtcblx0XHRjb25zdCByZWxhdGVkQ29sdW1ucyA9IGNyZWF0ZVJlbGF0ZWRQcm9wZXJ0aWVzKFxuXHRcdFx0cHJvcGVydGllc1RvQmVDcmVhdGVkLFxuXHRcdFx0cHJvcGVydGllcyxcblx0XHRcdHNvcnRSZXN0cmljdGlvbnNJbmZvLFxuXHRcdFx0ZmlsdGVyUmVzdHJpY3Rpb25zSW5mbyxcblx0XHRcdGNhc2VTZW5zaXRpdmVcblx0XHQpO1xuXHRcdHJldHVybiBwcm9wZXJ0aWVzLmNvbmNhdChyZWxhdGVkQ29sdW1ucyk7XG5cdH0pO1xufTtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSBiaW5kaW5nIGluZm8gd2l0aCB0aGUgcmVsZXZhbnQgcGF0aCBhbmQgbW9kZWwgZnJvbSB0aGUgbWV0YWRhdGEuXG4gKiBAcGFyYW0gbWRjVGFibGUgVGhlIE1EQ1RhYmxlIGluc3RhbmNlXG4gKiBAcGFyYW0gYmluZGluZ0luZm8gVGhlIGJpbmRpbmdJbmZvIG9mIHRoZSB0YWJsZVxuICovXG5PRGF0YVRhYmxlRGVsZWdhdGUudXBkYXRlQmluZGluZ0luZm8gPSBmdW5jdGlvbiAobWRjVGFibGU6IFRhYmxlLCBiaW5kaW5nSW5mbzogQ29sbGVjdGlvbkJpbmRpbmdJbmZvKTogdm9pZCB7XG5cdFRhYmxlRGVsZWdhdGUudXBkYXRlQmluZGluZ0luZm8uYXBwbHkodGhpcywgW21kY1RhYmxlLCBiaW5kaW5nSW5mb10pO1xuXG5cdGNvbnN0IG1ldGFkYXRhSW5mbyA9IChtZGNUYWJsZS5nZXREZWxlZ2F0ZSgpIGFzIE1kY1RhYmxlRGVsZWdhdGUpLnBheWxvYWQ7XG5cblx0aWYgKG1ldGFkYXRhSW5mbykge1xuXHRcdGJpbmRpbmdJbmZvLnBhdGggPSBiaW5kaW5nSW5mbz8ucGF0aCB8fCBtZXRhZGF0YUluZm8uY29sbGVjdGlvblBhdGggfHwgYC8ke21ldGFkYXRhSW5mby5jb2xsZWN0aW9uTmFtZX1gO1xuXHR9XG5cblx0YmluZGluZ0luZm8ucGFyYW1ldGVycyA9IGJpbmRpbmdJbmZvLnBhcmFtZXRlcnMgfHwge307XG5cblx0Y29uc3QgZmlsdGVyQmFyID0gRWxlbWVudC5nZXRFbGVtZW50QnlJZChtZGNUYWJsZS5nZXRGaWx0ZXIoKSkgYXMgRmlsdGVyQmFyLFxuXHRcdGlzRmlsdGVyRW5hYmxlZCA9IG1kY1RhYmxlLmlzRmlsdGVyaW5nRW5hYmxlZCgpO1xuXHRsZXQgY29uZGl0aW9uczogUmVjb3JkPHN0cmluZywgRmlsdGVyQ29uZGl0aW9uc1tdPjtcblx0bGV0IGlubmVyRmlsdGVySW5mbywgb3V0ZXJGaWx0ZXJJbmZvOiBGaWx0ZXJJbmZvO1xuXHRjb25zdCBmaWx0ZXJzID0gW107XG5cdGNvbnN0IHRhYmxlUHJvcGVydGllcyA9IE1hY3Jvc0RlbGVnYXRlVXRpbC5nZXRDYWNoZWRQcm9wZXJ0aWVzKG1kY1RhYmxlKSBhcyB1bmtub3duIGFzIFByb3BlcnR5SW5mb1tdO1xuXG5cdC8vVE9ETzogY29uc2lkZXIgYSBtZWNoYW5pc20gKCdGaWx0ZXJNZXJnZVV0aWwnIG9yIGVuaGFuY2UgJ0ZpbHRlclV0aWwnKSB0byBhbGxvdyB0aGUgY29ubmVjdGlvbiBiZXR3ZWVuIGRpZmZlcmVudCBmaWx0ZXJzKVxuXHRpZiAoaXNGaWx0ZXJFbmFibGVkKSB7XG5cdFx0Y29uZGl0aW9ucyA9IG1kY1RhYmxlLmdldENvbmRpdGlvbnMoKTtcblx0XHRpbm5lckZpbHRlckluZm8gPSBGaWx0ZXJVdGlsLmdldEZpbHRlckluZm8obWRjVGFibGUsIGNvbmRpdGlvbnMsIHRhYmxlUHJvcGVydGllcyEsIFtdKSBhcyBGaWx0ZXJJbmZvO1xuXHRcdGlmIChpbm5lckZpbHRlckluZm8uZmlsdGVycykge1xuXHRcdFx0ZmlsdGVycy5wdXNoKGlubmVyRmlsdGVySW5mby5maWx0ZXJzKTtcblx0XHR9XG5cdH1cblx0Y29uc3QgaXNUcmVlVGFibGUgPSAhIW1ldGFkYXRhSW5mbz8uaGllcmFyY2h5UXVhbGlmaWVyO1xuXHRpZiAoaXNUcmVlVGFibGUpIHtcblx0XHRiaW5kaW5nSW5mby5wYXJhbWV0ZXJzLiQkYWdncmVnYXRpb24gPSB7XG5cdFx0XHRoaWVyYXJjaHlRdWFsaWZpZXI6IG1ldGFkYXRhSW5mby5oaWVyYXJjaHlRdWFsaWZpZXIsXG5cdFx0XHRleHBhbmRUbzogbWV0YWRhdGFJbmZvLmluaXRpYWxFeHBhbnNpb25MZXZlbFxuXHRcdH07XG5cdH1cblx0aWYgKGZpbHRlckJhcikge1xuXHRcdGNvbmRpdGlvbnMgPSBmaWx0ZXJCYXIuZ2V0Q29uZGl0aW9ucygpO1xuXHRcdGlmIChjb25kaXRpb25zKSB7XG5cdFx0XHRjb25zdCBwYXJhbWV0ZXJOYW1lcyA9IERlbGVnYXRlVXRpbC5nZXRQYXJhbWV0ZXJOYW1lcyhmaWx0ZXJCYXIpO1xuXHRcdFx0Ly8gVGhlIHRhYmxlIHByb3BlcnRpZXMgbmVlZHMgdG8gdXBkYXRlZCB3aXRoIHRoZSBmaWx0ZXIgZmllbGQgaWYgbm8gU2VsZWN0aW9uZmllbGRzIGFyZSBhbm5vdGF0ZWQgYW5kIG5vdCBwYXJ0IGFzIHZhbHVlIGhlbHAgcGFyYW1ldGVyXG5cdFx0XHRPRGF0YVRhYmxlRGVsZWdhdGUuX3VwZGF0ZVByb3BlcnR5SW5mbyh0YWJsZVByb3BlcnRpZXMsIG1kY1RhYmxlLCBjb25kaXRpb25zLCBtZXRhZGF0YUluZm8pO1xuXHRcdFx0b3V0ZXJGaWx0ZXJJbmZvID0gRmlsdGVyVXRpbC5nZXRGaWx0ZXJJbmZvKGZpbHRlckJhciwgY29uZGl0aW9ucywgdGFibGVQcm9wZXJ0aWVzISwgcGFyYW1ldGVyTmFtZXMpO1xuXG5cdFx0XHRpZiAob3V0ZXJGaWx0ZXJJbmZvLmZpbHRlcnMpIHtcblx0XHRcdFx0ZmlsdGVycy5wdXNoKG91dGVyRmlsdGVySW5mby5maWx0ZXJzKTtcblx0XHRcdH1cblxuXHRcdFx0Y29uc3QgcGFyYW1ldGVyUGF0aCA9IERlbGVnYXRlVXRpbC5nZXRQYXJhbWV0ZXJzSW5mbyhmaWx0ZXJCYXIsIGNvbmRpdGlvbnMpO1xuXHRcdFx0aWYgKHBhcmFtZXRlclBhdGgpIHtcblx0XHRcdFx0YmluZGluZ0luZm8ucGF0aCA9IHBhcmFtZXRlclBhdGg7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGlmICghaXNUcmVlVGFibGUpIHtcblx0XHRcdC8vIGdldCB0aGUgYmFzaWMgc2VhcmNoXG5cdFx0XHRiaW5kaW5nSW5mby5wYXJhbWV0ZXJzLiRzZWFyY2ggPSBDb21tb25VdGlscy5ub3JtYWxpemVTZWFyY2hUZXJtKGZpbHRlckJhci5nZXRTZWFyY2goKSkgfHwgdW5kZWZpbmVkO1xuXHRcdH0gZWxzZSBpZiAoZmlsdGVyQmFyLmdldFNlYXJjaCgpKSB7XG5cdFx0XHRpZiAoIWJpbmRpbmdJbmZvLnBhcmFtZXRlcnMuJCRhZ2dyZWdhdGlvbikge1xuXHRcdFx0XHRiaW5kaW5nSW5mby5wYXJhbWV0ZXJzLiQkYWdncmVnYXRpb24gPSB7fTtcblx0XHRcdH1cblx0XHRcdGJpbmRpbmdJbmZvLnBhcmFtZXRlcnMuJCRhZ2dyZWdhdGlvbi5zZWFyY2ggPSBDb21tb25VdGlscy5ub3JtYWxpemVTZWFyY2hUZXJtKGZpbHRlckJhci5nZXRTZWFyY2goKSk7XG5cdFx0XHRiaW5kaW5nSW5mby5wYXJhbWV0ZXJzLiQkYWdncmVnYXRpb24uZXhwYW5kVG8gPSBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUjtcblx0XHR9XG5cdH1cblx0Ly8gQkNQOiAyMzcwMDc4NjYwIC0gc2hhcmVkUmVxdWVzdCBpcyBzZXQgdG8gZmFsc2UgaW4gb3JkZXIgdG8gYXZvaWQgZGVhZGxvY2sgc2l0dWF0aW9uIHdoZXJlIHRoZSB0aGUgb0RhdGFcblx0Ly8gbW9kZWwgY2FjaGUgaXMgbmVpdGhlciBjaGFuZ2VhYmxlIChyZXN1bHQgb2YgTGlzdEJpbmRpbmcuJCRzaGFyZWRSZXF1ZXN0ID0gdHJ1ZSkgbm9yIGRlbGV0YWJsZVxuXHQvLyAocmVzdWx0IG9mIENvbnRleHQuc2V0U2VsZWN0ZWQodHJ1ZSkgLT4gTGlzdEJpbmRpbmcua2VlcEFsaXZlKVxuXHRiaW5kaW5nSW5mby5wYXJhbWV0ZXJzLiQkc2hhcmVkUmVxdWVzdCA9IGZhbHNlO1xuXG5cdHRoaXMuX2FwcGx5RGVmYXVsdFNvcnRpbmcoYmluZGluZ0luZm8sIChtZGNUYWJsZS5nZXREZWxlZ2F0ZSgpIGFzIE1kY1RhYmxlRGVsZWdhdGUpLnBheWxvYWQpO1xuXHQvLyBhZGQgc2VsZWN0IHRvIGJpbmRpbmdJbmZvIChCQ1AgMjE3MDE2MzAxMilcblx0YmluZGluZ0luZm8ucGFyYW1ldGVycy4kc2VsZWN0ID0gdGFibGVQcm9wZXJ0aWVzPy5yZWR1Y2UoZnVuY3Rpb24gKHF1ZXJ5OiBzdHJpbmcsIHByb3BlcnR5OiBQcm9wZXJ0eUluZm8pIHtcblx0XHQvLyBOYXZpZ2F0aW9uIHByb3BlcnRpZXMgKHJlcHJlc2VudGVkIGJ5IFgvWSkgc2hvdWxkIG5vdCBiZSBhZGRlZCB0byAkc2VsZWN0LlxuXHRcdC8vIFRvRG8gOiBUaGV5IHNob3VsZCBiZSBhZGRlZCBhcyAkZXhwYW5kPVgoJHNlbGVjdD1ZKSBpbnN0ZWFkXG5cdFx0aWYgKHByb3BlcnR5LnBhdGggJiYgIXByb3BlcnR5LnBhdGguaW5jbHVkZXMoXCIvXCIpKSB7XG5cdFx0XHRxdWVyeSA9IHF1ZXJ5ID8gYCR7cXVlcnl9LCR7cHJvcGVydHkucGF0aH1gIDogcHJvcGVydHkucGF0aDtcblx0XHR9XG5cdFx0cmV0dXJuIHF1ZXJ5O1xuXHR9LCBcIlwiKTtcblxuXHQvLyBBZGQgJGNvdW50XG5cdGJpbmRpbmdJbmZvLnBhcmFtZXRlcnMuJGNvdW50ID0gdHJ1ZTtcblxuXHQvL0lmIHRoZSBlbnRpdHkgaXMgRHJhZnRFbmFibGVkIGFkZCBhIERyYWZ0RmlsdGVyXG5cdGlmIChiaW5kaW5nSW5mby5wYXRoICYmIE1vZGVsSGVscGVyLmlzRHJhZnRTdXBwb3J0ZWQobWRjVGFibGUuZ2V0TW9kZWwoKT8uZ2V0TWV0YU1vZGVsKCkgYXMgT0RhdGFNZXRhTW9kZWwsIGJpbmRpbmdJbmZvLnBhdGgpKSB7XG5cdFx0ZmlsdGVycy5wdXNoKG5ldyBGaWx0ZXIoXCJJc0FjdGl2ZUVudGl0eVwiLCBGaWx0ZXJPcGVyYXRvci5FUSwgdHJ1ZSkpO1xuXHR9XG5cdGJpbmRpbmdJbmZvLmZpbHRlcnMgPSBuZXcgRmlsdGVyKGZpbHRlcnMgYXMgRmlsdGVyW10sIHRydWUpO1xufTtcblxuT0RhdGFUYWJsZURlbGVnYXRlLmdldFR5cGVNYXAgPSBmdW5jdGlvbiAoKTogb2JqZWN0IHtcblx0cmV0dXJuIFR5cGVNYXA7XG59O1xuXG4vKipcbiAqIEdldCB0YWJsZSBNb2RlbC5cbiAqIEBwYXJhbSB0YWJsZSBJbnN0YW5jZSBvZiB0aGUgTURDdGFibGVcbiAqIEByZXR1cm5zIE1vZGVsXG4gKi9cbk9EYXRhVGFibGVEZWxlZ2F0ZS5fZ2V0TW9kZWwgPSBhc3luYyBmdW5jdGlvbiAodGFibGU6IFRhYmxlKTogUHJvbWlzZTxNb2RlbD4ge1xuXHRjb25zdCBtZXRhZGF0YUluZm8gPSAodGFibGUuZ2V0RGVsZWdhdGUoKSBhcyB7IHBheWxvYWQ6IHsgbW9kZWw6IHN0cmluZyB9IH0pLnBheWxvYWQ7XG5cdGxldCBtb2RlbDogTW9kZWwgPSB0YWJsZS5nZXRNb2RlbChtZXRhZGF0YUluZm8ubW9kZWwpITtcblx0aWYgKCFtb2RlbCkge1xuXHRcdGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG5cdFx0XHR0YWJsZS5hdHRhY2hFdmVudE9uY2UoXCJtb2RlbENvbnRleHRDaGFuZ2VcIiwgcmVzb2x2ZSk7XG5cdFx0fSk7XG5cdFx0bW9kZWwgPSB0YWJsZS5nZXRNb2RlbChtZXRhZGF0YUluZm8ubW9kZWwpITtcblx0fVxuXHRyZXR1cm4gbW9kZWw7XG59O1xuXG4vKipcbiAqIEFwcGxpZXMgYSBkZWZhdWx0IHNvcnQgb3JkZXIgaWYgbmVlZGVkLiBUaGlzIGlzIG9ubHkgdGhlIGNhc2UgaWYgdGhlIHJlcXVlc3QgaXMgbm90IGEgJHNlYXJjaCByZXF1ZXN0XG4gKiAobWVhbnMgdGhlIHBhcmFtZXRlciAkc2VhcmNoIG9mIHRoZSBiaW5kaW5nSW5mbyBpcyB1bmRlZmluZWQpIGFuZCBpZiBhIHNvcnQgb3JkZXIgaGFzIG5vdCBiZWVuIHNldCBhbHJlYWR5LFxuICogZm9yIGV4YW1wbGUsIHVzaW5nIGEgcHJlc2VudGF0aW9uIHZhcmlhbnQgb3IgbWFudWFsbHkgc2V0IGJ5IHRoZSB1c2VyLlxuICogQHBhcmFtIGJpbmRpbmdJbmZvIFRoZSBiaW5kaW5nSW5mbyBvZiB0aGUgdGFibGVcbiAqIEBwYXJhbSBwYXlsb2FkIFRoZSBwYXlsb2FkIG9mIHRoZSBUYWJsZURlbGVnYXRlXG4gKi9cbk9EYXRhVGFibGVEZWxlZ2F0ZS5fYXBwbHlEZWZhdWx0U29ydGluZyA9IGZ1bmN0aW9uIChiaW5kaW5nSW5mbzogQ29sbGVjdGlvbkJpbmRpbmdJbmZvLCBwYXlsb2FkOiBQYXlsb2FkKTogdm9pZCB7XG5cdGlmIChcblx0XHRiaW5kaW5nSW5mby5wYXJhbWV0ZXJzICYmXG5cdFx0YmluZGluZ0luZm8ucGFyYW1ldGVycy4kc2VhcmNoID09IHVuZGVmaW5lZCAmJlxuXHRcdGJpbmRpbmdJbmZvLnBhcmFtZXRlcnMuJCRhZ2dyZWdhdGlvbj8uc2VhcmNoID09IHVuZGVmaW5lZCAmJlxuXHRcdGJpbmRpbmdJbmZvLnNvcnRlciAmJlxuXHRcdGJpbmRpbmdJbmZvLnNvcnRlci5sZW5ndGggPT0gMFxuXHQpIHtcblx0XHRjb25zdCBkZWZhdWx0U29ydFByb3BlcnR5TmFtZSA9IHBheWxvYWQgPyBwYXlsb2FkLmRlZmF1bHRTb3J0UHJvcGVydHlOYW1lIDogdW5kZWZpbmVkO1xuXHRcdGlmIChkZWZhdWx0U29ydFByb3BlcnR5TmFtZSkge1xuXHRcdFx0YmluZGluZ0luZm8uc29ydGVyLnB1c2gobmV3IFNvcnRlcihkZWZhdWx0U29ydFByb3BlcnR5TmFtZSwgZmFsc2UpKTtcblx0XHR9XG5cdH1cbn07XG5cbi8qKlxuICogVXBkYXRlcyB0aGUgdGFibGUgcHJvcGVydGllcyB3aXRoIGZpbHRlciBmaWVsZCBpbmZvcy5cbiAqIEBwYXJhbSBhVGFibGVQcm9wZXJ0aWVzIEFycmF5IHdpdGggdGFibGUgcHJvcGVydGllc1xuICogQHBhcmFtIG9NRENUYWJsZSBUaGUgTURDVGFibGUgaW5zdGFuY2VcbiAqIEBwYXJhbSBtQ29uZGl0aW9ucyBUaGUgY29uZGl0aW9ucyBvZiB0aGUgdGFibGVcbiAqIEBwYXJhbSBvTWV0YWRhdGFJbmZvIFRoZSBtZXRhZGF0YSBpbmZvIG9mIHRoZSBmaWx0ZXIgZmllbGRcbiAqL1xuT0RhdGFUYWJsZURlbGVnYXRlLl91cGRhdGVQcm9wZXJ0eUluZm8gPSBmdW5jdGlvbiAoXG5cdGFUYWJsZVByb3BlcnRpZXM6IFByb3BlcnR5SW5mb1tdLFxuXHRvTURDVGFibGU6IFRhYmxlLFxuXHRtQ29uZGl0aW9uczogUmVjb3JkPHN0cmluZywgQ29uZGl0aW9uT2JqZWN0W10+LFxuXHRvTWV0YWRhdGFJbmZvOiBQYXlsb2FkXG4pOiB2b2lkIHtcblx0Y29uc3QgYUNvbmRpdGlvbktleSA9IE9iamVjdC5rZXlzKG1Db25kaXRpb25zKSxcblx0XHRvTWV0YU1vZGVsID0gKG9NRENUYWJsZS5nZXRNb2RlbCgpIGFzIE9EYXRhTW9kZWwpLmdldE1ldGFNb2RlbCgpITtcblx0YUNvbmRpdGlvbktleS5mb3JFYWNoKGZ1bmN0aW9uIChjb25kaXRpb25LZXk6IHN0cmluZykge1xuXHRcdC8vIFRoZSB0eXBlQ29uZmlnIGlzIG5vdCBzZXQgaW4gdGhlIHRhYmxlIHByb3BlcnR5SW5mb3MsIGJ1dCB3ZSBuZWVkIHRvIHNldCBpdCBmb3IgdGhlIGZpbHRlciBmaWVsZHNcblx0XHRjb25zdCBjb25kaXRpb25LZXlUeXBlID0gb01ldGFNb2RlbC5nZXRPYmplY3QoYC8ke29NZXRhZGF0YUluZm8uY29sbGVjdGlvbk5hbWV9LyR7Y29uZGl0aW9uS2V5fWApPy4kVHlwZSA/PyBcIkVkbS5TdHJpbmdcIjtcblx0XHRjb25zdCB0eXBlQ29uZmlnID0gb01EQ1RhYmxlLmdldFR5cGVNYXAoKS5nZXRUeXBlQ29uZmlnKGNvbmRpdGlvbktleVR5cGUpO1xuXHRcdGFUYWJsZVByb3BlcnRpZXMuZm9yRWFjaCgodGFibGVQcm9wZXJ0eSwgaW5kZXgpID0+IHtcblx0XHRcdGlmICh0YWJsZVByb3BlcnR5LnBhdGggPT09IGNvbmRpdGlvbktleSkge1xuXHRcdFx0XHQoYVRhYmxlUHJvcGVydGllc1tpbmRleF0gYXMgUHJvcGVydHlJbmZvICYgeyB0eXBlQ29uZmlnOiBvYmplY3QgfSkudHlwZUNvbmZpZyA9IHR5cGVDb25maWc7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0aWYgKFxuXHRcdFx0YVRhYmxlUHJvcGVydGllcy5maW5kSW5kZXgoZnVuY3Rpb24gKHRhYmxlUHJvcGVydHk6IFByb3BlcnR5SW5mbykge1xuXHRcdFx0XHRyZXR1cm4gdGFibGVQcm9wZXJ0eS5wYXRoID09PSBjb25kaXRpb25LZXk7XG5cdFx0XHR9KSA9PT0gLTFcblx0XHQpIHtcblx0XHRcdGNvbnN0IG9Db2x1bW5EZWY6IFByb3BlcnR5SW5mbyA9IHtcblx0XHRcdFx0a2V5OiBjb25kaXRpb25LZXksXG5cdFx0XHRcdGxhYmVsOiBjb25kaXRpb25LZXksXG5cdFx0XHRcdHBhdGg6IGNvbmRpdGlvbktleSxcblx0XHRcdFx0ZGF0YVR5cGU6IHR5cGVDb25maWcudHlwZUluc3RhbmNlLmJhc2VUeXBlLFxuXHRcdFx0XHRmb3JtYXRPcHRpb25zOiB0eXBlQ29uZmlnLnR5cGVJbnN0YW5jZT8ub0Zvcm1hdE9wdGlvbnMsXG5cdFx0XHRcdGNvbnN0cmFpbnRzOiB0eXBlQ29uZmlnLnR5cGVJbnN0YW5jZT8ub0NvbnN0cmFpbnRzXG5cdFx0XHR9O1xuXHRcdFx0YVRhYmxlUHJvcGVydGllcy5wdXNoKG9Db2x1bW5EZWYpO1xuXHRcdH1cblx0fSk7XG59O1xuXG5PRGF0YVRhYmxlRGVsZWdhdGUudXBkYXRlQmluZGluZyA9IGZ1bmN0aW9uIChcblx0b1RhYmxlOiBUYWJsZSxcblx0b0JpbmRpbmdJbmZvOiBCYXNlQWdncmVnYXRpb25CaW5kaW5nSW5mbyAmIHtcblx0XHRwYXJhbWV0ZXJzOiB7XG5cdFx0XHQkc2VhcmNoPzogc3RyaW5nO1xuXHRcdH07XG5cdH0sXG5cdG9CaW5kaW5nOiBPRGF0YUxpc3RCaW5kaW5nXG4pOiB2b2lkIHtcblx0bGV0IGJOZWVkTWFudWFsUmVmcmVzaCA9IGZhbHNlO1xuXHRjb25zdCBvSW50ZXJuYWxCaW5kaW5nQ29udGV4dCA9IG9UYWJsZS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpO1xuXHRjb25zdCBzTWFudWFsVXBkYXRlUHJvcGVydHlLZXkgPSBcInBlbmRpbmdNYW51YWxCaW5kaW5nVXBkYXRlXCI7XG5cdGNvbnN0IHNMYXN0U2VhcmNoID0gXCJsYXN0U2VhcmNoXCI7XG5cdGNvbnN0IHNMYXN0RmlsdGVyID0gXCJsYXN0RmlsdGVyXCI7XG5cdGNvbnN0IGJQZW5kaW5nTWFudWFsVXBkYXRlID0gb0ludGVybmFsQmluZGluZ0NvbnRleHQ/LmdldFByb3BlcnR5KHNNYW51YWxVcGRhdGVQcm9wZXJ0eUtleSk7XG5cdGNvbnN0IGxhc3RTZWFyY2ggPSBvSW50ZXJuYWxCaW5kaW5nQ29udGV4dD8uZ2V0UHJvcGVydHkoc0xhc3RTZWFyY2gpO1xuXHRjb25zdCBsYXN0RmlsdGVyID0gb0ludGVybmFsQmluZGluZ0NvbnRleHQ/LmdldFByb3BlcnR5KHNMYXN0RmlsdGVyKTtcblx0bGV0IG9Sb3dCaW5kaW5nID0gb1RhYmxlLmdldFJvd0JpbmRpbmcoKTtcblxuXHQvL29CaW5kaW5nPW51bGwgbWVhbnMgdGhhdCBhIHJlYmluZGluZyBuZWVkcyB0byBiZSBmb3JjZWQgdmlhIHVwZGF0ZUJpbmRpbmcgaW4gbWRjIFRhYmxlRGVsZWdhdGVcblx0VGFibGVEZWxlZ2F0ZS51cGRhdGVCaW5kaW5nLmFwcGx5KE9EYXRhVGFibGVEZWxlZ2F0ZSwgW29UYWJsZSwgb0JpbmRpbmdJbmZvLCBvQmluZGluZ10pO1xuXHQvL2dldCByb3cgYmluZGluZyBhZnRlciByZWJpbmQgZnJvbSBUYWJsZURlbGVnYXRlLnVwZGF0ZUJpbmRpbmcgaW4gY2FzZSBvQmluZGluZyB3YXMgbnVsbFxuXHRpZiAoIW9Sb3dCaW5kaW5nKSB7XG5cdFx0b1Jvd0JpbmRpbmcgPSBvVGFibGUuZ2V0Um93QmluZGluZygpO1xuXHR9XG5cdGlmIChvUm93QmluZGluZykge1xuXHRcdC8qKlxuXHRcdCAqIE1hbnVhbCByZWZyZXNoIGlmIGZpbHRlcnMgYXJlIG5vdCBjaGFuZ2VkIGJ5IGJpbmRpbmcucmVmcmVzaCgpIHNpbmNlIHVwZGF0aW5nIHRoZSBiaW5kaW5nSW5mb1xuXHRcdCAqIGlzIG5vdCBlbm91Z2ggdG8gdHJpZ2dlciBhIGJhdGNoIHJlcXVlc3QuXG5cdFx0ICogSW4gY2FzZSB0aGVyZSBpcyBubyBpbnRlcm5hbEJpbmRpbmdDb250ZXh0IChzZWUgQkNQIDIyODAxNjE1MjQpIHdlIGNhbiBub3QgZGV0ZXJtaW5lIGlmIGEgbWFudWFsXG5cdFx0ICogcmVmcmVzaCBpcyBuZWVkZWQgb3Igbm90LiBUaGVyZWZvcmUsIHdlIGFsd2F5cyByZWZyZXNoIGluIHRoaXMgc3BlY2lhbCBjYXNlXG5cdFx0ICovXG5cdFx0Yk5lZWRNYW51YWxSZWZyZXNoID0gb0ludGVybmFsQmluZGluZ0NvbnRleHRcblx0XHRcdD8gZGVlcEVxdWFsKG9CaW5kaW5nSW5mby5maWx0ZXJzLCBsYXN0RmlsdGVyKSAmJiBvQmluZGluZ0luZm8ucGFyYW1ldGVycz8uJHNlYXJjaCA9PT0gbGFzdFNlYXJjaCAmJiAhYlBlbmRpbmdNYW51YWxVcGRhdGVcblx0XHRcdDogdHJ1ZTtcblx0fVxuXHRvSW50ZXJuYWxCaW5kaW5nQ29udGV4dD8uc2V0UHJvcGVydHkoc0xhc3RTZWFyY2gsIG9CaW5kaW5nSW5mby5wYXJhbWV0ZXJzPy4kc2VhcmNoKTtcblx0b0ludGVybmFsQmluZGluZ0NvbnRleHQ/LnNldFByb3BlcnR5KHNMYXN0RmlsdGVyLCBvQmluZGluZ0luZm8uZmlsdGVycyk7XG5cblx0aWYgKGJOZWVkTWFudWFsUmVmcmVzaCAmJiBvVGFibGUuZ2V0RmlsdGVyKCkpIHtcblx0XHRvSW50ZXJuYWxCaW5kaW5nQ29udGV4dD8uc2V0UHJvcGVydHkoc01hbnVhbFVwZGF0ZVByb3BlcnR5S2V5LCB0cnVlKTtcblx0XHRvUm93QmluZGluZ1xuXHRcdFx0LnJlcXVlc3RSZWZyZXNoKG9Sb3dCaW5kaW5nLmdldEdyb3VwSWQoKSlcblx0XHRcdC5maW5hbGx5KGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0b0ludGVybmFsQmluZGluZ0NvbnRleHQ/LnNldFByb3BlcnR5KHNNYW51YWxVcGRhdGVQcm9wZXJ0eUtleSwgZmFsc2UpO1xuXHRcdFx0fSlcblx0XHRcdC5jYXRjaChmdW5jdGlvbiAob0Vycm9yOiB1bmtub3duKSB7XG5cdFx0XHRcdExvZy5lcnJvcihcIkVycm9yIHdoaWxlIHJlZnJlc2hpbmcgYSBmaWx0ZXJCYXIgVkggdGFibGVcIiwgb0Vycm9yIGFzIHN0cmluZyk7XG5cdFx0XHR9KTtcblx0fVxuXHRvVGFibGUuZmlyZUV2ZW50KFwiYmluZGluZ1VwZGF0ZWRcIik7XG5cdC8vbm8gbmVlZCB0byBjaGVjayBmb3Igc2VtYW50aWMgdGFyZ2V0cyBoZXJlIHNpbmNlIHdlIGFyZSBpbiBhIFZIIGFuZCBkb24ndCB3YW50IHRvIGFsbG93IGZ1cnRoZXIgbmF2aWdhdGlvblxufTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgc2ltcGxlIHByb3BlcnR5IGZvciBlYWNoIGlkZW50aWZpZWQgY29tcGxleCBwcm9wZXJ0eS5cbiAqIEBwYXJhbSBwcm9wZXJ0aWVzVG9CZUNyZWF0ZWQgSWRlbnRpZmllZCBwcm9wZXJ0aWVzLlxuICogQHBhcmFtIGV4aXN0aW5nQ29sdW1ucyBUaGUgbGlzdCBvZiBjb2x1bW5zIGNyZWF0ZWQgZm9yIHByb3BlcnRpZXMgZGVmaW5lZCBvbiB0aGUgVmFsdWUgTGlzdC5cbiAqIEBwYXJhbSBzb3J0UmVzdHJpY3Rpb25zSW5mbyBBbiBvYmplY3QgY29udGFpbmluZyB0aGUgc29ydCByZXN0cmljdGlvbiBpbmZvcm1hdGlvblxuICogQHBhcmFtIGZpbHRlclJlc3RyaWN0aW9uc0luZm8gQW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIGZpbHRlciByZXN0cmljdGlvbiBpbmZvcm1hdGlvblxuICogQHJldHVybnMgVGhlIGFycmF5IG9mIHByb3BlcnRpZXMgY3JlYXRlZC5cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZVJlbGF0ZWRQcm9wZXJ0aWVzKFxuXHRwcm9wZXJ0aWVzVG9CZUNyZWF0ZWQ6IFJlY29yZDxzdHJpbmcsIFByb3BlcnR5Pixcblx0ZXhpc3RpbmdDb2x1bW5zOiBQcm9wZXJ0eUluZm9bXSxcblx0c29ydFJlc3RyaWN0aW9uc0luZm86IFNvcnRSZXN0cmljdGlvbnNJbmZvVHlwZSxcblx0ZmlsdGVyUmVzdHJpY3Rpb25zSW5mbzogRmlsdGVyUmVzdHJpY3Rpb25zSW5mb1R5cGUsXG5cdGNhc2VTZW5zaXRpdmU/OiBib29sZWFuXG4pOiBQcm9wZXJ0eUluZm9bXSB7XG5cdGNvbnN0IHJlbGF0ZWRQcm9wZXJ0eU5hbWVNYXA6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fSxcblx0XHRyZWxhdGVkQ29sdW1uczogUHJvcGVydHlJbmZvW10gPSBbXTtcblx0T2JqZWN0LmtleXMocHJvcGVydGllc1RvQmVDcmVhdGVkKS5mb3JFYWNoKChwYXRoKSA9PiB7XG5cdFx0Y29uc3QgcHJvcGVydHkgPSBwcm9wZXJ0aWVzVG9CZUNyZWF0ZWRbcGF0aF0sXG5cdFx0XHRyZWxhdGVkQ29sdW1uID0gZXhpc3RpbmdDb2x1bW5zLmZpbmQoKGNvbHVtbikgPT4gY29sdW1uLnBhdGggPT09IHBhdGgpOyAvLyBDb21wbGV4IHByb3BlcnRpZXMgZG9lc24ndCBoYXZlIHBhdGggc28gb25seSBzaW1wbGUgY29sdW1uIGFyZSBmb3VuZFxuXHRcdGlmICghcmVsYXRlZENvbHVtbikge1xuXHRcdFx0Y29uc3QgbmV3TmFtZSA9IGBQcm9wZXJ0eTo6JHtwYXRofWA7XG5cdFx0XHRyZWxhdGVkUHJvcGVydHlOYW1lTWFwW3BhdGhdID0gbmV3TmFtZTtcblx0XHRcdGNvbnN0IHByb3BlcnR5VHlwZUNvbmZpZyA9IGdldFR5cGVDb25maWcocHJvcGVydHkpO1xuXHRcdFx0Y29uc3QgdmFsdWVIZWxwQ29sdW1uVHlwZUNvbmZpZyA9IFR5cGVNYXAuZ2V0VHlwZUNvbmZpZyhcblx0XHRcdFx0cHJvcGVydHlUeXBlQ29uZmlnLnR5cGUgPz8gXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5TdHJpbmdcIixcblx0XHRcdFx0cHJvcGVydHlUeXBlQ29uZmlnLmZvcm1hdE9wdGlvbnMsXG5cdFx0XHRcdHByb3BlcnR5VHlwZUNvbmZpZy5jb25zdHJhaW50c1xuXHRcdFx0KTtcblx0XHRcdGNvbnN0IHZhbHVlSGVscFRhYmxlQ29sdW1uOiBQcm9wZXJ0eUluZm8gPSB7XG5cdFx0XHRcdGtleTogbmV3TmFtZSxcblx0XHRcdFx0bGFiZWw6IGdldExhYmVsKHByb3BlcnR5KSxcblx0XHRcdFx0cGF0aCxcblx0XHRcdFx0c29ydGFibGU6IGlzU29ydGFibGVQcm9wZXJ0eShzb3J0UmVzdHJpY3Rpb25zSW5mbywgcHJvcGVydHkpLFxuXHRcdFx0XHRmaWx0ZXJhYmxlOiBpc0ZpbHRlcmFibGVQcm9wZXJ0eShmaWx0ZXJSZXN0cmljdGlvbnNJbmZvLCBwcm9wZXJ0eSksXG5cdFx0XHRcdGRhdGFUeXBlOiB2YWx1ZUhlbHBDb2x1bW5UeXBlQ29uZmlnLmNsYXNzTmFtZSxcblx0XHRcdFx0Zm9ybWF0T3B0aW9uczogaXNUeXBlRmlsdGVyYWJsZShwcm9wZXJ0eS50eXBlIGFzIGtleW9mIHR5cGVvZiBEZWZhdWx0VHlwZUZvckVkbVR5cGUpXG5cdFx0XHRcdFx0PyBwcm9wZXJ0eVR5cGVDb25maWcuZm9ybWF0T3B0aW9uc1xuXHRcdFx0XHRcdDogdW5kZWZpbmVkLFxuXHRcdFx0XHRjb25zdHJhaW50czogaXNUeXBlRmlsdGVyYWJsZShwcm9wZXJ0eS50eXBlIGFzIGtleW9mIHR5cGVvZiBEZWZhdWx0VHlwZUZvckVkbVR5cGUpXG5cdFx0XHRcdFx0PyBwcm9wZXJ0eVR5cGVDb25maWcuY29uc3RyYWludHNcblx0XHRcdFx0XHQ6IHVuZGVmaW5lZCxcblx0XHRcdFx0Y2FzZVNlbnNpdGl2ZVxuXHRcdFx0fTtcblx0XHRcdHZhbHVlSGVscFRhYmxlQ29sdW1uLm1heENvbmRpdGlvbnMgPSBnZXRQcm9wZXJ0eU1heENvbmRpdGlvbnMoZmlsdGVyUmVzdHJpY3Rpb25zSW5mbywgdmFsdWVIZWxwVGFibGVDb2x1bW4pO1xuXHRcdFx0cmVsYXRlZENvbHVtbnMucHVzaCh2YWx1ZUhlbHBUYWJsZUNvbHVtbik7XG5cdFx0fVxuXHR9KTtcblx0Ly8gVGhlIHByb3BlcnR5ICdrZXknIGhhcyBiZWVuIHByZWZpeGVkIHdpdGggJ1Byb3BlcnR5OjonIGZvciB1bmlxdWVuZXNzLlxuXHQvLyBVcGRhdGUgdGhlIHNhbWUgaW4gb3RoZXIgcHJvcGVydHlJbmZvc1tdIHJlZmVyZW5jZXMgd2hpY2ggcG9pbnQgdG8gdGhpcyBwcm9wZXJ0eS5cblx0ZXhpc3RpbmdDb2x1bW5zLmZvckVhY2goKGNvbHVtbikgPT4ge1xuXHRcdGlmIChjb2x1bW4ucHJvcGVydHlJbmZvcykge1xuXHRcdFx0Y29sdW1uLnByb3BlcnR5SW5mb3MgPSBjb2x1bW4ucHJvcGVydHlJbmZvcz8ubWFwKChjb2x1bW5OYW1lKSA9PiByZWxhdGVkUHJvcGVydHlOYW1lTWFwW2NvbHVtbk5hbWVdID8/IGNvbHVtbk5hbWUpO1xuXHRcdH1cblx0fSk7XG5cdHJldHVybiByZWxhdGVkQ29sdW1ucztcbn1cblxuLyoqXG4gKiBJZGVudGlmaWVzIHRoZSBtYXhDb25kaXRpb25zIGZvciBhIGdpdmVuIHByb3BlcnR5LlxuICogQHBhcmFtIGZpbHRlclJlc3RyaWN0aW9uc0luZm8gVGhlIGZpbHRlciByZXN0cmljdGlvbiBpbmZvcm1hdGlvbiBmcm9tIHRoZSByZXN0cmljdGlvbiBhbm5vdGF0aW9uLlxuICogQHBhcmFtIHByb3BlcnR5IFRoZSB0YXJnZXQgcHJvcGVydHkuXG4gKiBAcmV0dXJucyBgLTFgIG9yIGAxYCBpZiB0aGUgcHJvcGVydHkgaXMgYSBNdWx0aVZhbHVlRmlsdGVyRXhwcmVzc2lvbi5cbiAqIEBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gZ2V0UHJvcGVydHlNYXhDb25kaXRpb25zKGZpbHRlclJlc3RyaWN0aW9uc0luZm86IEZpbHRlclJlc3RyaWN0aW9uc0luZm9UeXBlLCBwcm9wZXJ0eTogUHJvcGVydHlJbmZvIHwgUHJvcGVydHkpOiBudW1iZXIge1xuXHRjb25zdCBwcm9wZXJ0eVBhdGggPSBnZXRQYXRoKHByb3BlcnR5KTtcblx0cmV0dXJuIHByb3BlcnR5UGF0aCAmJlxuXHRcdGZpbHRlclJlc3RyaWN0aW9uc0luZm8ucHJvcGVydHlJbmZvPy5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eVBhdGgpICYmXG5cdFx0aXNNdWx0aVZhbHVlRmlsdGVyRXhwcmVzc2lvbihmaWx0ZXJSZXN0cmljdGlvbnNJbmZvLnByb3BlcnR5SW5mb1twcm9wZXJ0eVBhdGhdIGFzIHVua25vd24gYXMgc3RyaW5nKVxuXHRcdD8gLTFcblx0XHQ6IDE7XG59XG5cbi8qKlxuICogSWRlbnRpZmllcyB0aGUgYWRkaXRpb25hbCBwcm9wZXJ0eSB3aGljaCByZWZlcmVuY2VzIHRvIHRoZSB1bml0LCB0aW1lem9uZSwgdGV4dEFycmFuZ2VtZW50IG9yIGN1cnJlbmN5LlxuICogQHBhcmFtIGRhdGFNb2RlbFByb3BlcnR5UGF0aCBUaGUgbW9kZWwgb2JqZWN0IHBhdGggb2YgdGhlIHByb3BlcnR5LlxuICogQHJldHVybnMgVGhlIGFkZGl0aW9uYWwgcHJvcGVydHkuXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBnZXRBZGRpdGlvbmFsUHJvcGVydHkoZGF0YU1vZGVsUHJvcGVydHlQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPFByb3BlcnR5Pik6IERhdGFNb2RlbE9iamVjdFBhdGg8UHJvcGVydHk+IHwgdW5kZWZpbmVkIHtcblx0Y29uc3QgcHJvcGVydHkgPSBkYXRhTW9kZWxQcm9wZXJ0eVBhdGgudGFyZ2V0T2JqZWN0O1xuXHRjb25zdCBhZGRpdGlvbmFsUHJvcGVydHlQYXRoID1cblx0XHRwcm9wZXJ0eSAmJlxuXHRcdChnZXRBc3NvY2lhdGVkVGV4dFByb3BlcnR5UGF0aChwcm9wZXJ0eSkgfHxcblx0XHRcdGdldEFzc29jaWF0ZWRDdXJyZW5jeVByb3BlcnR5UGF0aChwcm9wZXJ0eSkgfHxcblx0XHRcdGdldEFzc29jaWF0ZWRVbml0UHJvcGVydHlQYXRoKHByb3BlcnR5KSB8fFxuXHRcdFx0Z2V0QXNzb2NpYXRlZFRpbWV6b25lUHJvcGVydHlQYXRoKHByb3BlcnR5KSk7XG5cdGlmICghYWRkaXRpb25hbFByb3BlcnR5UGF0aCkge1xuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblx0Y29uc3QgZGF0YU1vZGVsQWRkaXRpb25hbFByb3BlcnR5ID0gZW5oYW5jZURhdGFNb2RlbFBhdGg8UHJvcGVydHk+KGRhdGFNb2RlbFByb3BlcnR5UGF0aCwgYWRkaXRpb25hbFByb3BlcnR5UGF0aCk7XG5cblx0Ly9BZGRpdGlvbmFsIFByb3BlcnR5IGNvdWxkIHJlZmVyIHRvIGEgbmF2aWdhdGlvbiBwcm9wZXJ0eSwga2VlcCB0aGUga2V5IGFuZCBwYXRoIGFzIG5hdmlnYXRpb24gcHJvcGVydHlcblx0Y29uc3QgYWRkaXRpb25hbFByb3BlcnR5ID0gZGF0YU1vZGVsQWRkaXRpb25hbFByb3BlcnR5LnRhcmdldE9iamVjdDtcblx0aWYgKCFhZGRpdGlvbmFsUHJvcGVydHkpIHtcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cdHJldHVybiBkYXRhTW9kZWxBZGRpdGlvbmFsUHJvcGVydHk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IE9EYXRhVGFibGVEZWxlZ2F0ZTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBMERBO0FBQ0E7QUFDQTtFQUNBLE1BQU1BLGtCQUFrQixHQUFHQyxNQUFNLENBQUND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
|
|
@@ -115,7 +115,7 @@ function collectRelatedProperties(dataModelPropertyPath: DataModelObjectPath<Pro
|
|
|
115
115
|
|
|
116
116
|
const textAnnotation = property.annotations?.Common?.Text,
|
|
117
117
|
textArrangement = textAnnotation?.annotations?.UI?.TextArrangement?.toString(),
|
|
118
|
-
displayMode = textAnnotation && textArrangement && getDisplayMode(property);
|
|
118
|
+
displayMode = textAnnotation && textArrangement && getDisplayMode(property, dataModelPropertyPath.targetEntityType);
|
|
119
119
|
|
|
120
120
|
if (displayMode === "Description") {
|
|
121
121
|
relatedProperties[additionalPropertyPath] = additionalProperty;
|
|
@@ -184,8 +184,8 @@ ODataTableDelegate._createPropertyInfos = async function (table: Table, model: O
|
|
|
184
184
|
} else {
|
|
185
185
|
propertyInfo.path = columnDef.path;
|
|
186
186
|
propertyInfo.dataType = typeConfig.className;
|
|
187
|
-
propertyInfo.constraints =
|
|
188
|
-
propertyInfo.formatOptions =
|
|
187
|
+
propertyInfo.constraints = typeConfig.typeInstance.oConstraints;
|
|
188
|
+
propertyInfo.formatOptions = typeConfig.typeInstance.oFormatOptions;
|
|
189
189
|
propertyInfo.sortable = isSortableProperty(sortRestrictionsInfo, columnDef);
|
|
190
190
|
propertyInfo.filterable = isFilterableProperty(filterRestrictionsInfo, columnDef);
|
|
191
191
|
propertyInfo.maxConditions = getPropertyMaxConditions(filterRestrictionsInfo, columnDef);
|