@sapui5/sap.fe.core 1.136.11 → 1.136.13
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/core/.library +1 -1
- package/src/sap/fe/core/AppStateHandler.js +8 -2
- package/src/sap/fe/core/AppStateHandler.ts +9 -1
- package/src/sap/fe/core/TemplateComponent.js +1 -1
- package/src/sap/fe/core/TemplateComponent.ts +1 -3
- package/src/sap/fe/core/controllerextensions/EditFlow.js +73 -23
- package/src/sap/fe/core/controllerextensions/EditFlow.ts +113 -43
- package/src/sap/fe/core/controllerextensions/InternalRouting.js +7 -4
- package/src/sap/fe/core/controllerextensions/InternalRouting.ts +8 -5
- package/src/sap/fe/core/controllerextensions/MessageHandler.js +1 -1
- package/src/sap/fe/core/controllerextensions/MessageHandler.ts +1 -0
- package/src/sap/fe/core/controllerextensions/Routing.js +6 -2
- package/src/sap/fe/core/controllerextensions/Routing.ts +4 -1
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +8 -1
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.ts +8 -0
- package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataOperation.js +2 -1
- package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataOperation.ts +1 -0
- package/src/sap/fe/core/controllerextensions/routing/RouterProxy.js +6 -5
- package/src/sap/fe/core/controllerextensions/routing/RouterProxy.ts +15 -5
- package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.js +29 -1
- package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.tsx +32 -0
- package/src/sap/fe/core/converters/controls/Common/Action.js +3 -2
- package/src/sap/fe/core/converters/controls/Common/Action.ts +2 -1
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +31 -36
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +47 -57
- package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.js +4 -3
- package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.ts +3 -2
- package/src/sap/fe/core/formatters/FPMFormatter.js +2 -2
- package/src/sap/fe/core/formatters/FPMFormatter.ts +1 -1
- package/src/sap/fe/core/fpm/manifest.json +1 -1
- package/src/sap/fe/core/helpers/ModelHelper.js +4 -1
- package/src/sap/fe/core/helpers/ModelHelper.ts +4 -1
- package/src/sap/fe/core/library.js +1 -1
- package/src/sap/fe/core/messagebundle_da.properties +1 -1
- package/src/sap/fe/core/messagebundle_ko.properties +3 -3
- package/src/sap/fe/core/messagebundle_uk.properties +2 -2
- package/src/sap/fe/core/messagebundle_vi.properties +4 -4
- package/src/sap/fe/core/rootView/Fcl.controller.js +1 -1
- package/src/sap/fe/core/rootView/Fcl.controller.ts +6 -1
- package/src/sap/fe/core/services/CollaborationManagerServiceFactory.js +17 -29
- package/src/sap/fe/core/services/CollaborationManagerServiceFactory.ts +23 -26
- package/src/sap/fe/core/services/RoutingServiceFactory.js +9 -5
- package/src/sap/fe/core/services/RoutingServiceFactory.ts +12 -6
|
@@ -225,6 +225,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/UIProvide
|
|
|
225
225
|
* @param [inParameters.keepTransientContextOnFailed] If set, the context stays in the list if the POST failed and POST will be repeated with the next change
|
|
226
226
|
* @param [inParameters.inactive] If set, the context is set as inactive for empty rows
|
|
227
227
|
* @param [inParameters.skipParameterDialog] Skips the action parameter dialog
|
|
228
|
+
* @param [inParameters.requestAtLeast] The parent control (view) for the creation
|
|
228
229
|
* @param appComponent The app component
|
|
229
230
|
* @param resourceModel The resource model
|
|
230
231
|
* @param messageHandler The message handler extension
|
|
@@ -250,6 +251,11 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/UIProvide
|
|
|
250
251
|
const messageHandlingKey = messageHandler.registerToHoldMessages();
|
|
251
252
|
try {
|
|
252
253
|
newDocumentContext = await this.performCreation(mainListBinding, parameters, appComponent, messageHandler, resourceModel, fromCopyPaste);
|
|
254
|
+
// Load the properties that are part of the 'requestAtLeast' annotation from the table (if any)
|
|
255
|
+
// In case of createInPlace for a TreeTable, the new context might not be part of the listBinding (because of filters) --> we don't request the properties
|
|
256
|
+
if (newDocumentContext?.getBinding() !== undefined && parameters.requestAtLeast && parameters.requestAtLeast.length > 0) {
|
|
257
|
+
await newDocumentContext.requestProperty(parameters.requestAtLeast);
|
|
258
|
+
}
|
|
253
259
|
await messageHandler.showMessageDialog({
|
|
254
260
|
control: parameters.parentControl,
|
|
255
261
|
unHoldKey: messageHandlingKey
|
|
@@ -794,6 +800,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/UIProvide
|
|
|
794
800
|
* @param messageHandler The message handler extension
|
|
795
801
|
* @param isNewObject True if we're trying to cancel a newly created object
|
|
796
802
|
* @param skipConfirmationMsg
|
|
803
|
+
* @param isStandardSave
|
|
797
804
|
* @returns Promise resolves with ???
|
|
798
805
|
* @final
|
|
799
806
|
*/;
|
|
@@ -1313,4 +1320,4 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/UIProvide
|
|
|
1313
1320
|
const singleton = new TransactionHelper();
|
|
1314
1321
|
return singleton;
|
|
1315
1322
|
}, false);
|
|
1316
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJDcmVhdGlvbk1vZGUiLCJGRUxpYnJhcnkiLCJQcm9ncmFtbWluZ01vZGVsIiwiRGVsZXRlT3B0aW9uVHlwZXMiLCJkZWxldGVIZWxwZXIiLCJEZWxldGVEaWFsb2dDb250ZW50Q29udHJvbCIsImdldFBhcmFtZXRlcnMiLCJtUGFyYW1ldGVycyIsImdldE1ldGFkYXRhIiwiZ2V0TmFtZSIsIlRyYW5zYWN0aW9uSGVscGVyIiwiX3Byb3RvIiwicHJvdG90eXBlIiwiYnVzeUxvY2siLCJhcHBDb21wb25lbnQiLCJidXN5UGF0aCIsIkJ1c3lMb2NrZXIiLCJsb2NrIiwiZ2V0TW9kZWwiLCJidXN5VW5sb2NrIiwidW5sb2NrIiwiZ2V0UHJvZ3JhbW1pbmdNb2RlbCIsInNvdXJjZSIsInBhdGgiLCJpc0EiLCJnZXRQYXRoIiwiaXNSZWxhdGl2ZSIsImdldFJlc29sdmVkUGF0aCIsIm1ldGFNb2RlbCIsImdldE1ldGFNb2RlbCIsIk1vZGVsSGVscGVyIiwiaXNEcmFmdFN1cHBvcnRlZCIsIkRyYWZ0IiwiaXNTdGlja3lTZXNzaW9uU3VwcG9ydGVkIiwiU3RpY2t5IiwiTm9uRHJhZnQiLCJ2YWxpZGF0ZURvY3VtZW50Iiwib0NvbnRleHQiLCJvVmlldyIsInNDdXN0b21WYWxpZGF0aW9uRnVuY3Rpb24iLCJjdXN0b21WYWxpZGF0aW9uRnVuY3Rpb24iLCJzTW9kdWxlIiwic3Vic3RyaW5nIiwibGFzdEluZGV4T2YiLCJyZXBsYWNlIiwic0Z1bmN0aW9uTmFtZSIsImxlbmd0aCIsIm1EYXRhIiwiZGF0YSIsIkZQTUhlbHBlciIsInZhbGlkYXRpb25XcmFwcGVyIiwiUHJvbWlzZSIsInJlc29sdmUiLCJnZXREYXRhRnJvbURlZmF1bHRWYWx1ZUZ1bmN0aW9uIiwibGlzdEJpbmRpbmciLCJtb2RlbCIsIm1ldGFDb250ZXh0IiwiZ2V0TWV0YUNvbnRleHQiLCJsaXN0QmluZGluZ09iamVjdFBhdGgiLCJNZXRhTW9kZWxDb252ZXJ0ZXIiLCJnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMiLCJkZWZhdWx0RnVuY09uVGFyZ2V0T2JqZWN0IiwidGFyZ2V0T2JqZWN0IiwiYW5ub3RhdGlvbnMiLCJDb21tb24iLCJEZWZhdWx0VmFsdWVzRnVuY3Rpb24iLCJkZWZhdWx0RnVuY09uVGFyZ2V0RW50aXR5U2V0IiwidGFyZ2V0RW50aXR5U2V0IiwiZGVmYXVsdEZ1bmN0aW9uTmFtZSIsInVuZGVmaW5lZCIsImZ1bmN0aW9uT25OYXZQcm9wIiwiaXNOYXZpZ2F0aW9uUHJvcGVydHkiLCJkZWZhdWx0RnVuY3Rpb25Db250ZXh0IiwiYmluZGluZ1BhdGgiLCJjb250ZXh0IiwiZ2V0Q29udGV4dCIsInN0YXJ0c1dpdGgiLCJpbmNsdWRlcyIsImZpcnN0TmF2Iiwic3BsaXQiLCJwYXJlbnRQYXRoIiwiYmluZENvbnRleHQiLCJnZXRCb3VuZENvbnRleHQiLCJnZXRIZWFkZXJDb250ZXh0IiwiZGVmYXVsdEZ1bmN0aW9uUGF0aCIsImdldE1ldGFQYXRoIiwiZGVmYXVsdEZ1bmN0aW9uT2JqZWN0UGF0aCIsImRlZmF1bHRGdW5jdGlvblJlc3VsdCIsImlzQm91bmQiLCJvcGVyYXRpb25zIiwiY2FsbEJvdW5kRnVuY3Rpb24iLCJ0b1N0cmluZyIsImNhbGxGdW5jdGlvbkltcG9ydCIsImdldE9iamVjdCIsImlzTGlzdEJpbmRpbmdIaWVyYXJjaGljYWwiLCJnZXRBZ2dyZWdhdGlvbiIsImhpZXJhcmNoeVF1YWxpZmllciIsImlzTGlzdEJpbmRpbmdBbmFseXRpY2FsIiwiYWdncmVnYXRpb24iLCJjcmVhdGVDb250ZXh0IiwiaW5pdGlhbERhdGEiLCJvcHRpb25zIiwiZGF0YUZvckNyZWF0aW9uIiwibGlzdEJpbmRpbmdGb3JDcmVhdGlvbiIsInBhcmVudENvbnRleHQiLCJpc0V4cGFuZGVkIiwiZXhwYW5kIiwiT2JqZWN0IiwiYXNzaWduIiwiYmluZExpc3QiLCIkJGdyb3VwSWQiLCJnZXRHcm91cElkIiwiJCR1cGRhdGVHcm91cElkIiwiZ2V0VXBkYXRlR3JvdXBJZCIsIm9iamVjdFBhdGgiLCJwYXJlbnROYXZpZ2F0aW9uIiwidGFyZ2V0RW50aXR5VHlwZSIsIkFnZ3JlZ2F0aW9uIiwiUGFyZW50TmF2aWdhdGlvblByb3BlcnR5IiwidmFsdWUiLCJFcnJvciIsInBhcmVudEJpbmRpbmdEYXRhIiwiY3JlYXRlIiwiY3JlYXRlQXRFbmQiLCJjcmVhdGVJbmFjdGl2ZSIsImdldENyZWF0aW9uUGFyYW1ldGVycyIsImNyZWF0ZURhdGEiLCJtZXRhUGF0aCIsIm5vbkNvbXB1dGVkVmlzaWJsZUZpZWxkcyIsImdldENyZWF0ZVBvcHVwRmllbGRzIiwiZmlsdGVyIiwiZmllbGROYW1lIiwiY3JlYXRlRG9jdW1lbnQiLCJtYWluTGlzdEJpbmRpbmciLCJpblBhcmFtZXRlcnMiLCJyZXNvdXJjZU1vZGVsIiwibWVzc2FnZUhhbmRsZXIiLCJmcm9tQ29weVBhc3RlIiwibmV3RG9jdW1lbnRDb250ZXh0IiwicGFyYW1ldGVycyIsInByb2dyYW1taW5nTW9kZWwiLCJnZXRCdXN5UGF0aCIsImJlZm9yZUNyZWF0ZUNhbGxCYWNrIiwiaW5hY3RpdmUiLCJtZXNzYWdlSGFuZGxpbmdLZXkiLCJyZWdpc3RlclRvSG9sZE1lc3NhZ2VzIiwicGVyZm9ybUNyZWF0aW9uIiwic2hvd01lc3NhZ2VEaWFsb2ciLCJjb250cm9sIiwicGFyZW50Q29udHJvbCIsInVuSG9sZEtleSIsImVycm9yIiwiQ29uc3RhbnRzIiwiQWN0aW9uRXhlY3V0aW9uRmFpbGVkIiwiQ2FuY2VsQWN0aW9uRGlhbG9nIiwiaXNUcmFuc2llbnQiLCJkZWxldGUiLCJidXN5TW9kZSIsImJ1c3lJZCIsImNyZWF0ZURvY3VtZW50Q29udGV4dCIsImNyZWF0ZVBhcmFtZXRlcnMiLCJlbnRyaWVzIiwibWFwIiwiX3JlZiIsImtleSIsInRvRVM2UHJvbWlzZSIsImNvbnRleHRQYXRoIiwiTG9nIiwiT25CZWZvcmVDcmVhdGVGYWlsZWQiLCJyZWR1Y2UiLCJyZXN1bHQiLCJjdXJyZW50T2JqZWN0IiwiY3JlYXRlUHJvbWlzZSIsIkNvbW1vblV0aWxzIiwiSU5MSU5FRURJVF9VUERBVEVHUk9VUElEIiwic3VibWl0QmF0Y2giLCJjcmVhdGVIYXNoIiwiZ2V0Um91dGVyUHJveHkiLCJnZXRIYXNoIiwiY29tcG9uZW50RGF0YSIsImdldENvbXBvbmVudERhdGEiLCJzdGFydHVwUGFyYW1ldGVycyIsIm5ld0FjdGlvbiIsIl9nZXROZXdBY3Rpb24iLCJwZXJmb3JtQ3JlYXRpb25XaXRoQWN0aW9uIiwic3RhdHVzIiwicmVhc29uIiwicmV0dXJuZWRDb250ZXh0IiwicGVyZm9ybUNyZWF0aW9uV2l0aFBPU1QiLCJhY3Rpb25OYW1lIiwiaGVhZGVyQ29udGV4dFBhdGgiLCJtZXNzYWdlc1BhdGgiLCJnZXRNZXNzYWdlc1BhdGgiLCJiaW5kaW5nUGFyYW1ldGVycyIsIiQkcGF0Y2hXaXRob3V0U2lkZUVmZmVjdHMiLCJzZWxlY3RlZFByb3BlcnRpZXMiLCJwdXNoIiwiam9pbiIsImNhbGxBY3Rpb24iLCJjb250ZXh0cyIsInNob3dBY3Rpb25QYXJhbWV0ZXJEaWFsb2ciLCJsYWJlbCIsIl9nZXRTcGVjaWZpY0NyZWF0ZUFjdGlvbkRpYWxvZ0xhYmVsIiwidmlldyIsImlzQ3JlYXRlQWN0aW9uIiwic2tpcFBhcmFtZXRlckRpYWxvZyIsImRlZmF1bHRWYWx1ZUZ1bmN0aW9uRGF0YSIsImNhbkhhdmVEaWFsb2ciLCJjcmVhdGlvbk1vZGUiLCJDcmVhdGlvblJvdyIsIklubGluZSIsImNyZWF0aW9uRGlhbG9nRmllbGRzIiwiQ3JlYXRpb25EaWFsb2ciLCJmb3JFYWNoIiwiY3JlYXRlV2l0aERpYWxvZyIsIndhaXRGb3JDcmVhdGVDb21wbGV0aW9uIiwia2VlcFRyYW5zaWVudENvbnRleHRPbkZhaWxlZCIsIm1zZyIsIm1lc3NhZ2UiLCJfaXNEcmFmdEVuYWJsZWQiLCJ2Q29udGV4dHMiLCJjb250ZXh0Rm9yRHJhZnRNb2RlbCIsInNQcm9ncmFtbWluZ01vZGVsIiwiZGVsZXRlRG9jdW1lbnQiLCJjb250ZXh0c1RvRGVsZXRlIiwiQXJyYXkiLCJpc0FycmF5IiwiZmlyc3RDb250ZXh0Iiwic2VsZWN0ZWRDb250ZXh0cyIsInJlamVjdCIsImRyYWZ0RW5hYmxlZCIsIml0ZW1zIiwidW5TYXZlZENvbnRleHQiLCJlbnRpdHlTZXROYW1lIiwiZ2V0Q29sbGVjdGlvbk5hbWVGcm9tQ29udGV4dCIsIm51bWJlck9mU2VsZWN0ZWRDb250ZXh0cyIsImxvY2tlZENvbnRleHQiLCJmaW5kIiwiY29udGV4dERhdGEiLCJJc0FjdGl2ZUVudGl0eSIsIkhhc0RyYWZ0RW50aXR5IiwiRHJhZnRBZG1pbmlzdHJhdGl2ZURhdGEiLCJJblByb2Nlc3NCeVVzZXIiLCJEcmFmdElzQ3JlYXRlZEJ5TWUiLCJsb2NraW5nVXNlck5hbWUiLCJNZXNzYWdlQm94Iiwic2hvdyIsImdldFRleHQiLCJ0aXRsZSIsIm9uQ2xvc2UiLCJub25UYWJsZVR4dCIsInVuU2F2ZWRDb250ZXh0VXNlciIsImRlc2NyaXB0aW9uIiwidHlwZSIsImRlbGV0YWJsZUNvbnRleHRzIiwidGV4dCIsInNlbGVjdGVkIiwiVEVYVCIsInRvdGFsRGVsZXRhYmxlIiwiZHJhZnRzV2l0aE5vbkRlbGV0YWJsZUFjdGl2ZSIsImRyYWZ0c1dpdGhEZWxldGFibGVBY3RpdmUiLCJ1blNhdmVkQ29udGV4dHMiLCJ1cGRhdGVEcmFmdE9wdGlvbnNGb3JEZWxldGFibGVUZXh0cyIsIm5vbkRlbGV0YWJsZVRleHQiLCJnZXROb25EZWxldGFibGVUZXh0Iiwib3B0aW9uc0RlbGV0YWJsZVRleHRzIiwiZ2V0T3B0aW9uc0ZvckRlbGV0YWJsZVRleHRzIiwiY29tbW9uQmluZGluZyIsImdldEJpbmRpbmciLCJiaW5kaW5nVHlwZSIsInVwZGF0ZUNvbnRlbnRGb3JEZWxldGVEaWFsb2ciLCJmbkNvbmZpcm0iLCJtZXNzYWdlSGFuZGxpbmciLCJyZW1vdmVCb3VuZFRyYW5zaXRpb25NZXNzYWdlcyIsImRlbGV0ZUNvbmZpcm1IYW5kbGVyIiwib0Vycm9yIiwiZGlhbG9nIiwiY3JlYXRlRGVsZXRlRGlhbG9nIiwibm9EaWFsb2ciLCJzaWxlbnRNb2RlIiwiYWRkU3R5bGVDbGFzcyIsIm9wZW4iLCJmblJlamVjdCIsImRpYWxvZ0NvbmZpcm1lZCIsInZCb3giLCJWQm94IiwicmVzb3VyY2VCdW5kbGVDb3JlIiwiTGlicmFyeSIsImdldFJlc291cmNlQnVuZGxlRm9yIiwiRGlhbG9nIiwic3RhdGUiLCJjb250ZW50IiwiYXJpYUxhYmVsbGVkQnkiLCJiZWdpbkJ1dHRvbiIsIkJ1dHRvbiIsInByZXNzIiwiY2xvc2UiLCJlbmRCdXR0b24iLCJhZnRlckNsb3NlIiwiZGVzdHJveSIsImVkaXREb2N1bWVudCIsImdyb3VwSWQiLCJ0cmFuc2FjdGlvbkRldGFpbHMiLCJyZW1vdmVUcmFuc2l0aW9uTWVzc2FnZXMiLCJvTmV3Q29udGV4dCIsImRyYWZ0IiwiY3JlYXRlRHJhZnRGcm9tQWN0aXZlRG9jdW1lbnQiLCJiUHJlc2VydmVDaGFuZ2VzIiwic3RpY2t5IiwiZWRpdERvY3VtZW50SW5TdGlja3lTZXNzaW9uIiwiZXJyIiwic2hvd01lc3NhZ2VzIiwiY29uY3VycmVudEVkaXRGbGFnIiwiY2FuY2VsRG9jdW1lbnQiLCJtSW5QYXJhbWV0ZXJzIiwiaXNOZXdPYmplY3QiLCJpc09iamVjdE1vZGlmaWVkIiwib01vZGVsIiwicmV0dXJuZWRWYWx1ZSIsInNpYmxpbmdDb250ZXh0Q2Fub25pY2FsUGF0aCIsImRyYWZ0QWRtaW5EYXRhIiwic2libGluZ0NvbnRleHQiLCJkcmFmdERhdGFDb250ZXh0IiwiYWxsIiwicmVxdWVzdENhbm9uaWNhbFBhdGgiLCJyZXF1ZXN0T2JqZWN0IiwiQ3JlYXRpb25EYXRlVGltZSIsIkxhc3RDaGFuZ2VEYXRlVGltZSIsInNraXBEaXNjYXJkUG9wb3ZlciIsIl9jb25maXJtRGlzY2FyZCIsImNhbmNlbEJ1dHRvbiIsImlzS2VlcEFsaXZlIiwic2V0S2VlcEFsaXZlIiwiYmVmb3JlQ2FuY2VsQ2FsbEJhY2siLCJoYXNQZW5kaW5nQ2hhbmdlcyIsInJlc2V0Q2hhbmdlcyIsImRlbGV0ZURyYWZ0IiwiZGlzY2FyZGVkQ29udGV4dCIsImRpc2NhcmREb2N1bWVudCIsInJlZnJlc2giLCJzYXZlRG9jdW1lbnQiLCJleGVjdXRlU2lkZUVmZmVjdHNPbkVycm9yIiwiYmluZGluZ3NGb3JTaWRlRWZmZWN0cyIsInNraXBDb25maXJtYXRpb25Nc2ciLCJhcmd1bWVudHMiLCJpc1N0YW5kYXJkU2F2ZSIsIm9BY3RpdmVEb2N1bWVudCIsImFjdGl2YXRlRG9jdW1lbnQiLCJtZXNzYWdlc1JlY2VpdmVkIiwiZ2V0TWVzc2FnZXMiLCJjb25jYXQiLCJnZXRUeXBlIiwiTWVzc2FnZVR5cGUiLCJTdWNjZXNzIiwiTWVzc2FnZVRvYXN0IiwiaGFzVHJhbnNpZW50Q29udGV4dCIsImdldFNpZGVFZmZlY3RzU2VydmljZSIsInJlcXVlc3RTaWRlRWZmZWN0c0Zvck5hdmlnYXRpb25Qcm9wZXJ0eSIsInNBY3Rpb25OYW1lIiwiY29udGV4dFRvUHJvY2VzcyIsInNOYW1lIiwiY29udHJvbElkIiwiYnlJZCIsIm9SZXN1bHQiLCJhY3Rpb25QYXRoIiwiYm91bmRBY3Rpb24iLCJjcmVhdGVCaW5kaW5nQ29udGV4dCIsImNvbnZlcnRlZFR5cGVzIiwiY29udmVydFR5cGVzIiwiY29udmVydGVkQWN0aW9uIiwicmVzb2x2ZVBhdGgiLCJ0YXJnZXQiLCJPcGVyYXRpb24iLCJwYXJhbWV0ZXJWYWx1ZXMiLCJpbnZvY2F0aW9uR3JvdXBpbmciLCJvRGF0YVByb3BlcnRpZXMiLCJnaG9zdENvbnRleHRCaW5kaW5nUHJvdGVjdGlvbiIsImVuaGFuY2Ukc2VsZWN0IiwiaWdub3JlRVRhZyIsIm9EYXRhRXZlbnRzIiwib25PRGF0YVN1Ym1pdCIsIm9uT0RhdGFSZXNwb25zZSIsIm9uUmVxdWVzdFNpZGVFZmZlY3RzIiwiaGFuZGxlQWN0aW9uRW5hYmxlbWVudE9uT3BlcmF0aW9uIiwiaW50ZXJuYWxNb2RlbENvbnRleHQiLCJvcGVyYXRpb25BdmFpbGFibGVNYXAiLCJkZWZhdWx0VmFsdWVzRXh0ZW5zaW9uRnVuY3Rpb24iLCJleGVjdXRlIiwiY2FsbEFjdGlvbkltcG9ydCIsIl9oYW5kbGVBY3Rpb25SZXNwb25zZSIsIm5hbWUiLCJhY3Rpb25IZWxwZXIiLCJpc1N0YXRpY0FjdGlvbiIsImdldFByb3BlcnR5IiwiQWN0aW9uUnVudGltZSIsInNldEFjdGlvbkVuYWJsZW1lbnQiLCJKU09OIiwicGFyc2UiLCJnZXRTZWxlY3RlZENvbnRleHRzIiwidXBkYXRlRGVsZXRlSW5mb0ZvclNlbGVjdGVkQ29udGV4dHMiLCJhVHJhbnNpZW50TWVzc2FnZXMiLCJzZXRQcm9wZXJ0eSIsImFTZWxlY3RlZENvbnRleHRzIiwiaGFuZGxlVmFsaWRhdGlvbkVycm9yIiwiZXJyb3JUb1JlbW92ZSIsIk1lc3NhZ2luZyIsImdldE1lc3NhZ2VNb2RlbCIsImdldERhdGEiLCJ2YWxpZGF0aW9uIiwicmVtb3ZlTWVzc2FnZXMiLCJfY3JlYXRlUG9wb3ZlciIsInNldHRpbmdzIiwiUG9wb3ZlciIsImlzTW9kaWZpZWQiLCJzZXRFbmFibGVkIiwiY29uZmlybWF0aW9uUG9wb3ZlciIsInNob3dIZWFkZXIiLCJwbGFjZW1lbnQiLCJUZXh0IiwiY29uZmlybUJ1dHRvbiIsIndpZHRoIiwiYWRkQ29udGVudCIsImF0dGFjaEJlZm9yZU9wZW4iLCJzZXRJbml0aWFsRm9jdXMiLCJhdHRhY2hBZnRlckNsb3NlIiwib3BlbkJ5IiwicmVmcmVzaExpc3RCaW5kaW5nIiwiaXNSb290IiwicmVxdWVzdFNpZGVFZmZlY3RzIiwiJE5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgiLCJyZXF1ZXN0UmVmcmVzaCIsImZpZWxkTmFtZXMiLCJsaXN0TWV0YVBhdGgiLCJ0cmFuc2llbnRMaXN0QmluZGluZyIsInJlZnJlc2hJbnRlcm5hbCIsInRyYW5zaWVudENvbnRleHQiLCJmaWVsZE1ldGFDb250ZXh0cyIsImNyZWF0ZURpYWxvZyIsImdldENvcmVVSUZhY3RvcnkiLCJuZXdDcmVhdGVEaWFsb2ciLCJzZXRVc2VyRGVmYXVsdHMiLCJjcmVhdGVBY3Rpb24iLCJvcGVuRGlhbG9nIiwiZSIsInJlc3VsdFByb21pc2VLZWVwZXIiLCJQcm9taXNlS2VlcGVyIiwib25FeGl0RGlhbG9nIiwiZXZlbnQiLCJnZXRQYXJhbWV0ZXIiLCJjbG9zZURpYWxvZyIsInNldEJ1c3kiLCJiSXNDcmVhdGVEaWFsb2ciLCJ0cmFuc2llbnREYXRhIiwia2V5cyIsInByb3BlcnR5UGF0aCIsIm9Qcm9wZXJ0eSIsIiRraW5kIiwiY3JlYXRlRGF0YUFzQXJyYXkiLCJfcmVmMiIsIlVpTW9kZWxDb25zdGFudHMiLCJEb2N1bWVudE1vZGlmaWVkIiwibmV3Q29udGV4dCIsImNyZWF0aW9uU3VjY2VzcyIsImFmdGVyQ3JlYXRlQ2FsbEJhY2siLCJkaXNwbGF5RXJyb3JNZXNzYWdlcyIsInNob3dCb3VuZFN0YXRlTWVzc2FnZXMiLCJDcmVhdGlvbkZhaWxlZCIsImlzT3BlcmF0aW9uRGlhbG9nT3BlbiIsImlzT3BlbiIsImF0dGFjaEV4aXREaWFsb2ciLCJwcm9taXNlIiwicHJvbWlzZUtlZXBlciIsInBhcmVudExpc3RCaW5kaW5nIiwib25DcmVhdGVDb21wbGV0ZWQiLCJjcmVhdGVkQ29udGV4dCIsInN1Y2Nlc3MiLCJkZXRhY2hDcmVhdGVDb21wbGV0ZWQiLCJhdHRhY2hDcmVhdGVDb21wbGV0ZWQiLCJjcmVhdGlvblN1Y2Nlc3NmdWwiLCJjcmVhdGVkIiwiY2F0Y2giLCJjb250ZXh0RXJyb3IiLCJ0cmFjZSIsIm9TdGFydHVwUGFyYW1ldGVycyIsInNDcmVhdGVIYXNoIiwib01ldGFNb2RlbCIsInNNZXRhUGF0aCIsInNOZXdBY3Rpb24iLCJwcmVmZXJyZWRNb2RlIiwidG9VcHBlckNhc2UiLCJzUHJlZmVycmVkTW9kZSIsImxpbmVJdGVtcyIsImxpbmVJdGVtIiwiaXNEYXRhRmllbGRGb3JBY3Rpb24iLCJBY3Rpb24iLCJMYWJlbCIsInNpbmdsZXRvbiJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiVHJhbnNhY3Rpb25IZWxwZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBBY3Rpb24sIEFjdGlvbiBhcyBFZG1BY3Rpb24sIEVudGl0eVNldCwgTmF2aWdhdGlvblByb3BlcnR5IH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgdHlwZSB7IExpbmVJdGVtIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgdHlwZSBBcHBDb21wb25lbnQgZnJvbSBcInNhcC9mZS9jb3JlL0FwcENvbXBvbmVudFwiO1xuaW1wb3J0IHR5cGUgeyBGRVZpZXcgfSBmcm9tIFwic2FwL2ZlL2NvcmUvQmFzZUNvbnRyb2xsZXJcIjtcbmltcG9ydCBDb21tb25VdGlscyBmcm9tIFwic2FwL2ZlL2NvcmUvQ29tbW9uVXRpbHNcIjtcbmltcG9ydCB0eXBlIFJlc291cmNlTW9kZWwgZnJvbSBcInNhcC9mZS9jb3JlL1Jlc291cmNlTW9kZWxcIjtcbmltcG9ydCB0eXBlIHsgRXhpdERpYWxvZ0V2ZW50IH0gZnJvbSBcInNhcC9mZS9jb3JlL1VJUHJvdmlkZXJcIjtcbmltcG9ydCB7IGdldENvcmVVSUZhY3RvcnkgfSBmcm9tIFwic2FwL2ZlL2NvcmUvVUlQcm92aWRlclwiO1xuaW1wb3J0IEJ1c3lMb2NrZXIgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL0J1c3lMb2NrZXJcIjtcbmltcG9ydCB0eXBlIE1lc3NhZ2VIYW5kbGVyIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9NZXNzYWdlSGFuZGxlclwiO1xuaW1wb3J0IHR5cGUgeyBCaW5kQ29udGV4dFBhcmFtZXRlcnMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvZWRpdEZsb3cvZHJhZnRcIjtcbmltcG9ydCBkcmFmdCBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvZWRpdEZsb3cvZHJhZnRcIjtcbmltcG9ydCBVaU1vZGVsQ29uc3RhbnRzIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9lZGl0Rmxvdy9lZGl0Rmxvd0NvbnN0YW50c1wiO1xuaW1wb3J0IG9wZXJhdGlvbnMgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL2VkaXRGbG93L29wZXJhdGlvbnNcIjtcbmltcG9ydCBzdGlja3kgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL2VkaXRGbG93L3N0aWNreVwiO1xuaW1wb3J0IG1lc3NhZ2VIYW5kbGluZyBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvbWVzc2FnZUhhbmRsZXIvbWVzc2FnZUhhbmRsaW5nXCI7XG5pbXBvcnQgKiBhcyBNZXRhTW9kZWxDb252ZXJ0ZXIgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWV0YU1vZGVsQ29udmVydGVyXCI7XG5pbXBvcnQgeyBjb252ZXJ0VHlwZXMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NZXRhTW9kZWxDb252ZXJ0ZXJcIjtcbmltcG9ydCB7IGlzRGF0YUZpZWxkRm9yQWN0aW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvYW5ub3RhdGlvbnMvRGF0YUZpZWxkXCI7XG5pbXBvcnQgdHlwZSB7IERlbGV0ZU9wdGlvbiwgRGVsZXRlUGFyYW1ldGVycyB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0RlbGV0ZUhlbHBlclwiO1xuaW1wb3J0IGRlbGV0ZUhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9EZWxldGVIZWxwZXJcIjtcbmltcG9ydCBGUE1IZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvRlBNSGVscGVyXCI7XG5pbXBvcnQgeyBnZXRDcmVhdGVQb3B1cEZpZWxkcyB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01ldGFNb2RlbEZ1bmN0aW9uXCI7XG5pbXBvcnQgdHlwZSB7IEludGVybmFsTW9kZWxDb250ZXh0IH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvTW9kZWxIZWxwZXJcIjtcbmltcG9ydCBNb2RlbEhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Nb2RlbEhlbHBlclwiO1xuaW1wb3J0IFByb21pc2VLZWVwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvUHJvbWlzZUtlZXBlclwiO1xuaW1wb3J0IHRvRVM2UHJvbWlzZSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Ub0VTNlByb21pc2VcIjtcbmltcG9ydCB7IGlzTmF2aWdhdGlvblByb3BlcnR5IH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvVHlwZUd1YXJkc1wiO1xuaW1wb3J0IEZFTGlicmFyeSBmcm9tIFwic2FwL2ZlL2NvcmUvbGlicmFyeVwiO1xuaW1wb3J0IEJ1dHRvbiBmcm9tIFwic2FwL20vQnV0dG9uXCI7XG5pbXBvcnQgRGlhbG9nIGZyb20gXCJzYXAvbS9EaWFsb2dcIjtcbmltcG9ydCBNZXNzYWdlQm94IGZyb20gXCJzYXAvbS9NZXNzYWdlQm94XCI7XG5pbXBvcnQgTWVzc2FnZVRvYXN0IGZyb20gXCJzYXAvbS9NZXNzYWdlVG9hc3RcIjtcbmltcG9ydCB0eXBlIHsgJFBvcG92ZXJTZXR0aW5ncyB9IGZyb20gXCJzYXAvbS9Qb3BvdmVyXCI7XG5pbXBvcnQgUG9wb3ZlciBmcm9tIFwic2FwL20vUG9wb3ZlclwiO1xuaW1wb3J0IFRleHQgZnJvbSBcInNhcC9tL1RleHRcIjtcbmltcG9ydCBWQm94IGZyb20gXCJzYXAvbS9WQm94XCI7XG5pbXBvcnQgdHlwZSBFdmVudCBmcm9tIFwic2FwL3VpL2Jhc2UvRXZlbnRcIjtcbmltcG9ydCB0eXBlIENvbnRyb2wgZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCBMaWJyYXJ5IGZyb20gXCJzYXAvdWkvY29yZS9MaWJcIjtcbmltcG9ydCBNZXNzYWdpbmcgZnJvbSBcInNhcC91aS9jb3JlL01lc3NhZ2luZ1wiO1xuaW1wb3J0IHR5cGUgTWVzc2FnZSBmcm9tIFwic2FwL3VpL2NvcmUvbWVzc2FnZS9NZXNzYWdlXCI7XG5pbXBvcnQgTWVzc2FnZVR5cGUgZnJvbSBcInNhcC91aS9jb3JlL21lc3NhZ2UvTWVzc2FnZVR5cGVcIjtcbmltcG9ydCB0eXBlIFZpZXcgZnJvbSBcInNhcC91aS9jb3JlL212Yy9WaWV3XCI7XG5pbXBvcnQgdHlwZSBUYWJsZSBmcm9tIFwic2FwL3VpL21kYy9UYWJsZVwiO1xuaW1wb3J0IHR5cGUgTXVsdGlWYWx1ZUZpZWxkSXRlbSBmcm9tIFwic2FwL3VpL21kYy9maWVsZC9NdWx0aVZhbHVlRmllbGRJdGVtXCI7XG5pbXBvcnQgdHlwZSBCaW5kaW5nIGZyb20gXCJzYXAvdWkvbW9kZWwvQmluZGluZ1wiO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL0NvbnRleHRcIjtcbmltcG9ydCB0eXBlIE9EYXRhVjRDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFMaXN0QmluZGluZyBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTGlzdEJpbmRpbmdcIjtcbmltcG9ydCB0eXBlIHsgT0RhdGFMaXN0QmluZGluZyRDcmVhdGVDb21wbGV0ZWRFdmVudCB9IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFMaXN0QmluZGluZ1wiO1xuaW1wb3J0IHR5cGUgT0RhdGFNZXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1ldGFNb2RlbFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTW9kZWxcIjtcbmltcG9ydCBBY3Rpb25SdW50aW1lIGZyb20gXCIuLi8uLi9BY3Rpb25SdW50aW1lXCI7XG5pbXBvcnQgdHlwZSB7IE9wZXJhdGlvblJlc3VsdCB9IGZyb20gXCIuL29wZXJhdGlvbnMvT0RhdGFPcGVyYXRpb25cIjtcbmltcG9ydCBPcGVyYXRpb24gZnJvbSBcIi4vb3BlcmF0aW9ucy9PcGVyYXRpb25cIjtcbmltcG9ydCBhY3Rpb25IZWxwZXIgZnJvbSBcIi4vb3BlcmF0aW9ucy9hY3Rpb25IZWxwZXJcIjtcblxuY29uc3QgQ3JlYXRpb25Nb2RlID0gRkVMaWJyYXJ5LkNyZWF0aW9uTW9kZTtcbmNvbnN0IFByb2dyYW1taW5nTW9kZWwgPSBGRUxpYnJhcnkuUHJvZ3JhbW1pbmdNb2RlbDtcblxuLy9FbnVtcyBmb3IgZGVsZXRlIHRleHQgY2FsY3VsYXRpb25zIGZvciBkZWxldGUgY29uZmlybSBkaWFsb2cuXG5jb25zdCBEZWxldGVPcHRpb25UeXBlcyA9IGRlbGV0ZUhlbHBlci5EZWxldGVPcHRpb25UeXBlcztcbmNvbnN0IERlbGV0ZURpYWxvZ0NvbnRlbnRDb250cm9sID0gZGVsZXRlSGVscGVyLkRlbGV0ZURpYWxvZ0NvbnRlbnRDb250cm9sO1xuXG4vKiBNYWtlIHN1cmUgdGhhdCB0aGUgbVBhcmFtZXRlcnMgaXMgbm90IHRoZSBvRXZlbnQgKi9cbmZ1bmN0aW9uIGdldFBhcmFtZXRlcnM8VD4obVBhcmFtZXRlcnM/OiBFdmVudCB8IFQpOiBUIHtcblx0aWYgKG1QYXJhbWV0ZXJzICYmIChtUGFyYW1ldGVycyBhcyBFdmVudCkuZ2V0TWV0YWRhdGEgJiYgKG1QYXJhbWV0ZXJzIGFzIEV2ZW50KS5nZXRNZXRhZGF0YSgpLmdldE5hbWUoKSA9PT0gXCJzYXAudWkuYmFzZS5FdmVudFwiKSB7XG5cdFx0bVBhcmFtZXRlcnMgPSB7fSBhcyBUO1xuXHR9XG5cdHJldHVybiAobVBhcmFtZXRlcnMgYXMgVCkgfHwgKHt9IGFzIFQpO1xufVxuXG5leHBvcnQgdHlwZSBDcmVhdGVQYXJhbWV0ZXJzID0ge1xuXHRkYXRhPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cdGJ1c3lNb2RlPzogc3RyaW5nO1xuXHRidXN5SWQ/OiBzdHJpbmc7XG5cdGtlZXBUcmFuc2llbnRDb250ZXh0T25GYWlsZWQ/OiBib29sZWFuO1xuXHRwYXJlbnRDb250cm9sOiBWaWV3O1xuXHRpbmFjdGl2ZT86IGJvb2xlYW47XG5cdGJlZm9yZUNyZWF0ZUNhbGxCYWNrPzogRnVuY3Rpb247XG5cdGFmdGVyQ3JlYXRlQ2FsbEJhY2s/OiAoY29udGV4dDogT0RhdGFWNENvbnRleHQpID0+IFByb21pc2U8dm9pZD47XG5cdHNraXBQYXJhbWV0ZXJEaWFsb2c/OiBib29sZWFuO1xuXHRjcmVhdGlvbk1vZGU/OiBzdHJpbmc7XG5cdGNyZWF0ZUF0RW5kPzogYm9vbGVhbjtcblx0cGFyZW50Q29udGV4dD86IE9EYXRhVjRDb250ZXh0O1xuXHRjcmVhdGlvbkRpYWxvZ0ZpZWxkcz86IHN0cmluZ1tdO1xufTtcblxuZXhwb3J0IHR5cGUgQ2FuY2VsUGFyYW1ldGVycyA9IHsgY2FuY2VsQnV0dG9uOiBCdXR0b247IHNraXBEaXNjYXJkUG9wb3ZlcjogYm9vbGVhbjsgYmVmb3JlQ2FuY2VsQ2FsbEJhY2s/OiBGdW5jdGlvbiB9O1xuZXhwb3J0IHR5cGUgVHJhbnNhY3Rpb25EZWxldGVQYXJhbWV0ZXJzID0gRGVsZXRlUGFyYW1ldGVycyAmIHtcblx0c2VsZWN0ZWRDb250ZXh0cz86IE9EYXRhVjRDb250ZXh0W107XG5cdHRpdGxlPzogc3RyaW5nO1xuXHRub0RpYWxvZz86IGJvb2xlYW47XG59O1xuZXhwb3J0IHR5cGUgRWRpdFRyYW5zYWN0aW9uRXhlY3V0aW9uRGV0YWlscyA9IHtcblx0ZXhpc3RpbmdEcmFmdFJldXNlZD86IGJvb2xlYW47IC8vIHRydWUgaWYgYW4gZXhpc3RpbmcgZHJhZnQgd2FzIHJldHVybmVkLCBpbnN0ZWFkIG9mIHJldHVybmluZyBhIG5ldyBvbmVcbn07XG5cbmNsYXNzIFRyYW5zYWN0aW9uSGVscGVyIHtcblx0YnVzeUxvY2soYXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQsIGJ1c3lQYXRoPzogc3RyaW5nKTogdm9pZCB7XG5cdFx0QnVzeUxvY2tlci5sb2NrKGFwcENvbXBvbmVudC5nZXRNb2RlbChcInVpXCIpLCBidXN5UGF0aCk7XG5cdH1cblxuXHRidXN5VW5sb2NrKGFwcENvbXBvbmVudDogQXBwQ29tcG9uZW50LCBidXN5UGF0aD86IHN0cmluZyk6IHZvaWQge1xuXHRcdEJ1c3lMb2NrZXIudW5sb2NrKGFwcENvbXBvbmVudC5nZXRNb2RlbChcInVpXCIpLCBidXN5UGF0aCk7XG5cdH1cblxuXHRnZXRQcm9ncmFtbWluZ01vZGVsKHNvdXJjZTogT0RhdGFWNENvbnRleHQgfCBCaW5kaW5nKTogdHlwZW9mIFByb2dyYW1taW5nTW9kZWwge1xuXHRcdGxldCBwYXRoOiBzdHJpbmc7XG5cdFx0aWYgKHNvdXJjZS5pc0E8T0RhdGFWNENvbnRleHQ+KFwic2FwLnVpLm1vZGVsLm9kYXRhLnY0LkNvbnRleHRcIikpIHtcblx0XHRcdHBhdGggPSBzb3VyY2UuZ2V0UGF0aCgpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRwYXRoID0gKHNvdXJjZS5pc1JlbGF0aXZlKCkgPyBzb3VyY2UuZ2V0UmVzb2x2ZWRQYXRoKCkgOiBzb3VyY2UuZ2V0UGF0aCgpKSA/PyBcIlwiO1xuXHRcdH1cblxuXHRcdGNvbnN0IG1ldGFNb2RlbCA9IHNvdXJjZS5nZXRNb2RlbCgpPy5nZXRNZXRhTW9kZWwoKSBhcyBPRGF0YU1ldGFNb2RlbCB8IHVuZGVmaW5lZDtcblx0XHRpZiAobWV0YU1vZGVsICYmIE1vZGVsSGVscGVyLmlzRHJhZnRTdXBwb3J0ZWQobWV0YU1vZGVsLCBwYXRoKSkge1xuXHRcdFx0cmV0dXJuIFByb2dyYW1taW5nTW9kZWwuRHJhZnQ7XG5cdFx0fSBlbHNlIGlmIChtZXRhTW9kZWwgJiYgTW9kZWxIZWxwZXIuaXNTdGlja3lTZXNzaW9uU3VwcG9ydGVkKG1ldGFNb2RlbCkpIHtcblx0XHRcdHJldHVybiBQcm9ncmFtbWluZ01vZGVsLlN0aWNreTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIFByb2dyYW1taW5nTW9kZWwuTm9uRHJhZnQ7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFZhbGlkYXRlcyBhIGRvY3VtZW50LlxuXHQgKiBAcGFyYW0gb0NvbnRleHQgQ29udGV4dCBvZiB0aGUgZG9jdW1lbnQgdG8gYmUgdmFsaWRhdGVkXG5cdCAqIEBwYXJhbSBbbVBhcmFtZXRlcnNdIENhbiBjb250YWluIHRoZSBmb2xsb3dpbmcgYXR0cmlidXRlczpcblx0ICogQHBhcmFtIFttUGFyYW1ldGVycy5kYXRhXSBBIG1hcCBvZiBkYXRhIHRoYXQgc2hvdWxkIGJlIHZhbGlkYXRlZFxuXHQgKiBAcGFyYW0gW21QYXJhbWV0ZXJzLmN1c3RvbVZhbGlkYXRpb25GdW5jdGlvbl0gQSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBwYXRoIHRvIHRoZSB2YWxpZGF0aW9uIGZ1bmN0aW9uXG5cdCAqIEBwYXJhbSBvVmlldyBDb250YWlucyB0aGUgb2JqZWN0IG9mIHRoZSBjdXJyZW50IHZpZXdcblx0ICogQHJldHVybnMgUHJvbWlzZSByZXNvbHZlcyB3aXRoIHJlc3VsdCBvZiB0aGUgY3VzdG9tIHZhbGlkYXRpb24gZnVuY3Rpb25cblx0ICogQGZpbmFsXG5cdCAqL1xuXHRhc3luYyB2YWxpZGF0ZURvY3VtZW50KFxuXHRcdG9Db250ZXh0OiBPRGF0YVY0Q29udGV4dCxcblx0XHRtUGFyYW1ldGVyczogeyBjdXN0b21WYWxpZGF0aW9uRnVuY3Rpb24/OiBzdHJpbmc7IGRhdGE6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IH0sXG5cdFx0b1ZpZXc6IFZpZXdcblx0KTogUHJvbWlzZTx7IG1lc3NhZ2VUYXJnZXQ/OiBzdHJpbmc7IG1lc3NhZ2VUZXh0OiBzdHJpbmcgfVtdPiB7XG5cdFx0Y29uc3Qgc0N1c3RvbVZhbGlkYXRpb25GdW5jdGlvbiA9IG1QYXJhbWV0ZXJzICYmIG1QYXJhbWV0ZXJzLmN1c3RvbVZhbGlkYXRpb25GdW5jdGlvbjtcblx0XHRpZiAoc0N1c3RvbVZhbGlkYXRpb25GdW5jdGlvbikge1xuXHRcdFx0Y29uc3Qgc01vZHVsZSA9IHNDdXN0b21WYWxpZGF0aW9uRnVuY3Rpb24uc3Vic3RyaW5nKDAsIHNDdXN0b21WYWxpZGF0aW9uRnVuY3Rpb24ubGFzdEluZGV4T2YoXCIuXCIpIHx8IC0xKS5yZXBsYWNlKC9cXC4vZ2ksIFwiL1wiKSxcblx0XHRcdFx0c0Z1bmN0aW9uTmFtZSA9IHNDdXN0b21WYWxpZGF0aW9uRnVuY3Rpb24uc3Vic3RyaW5nKFxuXHRcdFx0XHRcdHNDdXN0b21WYWxpZGF0aW9uRnVuY3Rpb24ubGFzdEluZGV4T2YoXCIuXCIpICsgMSxcblx0XHRcdFx0XHRzQ3VzdG9tVmFsaWRhdGlvbkZ1bmN0aW9uLmxlbmd0aFxuXHRcdFx0XHQpLFxuXHRcdFx0XHRtRGF0YSA9IG1QYXJhbWV0ZXJzLmRhdGE7XG5cdFx0XHRkZWxldGUgbURhdGFbXCJAJHVpNS5jb250ZXh0LmlzVHJhbnNpZW50XCJdO1xuXHRcdFx0cmV0dXJuIEZQTUhlbHBlci52YWxpZGF0aW9uV3JhcHBlcihzTW9kdWxlLCBzRnVuY3Rpb25OYW1lLCBtRGF0YSwgb1ZpZXcsIG9Db250ZXh0KTtcblx0XHR9XG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShbXSk7XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmlldmVzIGRlZmF0dWwgdmFsdWVzIGZyb20gdGhlIERlZmF1bHRWYWx1ZSBmdW5jdGlvbi5cblx0ICogQHBhcmFtIGxpc3RCaW5kaW5nIFRoZSBsaXN0IGJpbmRpbmcgdG8gYmUgdXNlZCBmb3IgY3JlYXRpb25cblx0ICogQHJldHVybnMgQSBwcm9taXNlIHdpdGggYW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIGRlZmF1bHQgdmFsdWVzIChvciB1bmRlZmluZWQgaWYgdGhlcmUncyBubyBkZWZhdWx0IHZhbHVlIGZ1bmN0aW9uKVxuXHQgKi9cblx0cHJpdmF0ZSBhc3luYyBnZXREYXRhRnJvbURlZmF1bHRWYWx1ZUZ1bmN0aW9uKGxpc3RCaW5kaW5nOiBPRGF0YUxpc3RCaW5kaW5nKTogUHJvbWlzZTxvYmplY3QgfCB1bmRlZmluZWQ+IHtcblx0XHRjb25zdCBtb2RlbCA9IGxpc3RCaW5kaW5nLmdldE1vZGVsKCk7XG5cdFx0Y29uc3QgbWV0YU1vZGVsID0gbW9kZWwuZ2V0TWV0YU1vZGVsKCk7XG5cdFx0Y29uc3QgbWV0YUNvbnRleHQgPSBtZXRhTW9kZWwuZ2V0TWV0YUNvbnRleHQobGlzdEJpbmRpbmcuZ2V0UmVzb2x2ZWRQYXRoKCkgYXMgc3RyaW5nKTtcblx0XHRjb25zdCBsaXN0QmluZGluZ09iamVjdFBhdGggPSBNZXRhTW9kZWxDb252ZXJ0ZXIuZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzKG1ldGFDb250ZXh0KTtcblxuXHRcdGNvbnN0IGRlZmF1bHRGdW5jT25UYXJnZXRPYmplY3QgPSAobGlzdEJpbmRpbmdPYmplY3RQYXRoLnRhcmdldE9iamVjdCBhcyBOYXZpZ2F0aW9uUHJvcGVydHkgfCBFbnRpdHlTZXQpLmFubm90YXRpb25zLkNvbW1vblxuXHRcdFx0Py5EZWZhdWx0VmFsdWVzRnVuY3Rpb247XG5cdFx0Y29uc3QgZGVmYXVsdEZ1bmNPblRhcmdldEVudGl0eVNldCA9IChsaXN0QmluZGluZ09iamVjdFBhdGgudGFyZ2V0RW50aXR5U2V0IGFzIEVudGl0eVNldCB8IHVuZGVmaW5lZCk/LmFubm90YXRpb25zLkNvbW1vblxuXHRcdFx0Py5EZWZhdWx0VmFsdWVzRnVuY3Rpb247XG5cdFx0Y29uc3QgZGVmYXVsdEZ1bmN0aW9uTmFtZSA9IGRlZmF1bHRGdW5jT25UYXJnZXRPYmplY3QgPz8gZGVmYXVsdEZ1bmNPblRhcmdldEVudGl0eVNldDtcblxuXHRcdGlmICghZGVmYXVsdEZ1bmN0aW9uTmFtZSkge1xuXHRcdFx0Ly8gTm8gZGVmYXVsdCB2YWx1ZSBmdW5jdGlvblxuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9XG5cblx0XHRjb25zdCBmdW5jdGlvbk9uTmF2UHJvcCA9IGlzTmF2aWdhdGlvblByb3BlcnR5KGxpc3RCaW5kaW5nT2JqZWN0UGF0aC50YXJnZXRPYmplY3QpICYmIGRlZmF1bHRGdW5jT25UYXJnZXRPYmplY3QgIT09IHVuZGVmaW5lZDtcblx0XHRsZXQgZGVmYXVsdEZ1bmN0aW9uQ29udGV4dDtcblx0XHRpZiAoZnVuY3Rpb25Pbk5hdlByb3ApIHtcblx0XHRcdC8vIElmIHRoZSBwYXRoIGlzIGEgZGVlcCBuYXZpZ2F0aW9uLCBkZXJpdmUgdGhlIGNvcnJlY3QgcGFyZW50IGNvbnRleHRcblx0XHRcdGNvbnN0IGJpbmRpbmdQYXRoID0gbGlzdEJpbmRpbmcuZ2V0UGF0aCgpO1xuXHRcdFx0Y29uc3QgY29udGV4dCA9IGxpc3RCaW5kaW5nLmdldENvbnRleHQoKTtcblx0XHRcdGlmIChiaW5kaW5nUGF0aD8uc3RhcnRzV2l0aChcIi9cIikpIHtcblx0XHRcdFx0ZGVmYXVsdEZ1bmN0aW9uQ29udGV4dCA9IGNvbnRleHQ7XG5cdFx0XHR9IGVsc2UgaWYgKGJpbmRpbmdQYXRoICYmIGNvbnRleHQgJiYgYmluZGluZ1BhdGguaW5jbHVkZXMoXCIvXCIpKSB7XG5cdFx0XHRcdC8vIEV4dHJhY3QgdGhlIGZpcnN0IHBhcnQgb2YgdGhlIG5hdmlnYXRpb24gcGF0aCAoZS5nLiwgX1RvSGVhZGVyL19Ub0l0ZW1zIOKGkiBfVG9IZWFkZXIpXG5cdFx0XHRcdGNvbnN0IGZpcnN0TmF2ID0gYmluZGluZ1BhdGguc3BsaXQoXCIvXCIpWzBdO1xuXG5cdFx0XHRcdC8vIEJ1aWxkIHRoZSBmdWxsIHBhdGggdG8gdGhlIGNvcnJlY3QgY29udGV4dCBmb3IgdGhlIGZ1bmN0aW9uIGNhbGxcblx0XHRcdFx0Y29uc3QgcGFyZW50UGF0aCA9IGAke2NvbnRleHQuZ2V0UGF0aCgpfS8ke2ZpcnN0TmF2fWA7XG5cblx0XHRcdFx0Ly8gQ3JlYXRlIGEgbmV3IGJpbmRpbmcgY29udGV4dCBmb3IgdGhpcyBwYXRoXG5cdFx0XHRcdGRlZmF1bHRGdW5jdGlvbkNvbnRleHQgPSBtb2RlbC5iaW5kQ29udGV4dChwYXJlbnRQYXRoKS5nZXRCb3VuZENvbnRleHQoKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdC8vIEZhbGxiYWNrIHRvIHRoZSBjdXJyZW50IGNvbnRleHQgaWYgbm8gbmF2aWdhdGlvbiBmb3VuZFxuXHRcdFx0XHRkZWZhdWx0RnVuY3Rpb25Db250ZXh0ID0gY29udGV4dDtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gSWYgbm90IGEgbmF2aWdhdGlvbiBwcm9wZXJ0eSwgdXNlIHRoZSBoZWFkZXIgY29udGV4dCAocm9vdCBvYmplY3QgcGFnZSBjb250ZXh0KVxuXHRcdFx0ZGVmYXVsdEZ1bmN0aW9uQ29udGV4dCA9IGxpc3RCaW5kaW5nLmdldEhlYWRlckNvbnRleHQoKTtcblx0XHR9XG5cdFx0aWYgKCFkZWZhdWx0RnVuY3Rpb25Db250ZXh0KSB7XG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdH1cblx0XHRjb25zdCBkZWZhdWx0RnVuY3Rpb25QYXRoID0gYCR7bWV0YU1vZGVsLmdldE1ldGFQYXRoKGRlZmF1bHRGdW5jdGlvbkNvbnRleHQuZ2V0UGF0aCgpKX0vJHtkZWZhdWx0RnVuY3Rpb25OYW1lfWA7XG5cblx0XHRjb25zdCBkZWZhdWx0RnVuY3Rpb25PYmplY3RQYXRoID0gTWV0YU1vZGVsQ29udmVydGVyLmdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyhtZXRhTW9kZWwuZ2V0TWV0YUNvbnRleHQoZGVmYXVsdEZ1bmN0aW9uUGF0aCkpO1xuXHRcdGNvbnN0IGRlZmF1bHRGdW5jdGlvblJlc3VsdCA9IChkZWZhdWx0RnVuY3Rpb25PYmplY3RQYXRoLnRhcmdldE9iamVjdCBhcyBBY3Rpb24pPy5pc0JvdW5kXG5cdFx0XHQ/IGF3YWl0IG9wZXJhdGlvbnMuY2FsbEJvdW5kRnVuY3Rpb24oZGVmYXVsdEZ1bmN0aW9uTmFtZS50b1N0cmluZygpLCBkZWZhdWx0RnVuY3Rpb25Db250ZXh0LCBtb2RlbClcblx0XHRcdDogKChhd2FpdCBvcGVyYXRpb25zLmNhbGxGdW5jdGlvbkltcG9ydChkZWZhdWx0RnVuY3Rpb25OYW1lLnRvU3RyaW5nKCksIG1vZGVsKSkgYXMgT0RhdGFWNENvbnRleHQpO1xuXG5cdFx0cmV0dXJuIGRlZmF1bHRGdW5jdGlvblJlc3VsdC5nZXRPYmplY3QoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDaGVja3MgaWYgYSBsaXN0IGJpbmRpbmcgY29ycmVzcG9uZHMgdG8gYSBoaWVyYXJjaHkuXG5cdCAqIEBwYXJhbSBsaXN0QmluZGluZ1xuXHQgKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBsaXN0IGJpbmRpbmcgaXMgaGllcmFyY2hpY2FsLlxuXHQgKi9cblx0aXNMaXN0QmluZGluZ0hpZXJhcmNoaWNhbChsaXN0QmluZGluZzogT0RhdGFMaXN0QmluZGluZyk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiAobGlzdEJpbmRpbmcuZ2V0QWdncmVnYXRpb24oKSBhcyB7IGhpZXJhcmNoeVF1YWxpZmllcj86IHN0cmluZyB9IHwgdW5kZWZpbmVkKT8uaGllcmFyY2h5UXVhbGlmaWVyID8gdHJ1ZSA6IGZhbHNlO1xuXHR9XG5cblx0LyoqXG5cdCAqIENoZWNrcyBpZiB0aGUgZ2l2ZW4gbGlzdCBiaW5kaW5nIGlzIGFuYWx5dGljYWwuXG5cdCAqIEBwYXJhbSBsaXN0QmluZGluZyBUaGUgbGlzdCBiaW5kaW5nIHRvIGNoZWNrXG5cdCAqIEByZXR1cm5zIFRSVUUgaWYgdGhlIGxpc3QgYmluZGluZyBpcyBhbmFseXRpY2FsLCBgZmFsc2VgIG90aGVyd2lzZS5cblx0ICovXG5cdGlzTGlzdEJpbmRpbmdBbmFseXRpY2FsKGxpc3RCaW5kaW5nOiBPRGF0YUxpc3RCaW5kaW5nKTogYm9vbGVhbiB7XG5cdFx0Y29uc3QgYWdncmVnYXRpb24gPSBsaXN0QmluZGluZy5nZXRBZ2dyZWdhdGlvbigpIGFzIHsgaGllcmFyY2h5UXVhbGlmaWVyPzogc3RyaW5nIH0gfCB1bmRlZmluZWQ7XG5cdFx0cmV0dXJuIGFnZ3JlZ2F0aW9uICE9PSB1bmRlZmluZWQgJiYgIWFnZ3JlZ2F0aW9uLmhpZXJhcmNoeVF1YWxpZmllcjtcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIGEgbmV3IGNvbnRleHQgaW4gYSBsaXN0IGJpbmRpbmcuIEhhbmRsZXMgYm90aCBmbGF0IGFuZCBoaWVyYXJjaGljYWwgY2FzZXMuXG5cdCAqIEBwYXJhbSBsaXN0QmluZGluZ1xuXHQgKiBAcGFyYW0gaW5pdGlhbERhdGEgSW5pdGlhbCBkYXRhIHRvIGNyZWF0ZSB0aGUgY29udGV4dC5cblx0ICogQHBhcmFtIG9wdGlvbnMgQ3JlYXRpb24gb3B0aW9ucy5cblx0ICogQHBhcmFtIG9wdGlvbnMuY3JlYXRlQXRFbmQgQ3JlYXRlIHRoZSBjb250ZXh0IGF0IHRoZSBlbmQgb2YgdGhlIGxpc3QgKGlnbm9yZWQgaW4gY2FzZSBvZiBhIGhpZXJhcmNoeSkuXG5cdCAqIEBwYXJhbSBvcHRpb25zLmNyZWF0ZUluYWN0aXZlIENyZWF0ZSB0aGUgY29udGV4dCBhcyBpbmFjdGl2ZSAoaWdub3JlZCBpbiBjYXNlIG9mIGEgaGllcmFyY2h5KS5cblx0ICogQHBhcmFtIG9wdGlvbnMucGFyZW50Q29udGV4dCBDcmVhdGUgdGhlIGNvbnRleHQgYXMgYVx0IGNoaWxkIG9mIHRoaXMgY29udGV4dCAob255IHVzZWQgaW4gY2FzZSBvZiBhIGhpZXJhcmNoeSkuXG5cdCAqIEByZXR1cm5zIFRoZSBjcmVhdGVkIGNvbnRleHQuXG5cdCAqL1xuXHRwcml2YXRlIGFzeW5jIGNyZWF0ZUNvbnRleHQoXG5cdFx0bGlzdEJpbmRpbmc6IE9EYXRhTGlzdEJpbmRpbmcsXG5cdFx0aW5pdGlhbERhdGE6IG9iamVjdCB8IHVuZGVmaW5lZCxcblx0XHRvcHRpb25zOiB7IGNyZWF0ZUF0RW5kPzogYm9vbGVhbjsgY3JlYXRlSW5hY3RpdmU/OiBib29sZWFuOyBwYXJlbnRDb250ZXh0PzogT0RhdGFWNENvbnRleHQgfVxuXHQpOiBQcm9taXNlPE9EYXRhVjRDb250ZXh0PiB7XG5cdFx0Y29uc3QgZGF0YUZvckNyZWF0aW9uID0gaW5pdGlhbERhdGEgPz8ge307XG5cblx0XHRpZiAodGhpcy5pc0xpc3RCaW5kaW5nSGllcmFyY2hpY2FsKGxpc3RCaW5kaW5nKSkge1xuXHRcdFx0bGV0IGxpc3RCaW5kaW5nRm9yQ3JlYXRpb246IE9EYXRhTGlzdEJpbmRpbmc7XG5cdFx0XHRpZiAob3B0aW9ucy5wYXJlbnRDb250ZXh0Py5pc0V4cGFuZGVkKCkgPT09IGZhbHNlKSB7XG5cdFx0XHRcdC8vIElmIHRoZSBwYXJlbnQgY29udGV4dCBhbHJlYWR5IGhhcyBjaGlsZHJlbiBhbmQgaXMgY29sbGFwc2VkLCB3ZSBleHBhbmQgaXQgZmlyc3Rcblx0XHRcdFx0YXdhaXQgbGlzdEJpbmRpbmcuZXhwYW5kKG9wdGlvbnMucGFyZW50Q29udGV4dCk7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChsaXN0QmluZGluZy5pc1JlbGF0aXZlKCkpIHtcblx0XHRcdFx0T2JqZWN0LmFzc2lnbihkYXRhRm9yQ3JlYXRpb24sIHsgXCJAJHVpNS5ub2RlLnBhcmVudFwiOiBvcHRpb25zLnBhcmVudENvbnRleHQgfSk7XG5cdFx0XHRcdGxpc3RCaW5kaW5nRm9yQ3JlYXRpb24gPSBsaXN0QmluZGluZztcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdC8vIEFic29sdXRlIGJpbmRpbmc6IGNyZWF0aW9uIGZyb20gdGhlIExpc3RSZXBvcnRcblx0XHRcdFx0Ly8gV2UgdXNlIGEgdGVtcG9yYXJ5IGZsYXQgbGlzdEJpbmRpbmcgZm9yIHRoZSBjcmVhdGlvbiwgdG8gYXZvaWQgYWRkaW5nIHRoZSBuZXcgY29udGV4dCBpbiB0aGUgdGFibGUgKHdlIGRvbid0IHdhbnQgdG8gZGlzcGxheSBpdCB1bnRpbCBpdCdzIHNhdmVkKVxuXHRcdFx0XHRjb25zdCBtb2RlbCA9IGxpc3RCaW5kaW5nLmdldE1vZGVsKCk7XG5cdFx0XHRcdGNvbnN0IG1ldGFNb2RlbCA9IG1vZGVsLmdldE1ldGFNb2RlbCgpO1xuXHRcdFx0XHRsaXN0QmluZGluZ0ZvckNyZWF0aW9uID0gbW9kZWwuYmluZExpc3QobGlzdEJpbmRpbmcuZ2V0UGF0aCgpLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB7XG5cdFx0XHRcdFx0JCRncm91cElkOiBsaXN0QmluZGluZy5nZXRHcm91cElkKCksXG5cdFx0XHRcdFx0JCR1cGRhdGVHcm91cElkOiBsaXN0QmluZGluZy5nZXRVcGRhdGVHcm91cElkKClcblx0XHRcdFx0fSk7XG5cblx0XHRcdFx0Ly8gQWRkIHRoZSBwYXJlbnQgcGF0aCBpbiB0aGUgaW5pdGlhbCBkYXRhIGlmIGEgcGFyZW50IGlzIHByb3ZpZGVkXG5cdFx0XHRcdGlmIChvcHRpb25zLnBhcmVudENvbnRleHQpIHtcblx0XHRcdFx0XHRjb25zdCBvYmplY3RQYXRoID0gTWV0YU1vZGVsQ29udmVydGVyLmdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyhtZXRhTW9kZWwuZ2V0TWV0YUNvbnRleHQobGlzdEJpbmRpbmcuZ2V0UGF0aCgpKSk7XG5cdFx0XHRcdFx0Y29uc3QgaGllcmFyY2h5UXVhbGlmaWVyID0gKGxpc3RCaW5kaW5nLmdldEFnZ3JlZ2F0aW9uKCkgYXMgeyBoaWVyYXJjaHlRdWFsaWZpZXI6IHN0cmluZyB9KS5oaWVyYXJjaHlRdWFsaWZpZXI7XG5cdFx0XHRcdFx0Y29uc3QgcGFyZW50TmF2aWdhdGlvbiA9XG5cdFx0XHRcdFx0XHRvYmplY3RQYXRoLnRhcmdldEVudGl0eVR5cGUuYW5ub3RhdGlvbnMuQWdncmVnYXRpb24/LltgUmVjdXJzaXZlSGllcmFyY2h5IyR7aGllcmFyY2h5UXVhbGlmaWVyfWBdXG5cdFx0XHRcdFx0XHRcdD8uUGFyZW50TmF2aWdhdGlvblByb3BlcnR5LnZhbHVlO1xuXHRcdFx0XHRcdGlmICghcGFyZW50TmF2aWdhdGlvbikge1xuXHRcdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgZmluZCBwYXJlbnQgbmF2aWdhdGlvbiBwcm9wZXJ0eSBmb3IgJHtsaXN0QmluZGluZy5nZXRQYXRoKCl9YCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGNvbnN0IHBhcmVudEJpbmRpbmdEYXRhOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG5cdFx0XHRcdFx0cGFyZW50QmluZGluZ0RhdGFbYCR7cGFyZW50TmF2aWdhdGlvbn1Ab2RhdGEuYmluZGBdID0gb3B0aW9ucy5wYXJlbnRDb250ZXh0LmdldFBhdGgoKS5yZXBsYWNlKC9eXFwvLywgXCJcIik7IC8vIFJlbW92ZSBsZWFkaW5nIFwiL1wiIGZyb20gdGhlIHBhdGhcblx0XHRcdFx0XHRPYmplY3QuYXNzaWduKGRhdGFGb3JDcmVhdGlvbiwgcGFyZW50QmluZGluZ0RhdGEpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBsaXN0QmluZGluZ0ZvckNyZWF0aW9uLmNyZWF0ZShkYXRhRm9yQ3JlYXRpb24sIHRydWUpO1xuXHRcdH0gZWxzZSBpZiAodGhpcy5pc0xpc3RCaW5kaW5nQW5hbHl0aWNhbChsaXN0QmluZGluZykpIHtcblx0XHRcdGlmIChsaXN0QmluZGluZy5pc1JlbGF0aXZlKCkpIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiQ3JlYXRpbmcgYSBuZXcgZG9jdW1lbnQgaW4gYSBhbmFseXRpY2FsIHRhYmxlIGlzIHN1cHBvcnRlZCBvbmx5IGluIGEgTGlzdFJlcG9ydFwiKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdC8vIFdlIHVzZSBhIHRlbXBvcmFyeSBmbGF0IGxpc3RCaW5kaW5nIGZvciB0aGUgY3JlYXRpb24sIHRvIGF2b2lkIGFkZGluZyB0aGUgbmV3IGNvbnRleHQgaW4gdGhlIHRhYmxlICh3ZSBkb24ndCB3YW50IHRvIGRpc3BsYXkgaXQgdW50aWwgaXQncyBzYXZlZClcblx0XHRcdFx0Y29uc3QgbW9kZWwgPSBsaXN0QmluZGluZy5nZXRNb2RlbCgpO1xuXHRcdFx0XHRjb25zdCBsaXN0QmluZGluZ0ZvckNyZWF0aW9uID0gbW9kZWwuYmluZExpc3QobGlzdEJpbmRpbmcuZ2V0UGF0aCgpLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB7XG5cdFx0XHRcdFx0JCRncm91cElkOiBsaXN0QmluZGluZy5nZXRHcm91cElkKCksXG5cdFx0XHRcdFx0JCR1cGRhdGVHcm91cElkOiBsaXN0QmluZGluZy5nZXRVcGRhdGVHcm91cElkKClcblx0XHRcdFx0fSk7XG5cdFx0XHRcdHJldHVybiBsaXN0QmluZGluZ0ZvckNyZWF0aW9uLmNyZWF0ZShkYXRhRm9yQ3JlYXRpb24sIHRydWUpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gbGlzdEJpbmRpbmcuY3JlYXRlKGRhdGFGb3JDcmVhdGlvbiwgdHJ1ZSwgb3B0aW9ucy5jcmVhdGVBdEVuZCwgb3B0aW9ucy5jcmVhdGVJbmFjdGl2ZSk7XG5cdFx0fVxuXHR9XG5cblx0Z2V0Q3JlYXRpb25QYXJhbWV0ZXJzKGxpc3RCaW5kaW5nOiBPRGF0YUxpc3RCaW5kaW5nLCBjcmVhdGVEYXRhOiBvYmplY3QgfCB1bmRlZmluZWQsIGFwcENvbXBvbmVudDogQXBwQ29tcG9uZW50KTogc3RyaW5nW10ge1xuXHRcdGNvbnN0IG1ldGFNb2RlbCA9IGxpc3RCaW5kaW5nLmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCk7XG5cdFx0Y29uc3QgbWV0YVBhdGggPSBtZXRhTW9kZWwuZ2V0TWV0YVBhdGgobGlzdEJpbmRpbmcuZ2V0SGVhZGVyQ29udGV4dCgpIS5nZXRQYXRoKCkpO1xuXG5cdFx0Y29uc3Qgbm9uQ29tcHV0ZWRWaXNpYmxlRmllbGRzID0gZ2V0Q3JlYXRlUG9wdXBGaWVsZHMobWV0YU1vZGVsLCBtZXRhUGF0aCwgYXBwQ29tcG9uZW50KTtcblx0XHQvLyBEbyBub3QgY29uc2lkZXIgZmllbGRzIGZvciB3aGljaCB3ZSBwcm92aWRlIHNvbWUgaW5pdGlhbCBkYXRhXG5cdFx0cmV0dXJuIG5vbkNvbXB1dGVkVmlzaWJsZUZpZWxkcy5maWx0ZXIoKGZpZWxkTmFtZTogc3RyaW5nKSA9PiB7XG5cdFx0XHRyZXR1cm4gIShmaWVsZE5hbWUgaW4gKGNyZWF0ZURhdGEgPz8ge30pKTtcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIGEgbmV3IGRvY3VtZW50LlxuXHQgKiBAcGFyYW0gbWFpbkxpc3RCaW5kaW5nIE9EYXRhIFY0IExpc3RCaW5kaW5nIG9iamVjdFxuXHQgKiBAcGFyYW0gW2luUGFyYW1ldGVyc10gT3B0aW9uYWwsIGNhbiBjb250YWluIHRoZSBmb2xsb3dpbmcgYXR0cmlidXRlczpcblx0ICogQHBhcmFtIFtpblBhcmFtZXRlcnMuZGF0YV0gQSBtYXAgb2YgZGF0YSB0aGF0IHNob3VsZCBiZSBzZW50IHdpdGhpbiB0aGUgUE9TVFxuXHQgKiBAcGFyYW0gW2luUGFyYW1ldGVycy5idXN5TW9kZV0gR2xvYmFsIChkZWZhdWx0KSwgTG9jYWwsIE5vbmUgVE9ETzogdG8gYmUgcmVmYWN0b3JlZFxuXHQgKiBAcGFyYW0gW2luUGFyYW1ldGVycy5idXN5SWRdIElEIG9mIHRoZSBsb2NhbCBidXN5IGluZGljYXRvclxuXHQgKiBAcGFyYW0gW2luUGFyYW1ldGVycy5rZWVwVHJhbnNpZW50Q29udGV4dE9uRmFpbGVkXSBJZiBzZXQsIHRoZSBjb250ZXh0IHN0YXlzIGluIHRoZSBsaXN0IGlmIHRoZSBQT1NUIGZhaWxlZCBhbmQgUE9TVCB3aWxsIGJlIHJlcGVhdGVkIHdpdGggdGhlIG5leHQgY2hhbmdlXG5cdCAqIEBwYXJhbSBbaW5QYXJhbWV0ZXJzLmluYWN0aXZlXSBJZiBzZXQsIHRoZSBjb250ZXh0IGlzIHNldCBhcyBpbmFjdGl2ZSBmb3IgZW1wdHkgcm93c1xuXHQgKiBAcGFyYW0gW2luUGFyYW1ldGVycy5za2lwUGFyYW1ldGVyRGlhbG9nXSBTa2lwcyB0aGUgYWN0aW9uIHBhcmFtZXRlciBkaWFsb2dcblx0ICogQHBhcmFtIGFwcENvbXBvbmVudCBUaGUgYXBwIGNvbXBvbmVudFxuXHQgKiBAcGFyYW0gcmVzb3VyY2VNb2RlbCBUaGUgcmVzb3VyY2UgbW9kZWxcblx0ICogQHBhcmFtIG1lc3NhZ2VIYW5kbGVyIFRoZSBtZXNzYWdlIGhhbmRsZXIgZXh0ZW5zaW9uXG5cdCAqIEBwYXJhbSBmcm9tQ29weVBhc3RlIFRydWUgaWYgdGhlIGNyZWF0aW9uIGhhcyBiZWVuIHRyaWdnZXJlZCBieSBhIHBhc3RlIGFjdGlvblxuXHQgKiBAcmV0dXJucyBQcm9taXNlIHJlc29sdmVzIHdpdGggbmV3IGJpbmRpbmcgY29udGV4dFxuXHQgKiBAZmluYWxcblx0ICovXG5cdGFzeW5jIGNyZWF0ZURvY3VtZW50KFxuXHRcdG1haW5MaXN0QmluZGluZzogT0RhdGFMaXN0QmluZGluZyxcblx0XHRpblBhcmFtZXRlcnM6IENyZWF0ZVBhcmFtZXRlcnMgfCB1bmRlZmluZWQsXG5cdFx0YXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQsXG5cdFx0cmVzb3VyY2VNb2RlbDogUmVzb3VyY2VNb2RlbCxcblx0XHRtZXNzYWdlSGFuZGxlcjogTWVzc2FnZUhhbmRsZXIsXG5cdFx0ZnJvbUNvcHlQYXN0ZTogYm9vbGVhblxuXHQpOiBQcm9taXNlPE9EYXRhVjRDb250ZXh0PiB7XG5cdFx0bGV0IG5ld0RvY3VtZW50Q29udGV4dDogT0RhdGFWNENvbnRleHQgfCB1bmRlZmluZWQ7XG5cdFx0Y29uc3QgcGFyYW1ldGVycyA9IGdldFBhcmFtZXRlcnMoaW5QYXJhbWV0ZXJzKTtcblx0XHRpZiAoIW1haW5MaXN0QmluZGluZykge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiQmluZGluZyByZXF1aXJlZCBmb3IgbmV3IGRvY3VtZW50IGNyZWF0aW9uXCIpO1xuXHRcdH1cblx0XHRjb25zdCBwcm9ncmFtbWluZ01vZGVsID0gdGhpcy5nZXRQcm9ncmFtbWluZ01vZGVsKG1haW5MaXN0QmluZGluZyk7XG5cdFx0aWYgKHByb2dyYW1taW5nTW9kZWwgIT09IFByb2dyYW1taW5nTW9kZWwuRHJhZnQgJiYgcHJvZ3JhbW1pbmdNb2RlbCAhPT0gUHJvZ3JhbW1pbmdNb2RlbC5TdGlja3kpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIkNyZWF0ZSBkb2N1bWVudCBvbmx5IGFsbG93ZWQgZm9yIGRyYWZ0IG9yIHN0aWNreSBzZXNzaW9uIHN1cHBvcnRlZCBzZXJ2aWNlc1wiKTtcblx0XHR9XG5cdFx0Y29uc3QgYnVzeVBhdGggPSB0aGlzLmdldEJ1c3lQYXRoKHBhcmFtZXRlcnMpO1xuXHRcdHBhcmFtZXRlcnMuYmVmb3JlQ3JlYXRlQ2FsbEJhY2sgPSBmcm9tQ29weVBhc3RlID8gdW5kZWZpbmVkIDogcGFyYW1ldGVycy5iZWZvcmVDcmVhdGVDYWxsQmFjaztcblx0XHRpZiAoIWluUGFyYW1ldGVycz8uaW5hY3RpdmUpIHtcblx0XHRcdHRoaXMuYnVzeUxvY2soYXBwQ29tcG9uZW50LCBidXN5UGF0aCk7XG5cdFx0fVxuXHRcdGNvbnN0IG1lc3NhZ2VIYW5kbGluZ0tleSA9IG1lc3NhZ2VIYW5kbGVyLnJlZ2lzdGVyVG9Ib2xkTWVzc2FnZXMoKTtcblx0XHR0cnkge1xuXHRcdFx0bmV3RG9jdW1lbnRDb250ZXh0ID0gYXdhaXQgdGhpcy5wZXJmb3JtQ3JlYXRpb24oXG5cdFx0XHRcdG1haW5MaXN0QmluZGluZyxcblx0XHRcdFx0cGFyYW1ldGVycyxcblx0XHRcdFx0YXBwQ29tcG9uZW50LFxuXHRcdFx0XHRtZXNzYWdlSGFuZGxlcixcblx0XHRcdFx0cmVzb3VyY2VNb2RlbCxcblx0XHRcdFx0ZnJvbUNvcHlQYXN0ZVxuXHRcdFx0KTtcblx0XHRcdGF3YWl0IG1lc3NhZ2VIYW5kbGVyLnNob3dNZXNzYWdlRGlhbG9nKHsgY29udHJvbDogcGFyYW1ldGVycy5wYXJlbnRDb250cm9sLCB1bkhvbGRLZXk6IG1lc3NhZ2VIYW5kbGluZ0tleSB9KTtcblx0XHRcdHJldHVybiBuZXdEb2N1bWVudENvbnRleHQhO1xuXHRcdH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG5cdFx0XHQvLyBUT0RPOiBjdXJyZW50bHksIHRoZSBvbmx5IGVycm9ycyBoYW5kbGVkIGhlcmUgYXJlIHJhaXNlZCBhcyBzdHJpbmcgLSBzaG91bGQgYmUgY2hhbmdlZCB0byBFcnJvciBvYmplY3RzXG5cdFx0XHRhd2FpdCBtZXNzYWdlSGFuZGxlci5zaG93TWVzc2FnZURpYWxvZyh7IGNvbnRyb2w6IHBhcmFtZXRlcnMucGFyZW50Q29udHJvbCwgdW5Ib2xkS2V5OiBtZXNzYWdlSGFuZGxpbmdLZXkgfSk7XG5cdFx0XHRpZiAoXG5cdFx0XHRcdChlcnJvciA9PT0gRkVMaWJyYXJ5LkNvbnN0YW50cy5BY3Rpb25FeGVjdXRpb25GYWlsZWQgfHwgZXJyb3IgPT09IEZFTGlicmFyeS5Db25zdGFudHMuQ2FuY2VsQWN0aW9uRGlhbG9nKSAmJlxuXHRcdFx0XHRuZXdEb2N1bWVudENvbnRleHQ/LmlzVHJhbnNpZW50KClcblx0XHRcdCkge1xuXHRcdFx0XHQvLyBUaGlzIGlzIGEgd29ya2Fyb3VuZCBzdWdnZXN0ZWQgYnkgbW9kZWwgYXMgQ29udGV4dC5kZWxldGUgcmVzdWx0cyBpbiBhbiBlcnJvclxuXHRcdFx0XHQvLyBUT0RPOiByZW1vdmUgdGhlICRkaXJlY3Qgb25jZSBtb2RlbCByZXNvbHZlcyB0aGlzIGlzc3VlXG5cdFx0XHRcdC8vIHRoaXMgbGluZSBzaG93cyB0aGUgZXhwZWN0ZWQgY29uc29sZSBlcnJvciBVbmNhdWdodCAoaW4gcHJvbWlzZSkgRXJyb3I6IFJlcXVlc3QgY2FuY2VsZWQ6IFBPU1QgVHJhdmVsOyBncm91cDogc3VibWl0TGF0ZXJcblx0XHRcdFx0bmV3RG9jdW1lbnRDb250ZXh0LmRlbGV0ZShcIiRkaXJlY3RcIik7XG5cdFx0XHR9XG5cdFx0XHR0aHJvdyBlcnJvcjtcblx0XHR9IGZpbmFsbHkge1xuXHRcdFx0aWYgKCFpblBhcmFtZXRlcnM/LmluYWN0aXZlKSB7XG5cdFx0XHRcdHRoaXMuYnVzeVVubG9jayhhcHBDb21wb25lbnQsIGJ1c3lQYXRoKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRwcml2YXRlIGdldEJ1c3lQYXRoKG1QYXJhbWV0ZXJzOiBDcmVhdGVQYXJhbWV0ZXJzKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gbVBhcmFtZXRlcnMuYnVzeU1vZGUgPT09IFwiTG9jYWxcIiA/IGAvYnVzeUxvY2FsLyR7bVBhcmFtZXRlcnMuYnVzeUlkfWAgOiBcIi9idXN5XCI7XG5cdH1cblxuXHQvKipcblx0ICogQ3JlYXRlcyBhIG5ldyBkb2N1bWVudC5cblx0ICogQHBhcmFtIG1haW5MaXN0QmluZGluZyBPRGF0YSBWNCBMaXN0QmluZGluZyBvYmplY3QuXG5cdCAqIEBwYXJhbSBwYXJhbWV0ZXJzIENvbnRhaW5zIHRoZSBmb2xsb3dpbmcgYXR0cmlidXRlc1xuXHQgKiBAcGFyYW0gcGFyYW1ldGVycy5kYXRhIEEgbWFwIG9mIGRhdGEgdGhhdCBzaG91bGQgYmUgc2VudCB3aXRoaW4gdGhlIFBPU1Rcblx0ICogQHBhcmFtIHBhcmFtZXRlcnMuYnVzeU1vZGUgR2xvYmFsIChkZWZhdWx0KSwgTG9jYWwsIE5vbmVcblx0ICogQHBhcmFtIHBhcmFtZXRlcnMuYnVzeUlkIElEIG9mIHRoZSBsb2NhbCBidXN5IGluZGljYXRvclxuXHQgKiBAcGFyYW0gcGFyYW1ldGVycy5rZWVwVHJhbnNpZW50Q29udGV4dE9uRmFpbGVkIElmIHNldCwgdGhlIGNvbnRleHQgc3RheXMgaW4gdGhlIGxpc3QgaWYgdGhlIFBPU1QgZmFpbGVkIGFuZCBQT1NUIHdpbGwgYmUgcmVwZWF0ZWQgd2l0aCB0aGUgbmV4dCBjaGFuZ2Vcblx0ICogQHBhcmFtIHBhcmFtZXRlcnMucGFyZW50Q29udHJvbFxuXHQgKiBAcGFyYW0gcGFyYW1ldGVycy5pbmFjdGl2ZSBJZiBzZXQsIHRoZSBjb250ZXh0IGlzIHNldCBhcyBpbmFjdGl2ZSBmb3IgZW1wdHkgcm93c1xuXHQgKiBAcGFyYW0gcGFyYW1ldGVycy5iZWZvcmVDcmVhdGVDYWxsQmFjayBDYWxsYmFjayB0byBiZSBjYWxsZWQgYmVmb3JlIHRoZSBjcmVhdGlvblxuXHQgKiBAcGFyYW0gcGFyYW1ldGVycy5za2lwUGFyYW1ldGVyRGlhbG9nIFNraXBzIHRoZSBhY3Rpb24gcGFyYW1ldGVyIGRpYWxvZ1xuXHQgKiBAcGFyYW0gcGFyYW1ldGVycy5jcmVhdGVBdEVuZCBDcmVhdGUgdGhlIGNvbnRleHQgYXQgdGhlIGVuZCBvZiB0aGUgbGlzdCAoaWdub3JlZCBpbiBjYXNlIG9mIGEgaGllcmFyY2h5KS5cblx0ICogQHBhcmFtIHBhcmFtZXRlcnMuY3JlYXRlSW5hY3RpdmUgQ3JlYXRlIHRoZSBjb250ZXh0IGFzIGluYWN0aXZlIChpZ25vcmVkIGluIGNhc2Ugb2YgYSBoaWVyYXJjaHkpLlxuXHQgKiBAcGFyYW0gcGFyYW1ldGVycy5wYXJlbnRDb250ZXh0IENyZWF0ZSB0aGUgY29udGV4dCBhcyBhIGNoaWxkIG9mIHRoaXMgY29udGV4dCAob25seSB1c2VkIGluIGNhc2Ugb2YgYSBoaWVyYXJjaHkpLlxuXHQgKiBAcmV0dXJucyBQcm9taXNlIHJlc29sdmVzIHdpdGggbmV3IGJpbmRpbmcgY29udGV4dFxuXHQgKi9cblx0cHJpdmF0ZSBhc3luYyBjcmVhdGVEb2N1bWVudENvbnRleHQobWFpbkxpc3RCaW5kaW5nOiBPRGF0YUxpc3RCaW5kaW5nLCBwYXJhbWV0ZXJzOiBDcmVhdGVQYXJhbWV0ZXJzKTogUHJvbWlzZTxPRGF0YVY0Q29udGV4dD4ge1xuXHRcdGlmIChwYXJhbWV0ZXJzLmJlZm9yZUNyZWF0ZUNhbGxCYWNrKSB7XG5cdFx0XHQvL2JlZm9yZUNyZWF0ZUNhbGxCYWNrIGV4cGVjdHMgY3JlYXRlUGFyYW1ldGVycyBvZiB0eXBlIGFueVtdXG5cdFx0XHRjb25zdCBjcmVhdGVQYXJhbWV0ZXJzID0gcGFyYW1ldGVycy5kYXRhID8gT2JqZWN0LmVudHJpZXMocGFyYW1ldGVycy5kYXRhKS5tYXAoKFtrZXksIHZhbHVlXSkgPT4gKHsgW2tleV06IHZhbHVlIH0pKSA6IFtdO1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0YXdhaXQgdG9FUzZQcm9taXNlKFxuXHRcdFx0XHRcdHBhcmFtZXRlcnMuYmVmb3JlQ3JlYXRlQ2FsbEJhY2soe1xuXHRcdFx0XHRcdFx0Y29udGV4dFBhdGg6IG1haW5MaXN0QmluZGluZyAmJiBtYWluTGlzdEJpbmRpbmcuZ2V0UGF0aCgpLFxuXHRcdFx0XHRcdFx0Y3JlYXRlUGFyYW1ldGVyczogY3JlYXRlUGFyYW1ldGVyc1xuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdCk7XG5cdFx0XHR9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuXHRcdFx0XHRMb2cuZXJyb3IoZXJyb3IgYXMgc3RyaW5nKTtcblx0XHRcdFx0dGhyb3cgRkVMaWJyYXJ5LkNvbnN0YW50cy5PbkJlZm9yZUNyZWF0ZUZhaWxlZDtcblx0XHRcdH1cblx0XHRcdHBhcmFtZXRlcnMuZGF0YSA9IGNyZWF0ZVBhcmFtZXRlcnMucmVkdWNlKChyZXN1bHQsIGN1cnJlbnRPYmplY3QpID0+IHtcblx0XHRcdFx0cmV0dXJuIHsgLi4ucmVzdWx0LCAuLi5jdXJyZW50T2JqZWN0IH07XG5cdFx0XHR9LCB7fSk7XG5cdFx0fVxuXHRcdGNvbnN0IGNyZWF0ZVByb21pc2UgPSB0aGlzLmNyZWF0ZUNvbnRleHQobWFpbkxpc3RCaW5kaW5nLCBwYXJhbWV0ZXJzLmRhdGEsIHtcblx0XHRcdGNyZWF0ZUF0RW5kOiAhIXBhcmFtZXRlcnMuY3JlYXRlQXRFbmQsXG5cdFx0XHRjcmVhdGVJbmFjdGl2ZTogISFwYXJhbWV0ZXJzLmluYWN0aXZlLFxuXHRcdFx0cGFyZW50Q29udGV4dDogcGFyYW1ldGVycy5wYXJlbnRDb250ZXh0XG5cdFx0fSk7XG5cdFx0aWYgKG1haW5MaXN0QmluZGluZy5nZXRVcGRhdGVHcm91cElkKCkgPT09IENvbW1vblV0aWxzLklOTElORUVESVRfVVBEQVRFR1JPVVBJRCkge1xuXHRcdFx0bWFpbkxpc3RCaW5kaW5nLmdldE1vZGVsKCkuc3VibWl0QmF0Y2goQ29tbW9uVXRpbHMuSU5MSU5FRURJVF9VUERBVEVHUk9VUElEKTtcblx0XHR9XG5cdFx0cmV0dXJuIGNyZWF0ZVByb21pc2U7XG5cdH1cblxuXHQvKipcblx0ICogQ3JlYXRlcyBhIG5ldyBkb2N1bWVudCBlaXRoZXIgdmlhIG5ldyBBY3Rpb24gb3Igc3RhbmRhcmQgUE9TVCBjcmVhdGUuXG5cdCAqIEBwYXJhbSBtYWluTGlzdEJpbmRpbmcgT0RhdGEgVjQgTGlzdEJpbmRpbmcgb2JqZWN0XG5cdCAqIEBwYXJhbSBwYXJhbWV0ZXJzIENvbnRhaW5zIHRoZSBmb2xsb3dpbmcgYXR0cmlidXRlc1xuXHQgKiBAcGFyYW0gcGFyYW1ldGVycy5kYXRhIEEgbWFwIG9mIGRhdGEgdGhhdCBzaG91bGQgYmUgc2VudCB3aXRoaW4gdGhlIFBPU1Rcblx0ICogQHBhcmFtIHBhcmFtZXRlcnMuYnVzeU1vZGUgR2xvYmFsIChkZWZhdWx0KSwgTG9jYWwsIE5vbmVcblx0ICogQHBhcmFtIHBhcmFtZXRlcnMuYnVzeUlkIElEIG9mIHRoZSBsb2NhbCBidXN5IGluZGljYXRvclxuXHQgKiBAcGFyYW0gcGFyYW1ldGVycy5rZWVwVHJhbnNpZW50Q29udGV4dE9uRmFpbGVkIElmIHNldCwgdGhlIGNvbnRleHQgc3RheXMgaW4gdGhlIGxpc3QgaWYgdGhlIFBPU1QgZmFpbGVkIGFuZCBQT1NUIHdpbGwgYmUgcmVwZWF0ZWQgd2l0aCB0aGUgbmV4dCBjaGFuZ2Vcblx0ICogQHBhcmFtIHBhcmFtZXRlcnMucGFyZW50Q29udHJvbFxuXHQgKiBAcGFyYW0gcGFyYW1ldGVycy5pbmFjdGl2ZSBJZiBzZXQsIHRoZSBjb250ZXh0IGlzIHNldCBhcyBpbmFjdGl2ZSBmb3IgZW1wdHkgcm93c1xuXHQgKiBAcGFyYW0gcGFyYW1ldGVycy5iZWZvcmVDcmVhdGVDYWxsQmFjayBDYWxsYmFjayB0byBiZSBjYWxsZWQgYmVmb3JlIHRoZSBjcmVhdGlvblxuXHQgKiBAcGFyYW0gcGFyYW1ldGVycy5za2lwUGFyYW1ldGVyRGlhbG9nIFNraXBzIHRoZSBhY3Rpb24gcGFyYW1ldGVyIGRpYWxvZ1xuXHQgKiBAcGFyYW0gcGFyYW1ldGVycy5jcmVhdGVBdEVuZCBDcmVhdGUgdGhlIGNvbnRleHQgYXQgdGhlIGVuZCBvZiB0aGUgbGlzdCAoaWdub3JlZCBpbiBjYXNlIG9mIGEgaGllcmFyY2h5KS5cblx0ICogQHBhcmFtIHBhcmFtZXRlcnMuY3JlYXRlSW5hY3RpdmUgQ3JlYXRlIHRoZSBjb250ZXh0IGFzIGluYWN0aXZlIChpZ25vcmVkIGluIGNhc2Ugb2YgYSBoaWVyYXJjaHkpLlxuXHQgKiBAcGFyYW0gcGFyYW1ldGVycy5wYXJlbnRDb250ZXh0IENyZWF0ZSB0aGUgY29udGV4dCBhcyBhIGNoaWxkIG9mIHRoaXMgY29udGV4dCAob25seSB1c2VkIGluIGNhc2Ugb2YgYSBoaWVyYXJjaHkpLlxuXHQgKiBAcGFyYW0gYXBwQ29tcG9uZW50IFRoZSBhcHAgY29tcG9uZW50XG5cdCAqIEBwYXJhbSBtZXNzYWdlSGFuZGxlciBUaGUgbWVzc2FnZSBoYW5kbGVyIGV4dGVuc2lvblxuXHQgKiBAcGFyYW0gcmVzb3VyY2VNb2RlbFxuXHQgKiBAcGFyYW0gZnJvbUNvcHlQYXN0ZSBUcnVlIGlmIHRoZSBjcmVhdGlvbiBoYXMgYmVlbiB0cmlnZ2VyZWQgYnkgYSBwYXN0ZSBhY3Rpb25cblx0ICogQHJldHVybnMgUHJvbWlzZSByZXNvbHZlcyB3aXRoIG5ldyBiaW5kaW5nIGNvbnRleHRcblx0ICovXG5cdHByaXZhdGUgYXN5bmMgcGVyZm9ybUNyZWF0aW9uKFxuXHRcdG1haW5MaXN0QmluZGluZzogT0RhdGFMaXN0QmluZGluZyxcblx0XHRwYXJhbWV0ZXJzOiBDcmVhdGVQYXJhbWV0ZXJzLFxuXHRcdGFwcENvbXBvbmVudDogQXBwQ29tcG9uZW50LFxuXHRcdG1lc3NhZ2VIYW5kbGVyOiBNZXNzYWdlSGFuZGxlcixcblx0XHRyZXNvdXJjZU1vZGVsOiBSZXNvdXJjZU1vZGVsLFxuXHRcdGZyb21Db3B5UGFzdGU6IGJvb2xlYW5cblx0KTogUHJvbWlzZTxPRGF0YVY0Q29udGV4dCB8IHVuZGVmaW5lZD4ge1xuXHRcdGNvbnN0IG1ldGFNb2RlbCA9IG1haW5MaXN0QmluZGluZy5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpO1xuXHRcdGNvbnN0IG1ldGFQYXRoID0gbWV0YU1vZGVsLmdldE1ldGFQYXRoKG1haW5MaXN0QmluZGluZy5nZXRIZWFkZXJDb250ZXh0KCkhLmdldFBhdGgoKSk7XG5cdFx0Y29uc3QgY3JlYXRlSGFzaCA9IGFwcENvbXBvbmVudC5nZXRSb3V0ZXJQcm94eSgpLmdldEhhc2goKTtcblx0XHRjb25zdCBjb21wb25lbnREYXRhID0gYXBwQ29tcG9uZW50LmdldENvbXBvbmVudERhdGEoKTtcblx0XHRjb25zdCBzdGFydHVwUGFyYW1ldGVycyA9IGNvbXBvbmVudERhdGE/LnN0YXJ0dXBQYXJhbWV0ZXJzID8/IHt9O1xuXHRcdGNvbnN0IG5ld0FjdGlvbiA9ICFtYWluTGlzdEJpbmRpbmcuaXNSZWxhdGl2ZSgpXG5cdFx0XHQ/IHRoaXMuX2dldE5ld0FjdGlvbihzdGFydHVwUGFyYW1ldGVycywgY3JlYXRlSGFzaCwgbWV0YU1vZGVsLCBtZXRhUGF0aClcblx0XHRcdDogdW5kZWZpbmVkO1xuXG5cdFx0aWYgKG5ld0FjdGlvbikge1xuXHRcdFx0Y29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5wZXJmb3JtQ3JlYXRpb25XaXRoQWN0aW9uKFxuXHRcdFx0XHRuZXdBY3Rpb24sXG5cdFx0XHRcdG1haW5MaXN0QmluZGluZyxcblx0XHRcdFx0cGFyYW1ldGVycyxcblx0XHRcdFx0YXBwQ29tcG9uZW50LFxuXHRcdFx0XHRyZXNvdXJjZU1vZGVsLFxuXHRcdFx0XHRtZXNzYWdlSGFuZGxlclxuXHRcdFx0KTtcblx0XHRcdGlmIChyZXN1bHQuc3RhdHVzID09PSBcInJlamVjdGVkXCIpIHtcblx0XHRcdFx0dGhyb3cgcmVzdWx0LnJlYXNvbjtcblx0XHRcdH1cblx0XHRcdHJldHVybiByZXN1bHQudmFsdWUucmV0dXJuZWRDb250ZXh0O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5wZXJmb3JtQ3JlYXRpb25XaXRoUE9TVChtYWluTGlzdEJpbmRpbmcsIHBhcmFtZXRlcnMsIGFwcENvbXBvbmVudCwgcmVzb3VyY2VNb2RlbCwgbWVzc2FnZUhhbmRsZXIsIGZyb21Db3B5UGFzdGUpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIGEgZG9jdW1lbnQgd2l0aCBhbiBhY3Rpb24uXG5cdCAqIEBwYXJhbSBhY3Rpb25OYW1lXG5cdCAqIEBwYXJhbSBtYWluTGlzdEJpbmRpbmdcblx0ICogQHBhcmFtIHBhcmFtZXRlcnNcblx0ICogQHBhcmFtIGFwcENvbXBvbmVudFxuXHQgKiBAcGFyYW0gcmVzb3VyY2VNb2RlbFxuXHQgKiBAcGFyYW0gbWVzc2FnZUhhbmRsZXJcblx0ICogQHJldHVybnMgVGhlIGNyZWF0ZWQgY29udGV4dC5cblx0ICovXG5cdHByaXZhdGUgYXN5bmMgcGVyZm9ybUNyZWF0aW9uV2l0aEFjdGlvbihcblx0XHRhY3Rpb25OYW1lOiBzdHJpbmcsXG5cdFx0bWFpbkxpc3RCaW5kaW5nOiBPRGF0YUxpc3RCaW5kaW5nLFxuXHRcdHBhcmFtZXRlcnM6IENyZWF0ZVBhcmFtZXRlcnMsXG5cdFx0YXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQsXG5cdFx0cmVzb3VyY2VNb2RlbDogUmVzb3VyY2VNb2RlbCxcblx0XHRtZXNzYWdlSGFuZGxlcjogTWVzc2FnZUhhbmRsZXJcblx0KTogUHJvbWlzZTxQcm9taXNlU2V0dGxlZFJlc3VsdDxPcGVyYXRpb25SZXN1bHQ+PiB7XG5cdFx0Y29uc3QgaGVhZGVyQ29udGV4dFBhdGggPSBtYWluTGlzdEJpbmRpbmcuZ2V0SGVhZGVyQ29udGV4dCgpIS5nZXRQYXRoKCk7XG5cdFx0Y29uc3QgbWV0YU1vZGVsID0gbWFpbkxpc3RCaW5kaW5nLmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCk7XG5cdFx0Y29uc3QgbWV0YVBhdGggPSBtZXRhTW9kZWwuZ2V0TWV0YVBhdGgoaGVhZGVyQ29udGV4dFBhdGgpO1xuXHRcdGNvbnN0IG1lc3NhZ2VzUGF0aCA9IE1vZGVsSGVscGVyLmdldE1lc3NhZ2VzUGF0aChtZXRhTW9kZWwsIG1ldGFQYXRoKTtcblx0XHRjb25zdCBiaW5kaW5nUGFyYW1ldGVyczogQmluZENvbnRleHRQYXJhbWV0ZXJzID0geyAkJHBhdGNoV2l0aG91dFNpZGVFZmZlY3RzOiB0cnVlLCAkJHVwZGF0ZUdyb3VwSWQ6IFwiJGF1dG9cIiB9O1xuXG5cdFx0Y29uc3Qgc2VsZWN0ZWRQcm9wZXJ0aWVzOiBzdHJpbmdbXSA9IFtdO1xuXHRcdGlmIChtZXNzYWdlc1BhdGgpIHtcblx0XHRcdHNlbGVjdGVkUHJvcGVydGllcy5wdXNoKG1lc3NhZ2VzUGF0aCk7XG5cdFx0fVxuXHRcdGlmICh0aGlzLmdldFByb2dyYW1taW5nTW9kZWwobWFpbkxpc3RCaW5kaW5nKSA9PT0gUHJvZ3JhbW1pbmdNb2RlbC5EcmFmdCkge1xuXHRcdFx0c2VsZWN0ZWRQcm9wZXJ0aWVzLnB1c2goXCJJc0FjdGl2ZUVudGl0eVwiLCBcIkhhc0RyYWZ0RW50aXR5XCIsIFwiSGFzQWN0aXZlRW50aXR5XCIpOyAvLyBOZWVkZWQgZm9yIG91ciBpbnRlcm5hbCBsb2dpYyAoZS5nLiBuYXZpZ2F0aW9uKVxuXHRcdH1cblx0XHRpZiAoc2VsZWN0ZWRQcm9wZXJ0aWVzLmxlbmd0aCA+IDApIHtcblx0XHRcdGJpbmRpbmdQYXJhbWV0ZXJzW1wiJHNlbGVjdFwiXSA9IHNlbGVjdGVkUHJvcGVydGllcy5qb2luKFwiLFwiKTtcblx0XHR9XG5cdFx0Y29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5jYWxsQWN0aW9uKFxuXHRcdFx0YWN0aW9uTmFtZSxcblx0XHRcdHtcblx0XHRcdFx0Y29udGV4dHM6IG1haW5MaXN0QmluZGluZy5nZXRIZWFkZXJDb250ZXh0KCksXG5cdFx0XHRcdHNob3dBY3Rpb25QYXJhbWV0ZXJEaWFsb2c6IHRydWUsXG5cdFx0XHRcdGxhYmVsOiB0aGlzLl9nZXRTcGVjaWZpY0NyZWF0ZUFjdGlvbkRpYWxvZ0xhYmVsKG1ldGFNb2RlbCwgbWV0YVBhdGgsIGFjdGlvbk5hbWUsIHJlc291cmNlTW9kZWwpLFxuXHRcdFx0XHRiaW5kaW5nUGFyYW1ldGVyczogYmluZGluZ1BhcmFtZXRlcnMsXG5cdFx0XHRcdHZpZXc6IHBhcmFtZXRlcnMucGFyZW50Q29udHJvbCxcblx0XHRcdFx0aXNDcmVhdGVBY3Rpb246IHRydWUsXG5cdFx0XHRcdHNraXBQYXJhbWV0ZXJEaWFsb2c6IHBhcmFtZXRlcnMuc2tpcFBhcmFtZXRlckRpYWxvZ1xuXHRcdFx0fSxcblx0XHRcdGFwcENvbXBvbmVudCxcblx0XHRcdG1lc3NhZ2VIYW5kbGVyXG5cdFx0KTtcblx0XHRyZXR1cm4gcmVzdWx0WzBdO1xuXHR9XG5cblx0LyoqXG5cdCAqIENyZWF0ZXMgYSBkb2N1ZW1udCB3aXRoIGEgc3RhbmRhcmQgUE9TVCByZXF1ZXN0LlxuXHQgKiBAcGFyYW0gbWFpbkxpc3RCaW5kaW5nXG5cdCAqIEBwYXJhbSBwYXJhbWV0ZXJzXG5cdCAqIEBwYXJhbSBhcHBDb21wb25lbnRcblx0ICogQHBhcmFtIHJlc291cmNlTW9kZWxcblx0ICogQHBhcmFtIG1lc3NhZ2VIYW5kbGVyXG5cdCAqIEBwYXJhbSBmcm9tQ29weVBhc3RlXG5cdCAqIEByZXR1cm5zIFRoZSBjcmVhdGVkIGNvbnRleHQuXG5cdCAqL1xuXHRwcml2YXRlIGFzeW5jIHBlcmZvcm1DcmVhdGlvbldpdGhQT1NUKFxuXHRcdG1haW5MaXN0QmluZGluZzogT0RhdGFMaXN0QmluZGluZyxcblx0XHRwYXJhbWV0ZXJzOiBDcmVhdGVQYXJhbWV0ZXJzLFxuXHRcdGFwcENvbXBvbmVudDogQXBwQ29tcG9uZW50LFxuXHRcdHJlc291cmNlTW9kZWw6IFJlc291cmNlTW9kZWwsXG5cdFx0bWVzc2FnZUhhbmRsZXI6IE1lc3NhZ2VIYW5kbGVyLFxuXHRcdGZyb21Db3B5UGFzdGU6IGJvb2xlYW5cblx0KTogUHJvbWlzZTxPRGF0YVY0Q29udGV4dCB8IHVuZGVmaW5lZD4ge1xuXHRcdHRyeSB7XG5cdFx0XHRsZXQgbmV3RG9jdW1lbnRDb250ZXh0OiBPRGF0YVY0Q29udGV4dCB8IHVuZGVmaW5lZDtcblx0XHRcdGNvbnN0IGluaXRpYWxEYXRhID0gcGFyYW1ldGVycy5kYXRhO1xuXHRcdFx0aWYgKCFmcm9tQ29weVBhc3RlKSB7XG5cdFx0XHRcdGNvbnN0IGRlZmF1bHRWYWx1ZUZ1bmN0aW9uRGF0YSA9IGF3YWl0IHRoaXMuZ2V0RGF0YUZyb21EZWZhdWx0VmFsdWVGdW5jdGlvbihtYWluTGlzdEJpbmRpbmcpO1xuXHRcdFx0XHRwYXJhbWV0ZXJzLmRhdGEgPSBPYmplY3QuYXNzaWduKHt9LCBkZWZhdWx0VmFsdWVGdW5jdGlvbkRhdGEsIHBhcmFtZXRlcnMuZGF0YSk7XG5cdFx0XHR9XG5cdFx0XHRpZiAocGFyYW1ldGVycy5kYXRhKSB7XG5cdFx0XHRcdGRlbGV0ZSBwYXJhbWV0ZXJzLmRhdGFbXCJAb2RhdGEuY29udGV4dFwiXTtcblx0XHRcdH1cblxuXHRcdFx0Y29uc3QgY2FuSGF2ZURpYWxvZyA9IHBhcmFtZXRlcnMuY3JlYXRpb25Nb2RlICE9PSBDcmVhdGlvbk1vZGUuQ3JlYXRpb25Sb3cgJiYgcGFyYW1ldGVycy5jcmVhdGlvbk1vZGUgIT09IENyZWF0aW9uTW9kZS5JbmxpbmU7XG5cdFx0XHRjb25zdCBjcmVhdGlvbkRpYWxvZ0ZpZWxkcyA9IGNhbkhhdmVEaWFsb2cgPyB0aGlzLmdldENyZWF0aW9uUGFyYW1ldGVycyhtYWluTGlzdEJpbmRpbmcsIGluaXRpYWxEYXRhLCBhcHBDb21wb25lbnQpIDogW107XG5cdFx0XHRpZiAocGFyYW1ldGVycy5jcmVhdGlvbk1vZGUgPT09IENyZWF0aW9uTW9kZS5DcmVhdGlvbkRpYWxvZykge1xuXHRcdFx0XHRwYXJhbWV0ZXJzLmNyZWF0aW9uRGlhbG9nRmllbGRzPy5mb3JFYWNoKChmaWVsZE5hbWUpID0+IHtcblx0XHRcdFx0XHRpZiAoIWNyZWF0aW9uRGlhbG9nRmllbGRzLmluY2x1ZGVzKGZpZWxkTmFtZSkpIHtcblx0XHRcdFx0XHRcdGNyZWF0aW9uRGlhbG9nRmllbGRzLnB1c2goZmllbGROYW1lKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXG5cdFx0XHRcdGlmIChjcmVhdGlvbkRpYWxvZ0ZpZWxkcy5sZW5ndGggPT09IDApIHtcblx0XHRcdFx0XHQvLyBJbiBDcmVhdGlvbkRpYWxvZyBtb2RlLCB0aGUgZGlhbG9nIGlzIG1hbmRhdG9yeVxuXHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcihcIk5vIGZpZWxkcyBhdmFpbGFibGUgZm9yIHRoZSBjcmVhdGlvbiBkaWFsb2dcIik7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0aWYgKGNyZWF0aW9uRGlhbG9nRmllbGRzLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0bmV3RG9jdW1lbnRDb250ZXh0ID0gYXdhaXQgdGhpcy5jcmVhdGVXaXRoRGlhbG9nKFxuXHRcdFx0XHRcdG1haW5MaXN0QmluZGluZyxcblx0XHRcdFx0XHRjcmVhdGlvbkRpYWxvZ0ZpZWxkcyxcblx0XHRcdFx0XHRwYXJhbWV0ZXJzLFxuXHRcdFx0XHRcdGFwcENvbXBvbmVudCxcblx0XHRcdFx0XHRyZXNvdXJjZU1vZGVsLFxuXHRcdFx0XHRcdG1lc3NhZ2VIYW5kbGVyXG5cdFx0XHRcdCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRuZXdEb2N1bWVudENvbnRleHQgPSBhd2FpdCB0aGlzLmNyZWF0ZURvY3VtZW50Q29udGV4dChtYWluTGlzdEJpbmRpbmcsIHBhcmFtZXRlcnMpO1xuXHRcdFx0XHRpZiAoIXBhcmFtZXRlcnMuaW5hY3RpdmUpIHtcblx0XHRcdFx0XHRhd2FpdCB0aGlzLndhaXRGb3JDcmVhdGVDb21wbGV0aW9uKG5ld0RvY3VtZW50Q29udGV4dCwgcGFyYW1ldGVycy5rZWVwVHJhbnNpZW50Q29udGV4dE9uRmFpbGVkID09PSB0cnVlKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIG5ld0RvY3VtZW50Q29udGV4dDtcblx0XHR9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuXHRcdFx0Y29uc3QgbXNnID0gKGVycm9yIGFzIEVycm9yKS5tZXNzYWdlID8/IGVycm9yO1xuXHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgY3JlYXRpbmcgdGhlIG5ldyBkb2N1bWVudFwiLCBtc2cpO1xuXHRcdFx0dGhyb3cgbXNnO1xuXHRcdH1cblx0fVxuXG5cdF9pc0RyYWZ0RW5hYmxlZCh2Q29udGV4dHM6IE9EYXRhVjRDb250ZXh0W10pOiBib29sZWFuIHtcblx0XHRjb25zdCBjb250ZXh0Rm9yRHJhZnRNb2RlbCA9IHZDb250ZXh0c1swXTtcblx0XHRjb25zdCBzUHJvZ3JhbW1pbmdNb2RlbCA9IHRoaXMuZ2V0UHJvZ3JhbW1pbmdNb2RlbChjb250ZXh0Rm9yRHJhZnRNb2RlbCk7XG5cdFx0cmV0dXJuIHNQcm9ncmFtbWluZ01vZGVsID09PSBQcm9ncmFtbWluZ01vZGVsLkRyYWZ0O1xuXHR9XG5cblx0LyoqXG5cdCAqIERlbGV0ZSBvbmUgb3IgbXVsdGlwbGUgZG9jdW1lbnQocykuXG5cdCAqIEBwYXJhbSBjb250ZXh0cyBDb250ZXh0cyBFaXRoZXIgb25lIGNvbnRleHQgb3IgYW4gYXJyYXkgd2l0aCBjb250ZXh0cyB0byBiZSBkZWxldGVkXG5cdCAqIEBwYXJhbSBtUGFyYW1ldGVycyBPcHRpb25hbCwgY2FuIGNvbnRhaW4gdGhlIGZvbGxvd2luZyBhdHRyaWJ1dGVzOlxuXHQgKiBAcGFyYW0gbVBhcmFtZXRlcnMudGl0bGUgVGl0bGUgb2YgdGhlIG9iamVjdCB0byBiZSBkZWxldGVkXG5cdCAqIEBwYXJhbSBtUGFyYW1ldGVycy5kZXNjcmlwdGlvbiBEZXNjcmlwdGlvbiBvZiB0aGUgb2JqZWN0IHRvIGJlIGRlbGV0ZWRcblx0ICogQHBhcmFtIG1QYXJhbWV0ZXJzLm51bWJlck9mU2VsZWN0ZWRDb250ZXh0cyBOdW1iZXIgb2Ygb2JqZWN0cyBzZWxlY3RlZFxuXHQgKiBAcGFyYW0gbVBhcmFtZXRlcnMubm9EaWFsb2cgVG8gZGlzYWJsZSB0aGUgY29uZmlybWF0aW9uIGRpYWxvZ1xuXHQgKiBAcGFyYW0gYXBwQ29tcG9uZW50IFRoZSBhcHBDb21wb25lbnRcblx0ICogQHBhcmFtIHJlc291cmNlTW9kZWwgVGhlIHJlc291cmNlIG1vZGVsIHRvIGxvYWQgdGV4dCByZXNvdXJjZXNcblx0ICogQHBhcmFtIG1lc3NhZ2VIYW5kbGVyIFRoZSBtZXNzYWdlIGhhbmRsZXIgZXh0ZW5zaW9uXG5cdCAqIEByZXR1cm5zIEEgUHJvbWlzZSByZXNvbHZlZCBvbmNlIHRoZSBkb2N1bWVudHMgYXJlIGRlbGV0ZWRcblx0ICovXG5cdGFzeW5jIGRlbGV0ZURvY3VtZW50KFxuXHRcdGNvbnRleHRzOiBPRGF0YVY0Q29udGV4dCB8IE9EYXRhVjRDb250ZXh0W10sXG5cdFx0bVBhcmFtZXRlcnM6IFRyYW5zYWN0aW9uRGVsZXRlUGFyYW1ldGVycyxcblx0XHRhcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudCxcblx0XHRyZXNvdXJjZU1vZGVsOiBSZXNvdXJjZU1vZGVsLFxuXHRcdG1lc3NhZ2VIYW5kbGVyOiBNZXNzYWdlSGFuZGxlclxuXHQpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHQvLyBkZWxldGUgZG9jdW1lbnQgbG9ja1xuXHRcdHRoaXMuYnVzeUxvY2soYXBwQ29tcG9uZW50KTtcblxuXHRcdGNvbnN0IGNvbnRleHRzVG9EZWxldGUgPSBBcnJheS5pc0FycmF5KGNvbnRleHRzKSA/IFsuLi5jb250ZXh0c10gOiBbY29udGV4dHNdO1xuXHRcdGNvbnN0IGZpcnN0Q29udGV4dCA9IChtUGFyYW1ldGVycy5zZWxlY3RlZENvbnRleHRzID8/IGNvbnRleHRzVG9EZWxldGUpWzBdO1xuXG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdGNvbnN0IGRyYWZ0RW5hYmxlZCA9IHRoaXMuX2lzRHJhZnRFbmFibGVkKG1QYXJhbWV0ZXJzLnNlbGVjdGVkQ29udGV4dHMgfHwgY29udGV4dHNUb0RlbGV0ZSk7XG5cdFx0XHRcdGNvbnN0IGl0ZW1zOiBDb250cm9sW10gPSBbXTtcblx0XHRcdFx0bGV0IG9wdGlvbnM6IERlbGV0ZU9wdGlvbltdID0gW107XG5cdFx0XHRcdGxldCB1blNhdmVkQ29udGV4dDogQ29udGV4dCB8IHVuZGVmaW5lZDtcblx0XHRcdFx0Ly8gaXRlbXModGV4dHMpIGFuZCBvcHRpb25zKGNoZWNrQm94ZXMgYW5kIHNpbmdsZSBkZWZhdWx0IG9wdGlvbikgZm9yIGNvbmZpcm0gZGlhbG9nLlxuXHRcdFx0XHRpZiAobVBhcmFtZXRlcnMpIHtcblx0XHRcdFx0XHRtUGFyYW1ldGVycyA9IGdldFBhcmFtZXRlcnMobVBhcmFtZXRlcnMpO1xuXHRcdFx0XHRcdG1QYXJhbWV0ZXJzLmVudGl0eVNldE5hbWUgPSB0aGlzLmdldENvbGxlY3Rpb25OYW1lRnJvbUNvbnRleHQoZmlyc3RDb250ZXh0KTtcblx0XHRcdFx0XHRpZiAoIW1QYXJhbWV0ZXJzLm51bWJlck9mU2VsZWN0ZWRDb250ZXh0cykge1xuXHRcdFx0XHRcdFx0Ly8gbm9uLVRhYmxlXG5cdFx0XHRcdFx0XHRpZiAoZHJhZnRFbmFibGVkKSB7XG5cdFx0XHRcdFx0XHRcdC8vIENoZWNrIGlmIDEgb2YgdGhlIGRyYWZ0cyBpcyBsb2NrZWQgYnkgYW5vdGhlciB1c2VyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IGxvY2tlZENvbnRleHQgPSBjb250ZXh0c1RvRGVsZXRlLmZpbmQoKGNvbnRleHQpID0+IHtcblx0XHRcdFx0XHRcdFx0XHRjb25zdCBjb250ZXh0RGF0YSA9IGNvbnRleHQuZ2V0T2JqZWN0KCk7XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdFx0XHRcdGNvbnRleHREYXRhLklzQWN0aXZlRW50aXR5ID09PSB0cnVlICYmXG5cdFx0XHRcdFx0XHRcdFx0XHRjb250ZXh0RGF0YS5IYXNEcmFmdEVudGl0eSA9PT0gdHJ1ZSAmJlxuXHRcdFx0XHRcdFx0XHRcdFx0Y29udGV4dERhdGEuRHJhZnRBZG1pbmlzdHJhdGl2ZURhdGEgJiZcblx0XHRcdFx0XHRcdFx0XHRcdGNvbnRleHREYXRhLkRyYWZ0QWRtaW5pc3RyYXRpdmVEYXRhLkluUHJvY2Vzc0J5VXNlciAmJlxuXHRcdFx0XHRcdFx0XHRcdFx0IWNvbnRleHREYXRhLkRyYWZ0QWRtaW5pc3RyYXRpdmVEYXRhLkRyYWZ0SXNDcmVhdGVkQnlNZVxuXHRcdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHRpZiAobG9ja2VkQ29udGV4dCkge1xuXHRcdFx0XHRcdFx0XHRcdC8vIFNob3cgbWVzc2FnZSBib3ggd2l0aCB0aGUgbmFtZSBvZiB0aGUgbG9ja2luZyB1c2VyIGFuZCByZXR1cm5cblx0XHRcdFx0XHRcdFx0XHRjb25zdCBsb2NraW5nVXNlck5hbWUgPSBsb2NrZWRDb250ZXh0LmdldE9iamVjdCgpLkRyYWZ0QWRtaW5pc3RyYXRpdmVEYXRhLkluUHJvY2Vzc0J5VXNlcjtcblx0XHRcdFx0XHRcdFx0XHRNZXNzYWdlQm94LnNob3coXG5cdFx0XHRcdFx0XHRcdFx0XHRyZXNvdXJjZU1vZGVsLmdldFRleHQoXCJDX1RSQU5TQUNUSU9OX0hFTFBFUl9DT05GSVJNX0RFTEVURV9XSVRIX1NJTkdMRV9PQkpFQ1RfTE9DS0VEXCIsIFtcblx0XHRcdFx0XHRcdFx0XHRcdFx0bG9ja2luZ1VzZXJOYW1lXG5cdFx0XHRcdFx0XHRcdFx0XHRdKSxcblx0XHRcdFx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dGl0bGU6IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfQ09NTU9OX0RFTEVURVwiKSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0b25DbG9zZTogcmVqZWN0XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0dW5TYXZlZENvbnRleHQgPSBjb250ZXh0c1RvRGVsZXRlLmZpbmQoKGNvbnRleHQpID0+IHtcblx0XHRcdFx0XHRcdFx0XHRcdGNvbnN0IHsgSXNBY3RpdmVFbnRpdHksIEhhc0RyYWZ0RW50aXR5LCBEcmFmdEFkbWluaXN0cmF0aXZlRGF0YSB9ID0gY29udGV4dC5nZXRPYmplY3QoKSB8fCB7fTtcblx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiBJc0FjdGl2ZUVudGl0eSA9PT0gdHJ1ZSAmJiBIYXNEcmFmdEVudGl0eSA9PT0gdHJ1ZSAmJiAhIURyYWZ0QWRtaW5pc3RyYXRpdmVEYXRhPy5JblByb2Nlc3NCeVVzZXI7XG5cdFx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGxldCBub25UYWJsZVR4dCA9IFwiXCI7XG5cdFx0XHRcdFx0XHRpZiAodW5TYXZlZENvbnRleHQpIHtcblx0XHRcdFx0XHRcdFx0Y29uc3QgdW5TYXZlZENvbnRleHRVc2VyID0gdW5TYXZlZENvbnRleHQuZ2V0T2JqZWN0KCkuRHJhZnRBZG1pbmlzdHJhdGl2ZURhdGEuSW5Qcm9jZXNzQnlVc2VyO1xuXHRcdFx0XHRcdFx0XHRub25UYWJsZVR4dCA9IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcblx0XHRcdFx0XHRcdFx0XHRcIkNfVFJBTlNBQ1RJT05fSEVMUEVSX0NPTkZJUk1fREVMRVRFX1dJVEhfVU5TQVZFRF9DSEFOR0VTXCIsXG5cdFx0XHRcdFx0XHRcdFx0W3VuU2F2ZWRDb250ZXh0VXNlcl0sXG5cdFx0XHRcdFx0XHRcdFx0bVBhcmFtZXRlcnMuZW50aXR5U2V0TmFtZVxuXHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0fSBlbHNlIGlmIChtUGFyYW1ldGVycy50aXRsZSkge1xuXHRcdFx0XHRcdFx0XHRpZiAobVBhcmFtZXRlcnMuZGVzY3JpcHRpb24pIHtcblx0XHRcdFx0XHRcdFx0XHRub25UYWJsZVR4dCA9IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcblx0XHRcdFx0XHRcdFx0XHRcdFwiQ19UUkFOU0FDVElPTl9IRUxQRVJfQ09ORklSTV9ERUxFVEVfV0lUSF9PQkpFQ1RJTkZPXCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRbbVBhcmFtZXRlcnMudGl0bGUsIG1QYXJhbWV0ZXJzLmRlc2NyaXB0aW9uXSxcblx0XHRcdFx0XHRcdFx0XHRcdG1QYXJhbWV0ZXJzLmVudGl0eVNldE5hbWVcblx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdG5vblRhYmxlVHh0ID0gcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFxuXHRcdFx0XHRcdFx0XHRcdFx0XCJDX1RSQU5TQUNUSU9OX0hFTFBFUl9DT05GSVJNX0RFTEVURV9XSVRIX09CSkVDVFRJVExFX09OTFlcIixcblx0XHRcdFx0XHRcdFx0XHRcdFttUGFyYW1ldGVycy50aXRsZV0sXG5cdFx0XHRcdFx0XHRcdFx0XHRtUGFyYW1ldGVycy5lbnRpdHlTZXROYW1lXG5cdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0bm9uVGFibGVUeHQgPSByZXNvdXJjZU1vZGVsLmdldFRleHQoXG5cdFx0XHRcdFx0XHRcdFx0XCJDX1RSQU5TQUNUSU9OX0hFTFBFUl9DT05GSVJNX0RFTEVURV9XSVRIX09CSkVDVFRJVExFX1NJTkdVTEFSXCIsXG5cdFx0XHRcdFx0XHRcdFx0dW5kZWZpbmVkLFxuXHRcdFx0XHRcdFx0XHRcdG1QYXJhbWV0ZXJzLmVudGl0eVNldE5hbWVcblx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdG9wdGlvbnMucHVzaCh7XG5cdFx0XHRcdFx0XHRcdHR5cGU6IERlbGV0ZU9wdGlvblR5cGVzLmRlbGV0YWJsZUNvbnRleHRzLFxuXHRcdFx0XHRcdFx0XHRjb250ZXh0czogY29udGV4dHNUb0RlbGV0ZSxcblx0XHRcdFx0XHRcdFx0dGV4dDogbm9uVGFibGVUeHQsXG5cdFx0XHRcdFx0XHRcdHNlbGVjdGVkOiB0cnVlLFxuXHRcdFx0XHRcdFx0XHRjb250cm9sOiBEZWxldGVEaWFsb2dDb250ZW50Q29udHJvbC5URVhUXG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0Ly8gVGFibGVcblx0XHRcdFx0XHRcdGxldCB0b3RhbERlbGV0YWJsZSA9IGNvbnRleHRzVG9EZWxldGUubGVuZ3RoO1xuXG5cdFx0XHRcdFx0XHRpZiAoZHJhZnRFbmFibGVkKSB7XG5cdFx0XHRcdFx0XHRcdHRvdGFsRGVsZXRhYmxlICs9XG5cdFx0XHRcdFx0XHRcdFx0KG1QYXJhbWV0ZXJzLmRyYWZ0c1dpdGhOb25EZWxldGFibGVBY3RpdmU/Lmxlbmd0aCA/PyAwKSArXG5cdFx0XHRcdFx0XHRcdFx0KG1QYXJhbWV0ZXJzLmRyYWZ0c1dpdGhEZWxldGFibGVBY3RpdmU/Lmxlbmd0aCA/PyAwKSArXG5cdFx0XHRcdFx0XHRcdFx0KG1QYXJhbWV0ZXJzLnVuU2F2ZWRDb250ZXh0cz8ubGVuZ3RoID8/IDApO1xuXHRcdFx0XHRcdFx0XHRkZWxldGVIZWxwZXIudXBkYXRlRHJhZnRPcHRpb25zRm9yRGVsZXRhYmxlVGV4dHMoXG5cdFx0XHRcdFx0XHRcdFx0bVBhcmFtZXRlcnMsXG5cdFx0XHRcdFx0XHRcdFx0Y29udGV4dHNUb0RlbGV0ZSxcblx0XHRcdFx0XHRcdFx0XHR0b3RhbERlbGV0YWJsZSxcblx0XHRcdFx0XHRcdFx0XHRyZXNvdXJjZU1vZGVsLFxuXHRcdFx0XHRcdFx0XHRcdGl0ZW1zLFxuXHRcdFx0XHRcdFx0XHRcdG9wdGlvbnNcblx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5vbkRlbGV0YWJsZVRleHQgPSBkZWxldGVIZWxwZXIuZ2V0Tm9uRGVsZXRhYmxlVGV4dChtUGFyYW1ldGVycywgdG90YWxEZWxldGFibGUsIHJlc291cmNlTW9kZWwpO1xuXHRcdFx0XHRcdFx0XHRpZiAobm9uRGVsZXRhYmxlVGV4dCkge1xuXHRcdFx0XHRcdFx0XHRcdGl0ZW1zLnB1c2gobm9uRGVsZXRhYmxlVGV4dCk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0Y29uc3Qgb3B0aW9uc0RlbGV0YWJsZVRleHRzID0gZGVsZXRlSGVscGVyLmdldE9wdGlvbnNGb3JEZWxldGFibGVUZXh0cyhcblx0XHRcdFx0XHRcdFx0bVBhcmFtZXRlcnMsXG5cdFx0XHRcdFx0XHRcdGNvbnRleHRzVG9EZWxldGUsXG5cdFx0XHRcdFx0XHRcdHJlc291cmNlTW9kZWxcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRvcHRpb25zID0gWy4uLm9wdGlvbnMsIC4uLm9wdGlvbnNEZWxldGFibGVUZXh0c107XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Y29uc3QgY29tbW9uQmluZGluZyA9IGZpcnN0Q29udGV4dC5nZXRCaW5kaW5nKCkgYXMgQmluZGluZztcblx0XHRcdFx0bGV0IGJpbmRpbmdUeXBlOiBcIlRyZWVcIiB8IFwiQW5hbHl0aWNhbFwiIHwgdW5kZWZpbmVkO1xuXHRcdFx0XHRpZiAoY29tbW9uQmluZGluZy5pc0E8T0RhdGFMaXN0QmluZGluZz4oXCJzYXAudWkubW9kZWwub2RhdGEudjQuT0RhdGFMaXN0QmluZGluZ1wiKSkge1xuXHRcdFx0XHRcdGlmICh0aGlzLmlzTGlzdEJpbmRpbmdIaWVyYXJjaGljYWwoY29tbW9uQmluZGluZykpIHtcblx0XHRcdFx0XHRcdGJpbmRpbmdUeXBlID0gXCJUcmVlXCI7XG5cdFx0XHRcdFx0fSBlbHNlIGlmICh0aGlzLmlzTGlzdEJpbmRpbmdBbmFseXRpY2FsKGNvbW1vbkJpbmRpbmcpKSB7XG5cdFx0XHRcdFx0XHRiaW5kaW5nVHlwZSA9IFwiQW5hbHl0aWNhbFwiO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIENvbnRlbnQgb2YgRGVsZXRlIERpYWxvZ1xuXHRcdFx0XHRkZWxldGVIZWxwZXIudXBkYXRlQ29udGVudEZvckRlbGV0ZURpYWxvZyhvcHRpb25zLCBpdGVtcyk7XG5cdFx0XHRcdGNvbnN0IGZuQ29uZmlybSA9IGFzeW5jICgpOiBQcm9taXNlPHZvaWQ+ID0+IHtcblx0XHRcdFx0XHRtZXNzYWdlSGFuZGxpbmcucmVtb3ZlQm91bmRUcmFuc2l0aW9uTWVzc2FnZXMoKTtcblx0XHRcdFx0XHR0aGlzLmJ1c3lMb2NrKGFwcENvbXBvbmVudCk7XG5cblx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0YXdhaXQgZGVsZXRlSGVscGVyLmRlbGV0ZUNvbmZpcm1IYW5kbGVyKFxuXHRcdFx0XHRcdFx0XHRvcHRpb25zLFxuXHRcdFx0XHRcdFx0XHRtUGFyYW1ldGVycyxcblx0XHRcdFx0XHRcdFx0bWVzc2FnZUhhbmRsZXIsXG5cdFx0XHRcdFx0XHRcdHJlc291cmNlTW9kZWwsXG5cdFx0XHRcdFx0XHRcdGFwcENvbXBvbmVudCxcblx0XHRcdFx0XHRcdFx0ZHJhZnRFbmFibGVkLFxuXHRcdFx0XHRcdFx0XHRiaW5kaW5nVHlwZVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdHJlc29sdmUoKTtcblx0XHRcdFx0XHR9IGNhdGNoIChvRXJyb3I6IHVua25vd24pIHtcblx0XHRcdFx0XHRcdHJlamVjdCgpO1xuXHRcdFx0XHRcdH0gZmluYWxseSB7XG5cdFx0XHRcdFx0XHR0aGlzLmJ1c3lVbmxvY2soYXBwQ29tcG9uZW50KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH07XG5cblx0XHRcdFx0Y29uc3QgZGlhbG9nID0gdGhpcy5jcmVhdGVEZWxldGVEaWFsb2coaXRlbXMsIG1QYXJhbWV0ZXJzLCByZXNvdXJjZU1vZGVsLCBmbkNvbmZpcm0sIHJlamVjdCk7XG5cblx0XHRcdFx0aWYgKG1QYXJhbWV0ZXJzLm5vRGlhbG9nID09PSB0cnVlIHx8IG1QYXJhbWV0ZXJzLnNpbGVudE1vZGUgPT09IHRydWUpIHtcblx0XHRcdFx0XHRmbkNvbmZpcm0oKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRkaWFsb2cuYWRkU3R5bGVDbGFzcyhcInNhcFVpQ29udGVudFBhZGRpbmdcIik7XG5cdFx0XHRcdFx0ZGlhbG9nLm9wZW4oKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBmaW5hbGx5IHtcblx0XHRcdFx0Ly8gZGVsZXRlIGRvY3VtZW50IHVubG9ja1xuXHRcdFx0XHR0aGlzLmJ1c3lVbmxvY2soYXBwQ29tcG9uZW50KTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGUgdGhlIGNvbmZpcm1hdGlvbiBkaWFsb2cgZm8gdGhlIGRlbGV0aW9uLlxuXHQgKiBAcGFyYW0gaXRlbXMgQW4gYXJyYXkgb2YgY29udHJvbHMgdXNlZCBmb3IgdGhlIGRpYWxvZyBjb250ZW50XG5cdCAqIEBwYXJhbSBwYXJhbWV0ZXJzIENvbnRhaW5zIHRoZSBmb2xsb3dpbmcgYXR0cmlidXRlczpcblx0ICogQHBhcmFtIHBhcmFtZXRlcnMucGFyZW50Q29udHJvbCBQYXJlbnQgY29udHJvbCBvZiB0aGUgZGVsZXRlIGJ1dHRvbiBpZiBhbnlcblx0ICogQHBhcmFtIHBhcmFtZXRlcnMuZW50aXR5U2V0TmFtZSBOYW1lIG9mIHRoZSBjdXJyZW50IGVudGl0eVNldFxuXHQgKiBAcGFyYW0gcmVzb3VyY2VNb2RlbCBUaGUgcmVzb3VyY2UgbW9kZWwgdG8gbG9hZCB0ZXh0IHJlc291cmNlc1xuXHQgKiBAcGFyYW0gZm5Db25maXJtIEZ1bmN0aW9uIGV4ZWN1dGVkIHVwb24gdGhlIHZhbGlkYXRpb24gb2YgdGhlIGRlbGV0aW9uXG5cdCAqIEBwYXJhbSBmblJlamVjdCBGdW5jdGlvbiBleGVjdXRlZCBpZiB0aGUgZGlhbG9nIGlzIGNsb3NlZCB2aWEgQ2FuY2VsIG9yIEVzY2FwZSBidXR0b25cblx0ICogQHJldHVybnMgVGhlIGNyZWF0ZWQgZGVsZXRlIGNvbmZpcm1hdGlvbiBkaWFsb2dcblx0ICovXG5cdGNyZWF0ZURlbGV0ZURpYWxvZyhcblx0XHRpdGVtczogQ29udHJvbFtdLFxuXHRcdHBhcmFtZXRlcnM6IFBhcnRpYWw8eyBwYXJlbnRDb250cm9sOiBDb250cm9sIHwgdW5kZWZpbmVkOyBlbnRpdHlTZXROYW1lOiBzdHJpbmcgfT4sXG5cdFx0cmVzb3VyY2VNb2RlbDogUmVzb3VyY2VNb2RlbCxcblx0XHRmbkNvbmZpcm06IEZ1bmN0aW9uLFxuXHRcdGZuUmVqZWN0OiBGdW5jdGlvblxuXHQpOiBEaWFsb2cge1xuXHRcdGxldCBkaWFsb2dDb25maXJtZWQgPSBmYWxzZTtcblx0XHRjb25zdCB2Qm94ID0gbmV3IFZCb3goeyBpdGVtczogaXRlbXMgfSk7XG5cdFx0Y29uc3QgcmVzb3VyY2VCdW5kbGVDb3JlID0gTGlicmFyeS5nZXRSZXNvdXJjZUJ1bmRsZUZvcihcInNhcC5mZS5jb3JlXCIpITtcblx0XHRsZXQgdGl0bGU6IHN0cmluZyB8IHVuZGVmaW5lZDtcblx0XHRpZiAocGFyYW1ldGVycy5wYXJlbnRDb250cm9sPy5pc0EoXCJzYXAudWkubWRjLlRhYmxlXCIpKSB7XG5cdFx0XHR0aXRsZSA9IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIk1fQ09NTU9OX1RBQkxFX0RFTEVURVwiLCB1bmRlZmluZWQsIHBhcmFtZXRlcnMuZW50aXR5U2V0TmFtZSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRpdGxlID0gcmVzb3VyY2VCdW5kbGVDb3JlLmdldFRleHQoXCJDX0NPTU1PTl9ERUxFVEVcIik7XG5cdFx0fVxuXHRcdGNvbnN0IGRpYWxvZyA9IG5ldyBEaWFsb2coe1xuXHRcdFx0dGl0bGU6IHRpdGxlLFxuXHRcdFx0c3RhdGU6IFwiV2FybmluZ1wiLFxuXHRcdFx0Y29udGVudDogW3ZCb3hdLFxuXHRcdFx0YXJpYUxhYmVsbGVkQnk6IGl0ZW1zLFxuXHRcdFx0YmVnaW5CdXR0b246IG5ldyBCdXR0b24oe1xuXHRcdFx0XHR0ZXh0OiB0aXRsZSxcblx0XHRcdFx0dHlwZTogXCJFbXBoYXNpemVkXCIsXG5cdFx0XHRcdHByZXNzOiBmdW5jdGlvbiAoKTogdm9pZCB7XG5cdFx0XHRcdFx0ZGlhbG9nQ29uZmlybWVkID0gdHJ1ZTtcblx0XHRcdFx0XHRkaWFsb2cuY2xvc2UoKTtcblx0XHRcdFx0XHRmbkNvbmZpcm0oKTtcblx0XHRcdFx0fVxuXHRcdFx0fSksXG5cdFx0XHRlbmRCdXR0b246IG5ldyBCdXR0b24oe1xuXHRcdFx0XHR0ZXh0OiByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJDX0NPTU1PTl9ESUFMT0dfQ0FOQ0VMXCIpLFxuXHRcdFx0XHRwcmVzczogZnVuY3Rpb24gKCk6IHZvaWQge1xuXHRcdFx0XHRcdGRpYWxvZy5jbG9zZSgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KSxcblx0XHRcdGFmdGVyQ2xvc2U6IGZ1bmN0aW9uICgpOiB2b2lkIHtcblx0XHRcdFx0ZGlhbG9nLmRlc3Ryb3koKTtcblx0XHRcdFx0Ly8gaWYgZGlhbG9nIGlzIGNsb3NlZCB1bmNvbmZpcm1lZCAoZS5nLiB2aWEgXCJDYW5jZWxcIiBvciBFc2NhcGUgYnV0dG9uKSwgZW5zdXJlIHRvIHJlamVjdCBwcm9taXNlXG5cdFx0XHRcdGlmICghZGlhbG9nQ29uZmlybWVkKSB7XG5cdFx0XHRcdFx0Zm5SZWplY3QoKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdHJldHVybiBkaWFsb2c7XG5cdH1cblxuXHQvKipcblx0ICogRWRpdHMgYSBkb2N1bWVudC5cblx0ICogQHBhcmFtIG9Db250ZXh0IENvbnRleHQgb2YgdGhlIGFjdGl2ZSBkb2N1bWVudFxuXHQgKiBAcGFyYW0gb1ZpZXcgQ3VycmVudCB2aWV3XG5cdCAqIEBwYXJhbSBhcHBDb21wb25lbnQgVGhlIGFwcENvbXBvbmVudFxuXHQgKiBAcGFyYW0gbWVzc2FnZUhhbmRsZXIgVGhlIG1lc3NhZ2UgaGFuZGxlciBleHRlbnNpb25cblx0ICogQHBhcmFtIGdyb3VwSWQgVGhlIGJhdGNoIGdyb3VwSWQgZm9yIHBvc3QgY2FsbCBvZiBlZGl0IGFjdGlvblxuXHQgKiBAcGFyYW0gdHJhbnNhY3Rpb25EZXRhaWxzIE9wdGlvbmFsIG9iamVjdCB0byByZXR1cm4gYWRkaXRpb25hbCBkZXRhaWxzIGFib3V0IGhvdyB0aGUgdHJhbnNhY3Rpb24gd2FzIGV4ZWN1dGVkXG5cdCAqIEByZXR1cm5zIFByb21pc2UgcmVzb2x2ZXMgd2l0aCB0aGUgbmV3IGRyYWZ0IGNvbnRleHQgaW4gY2FzZSBvZiBkcmFmdCBwcm9ncmFtbWluZyBtb2RlbFxuXHQgKiBAZmluYWxcblx0ICovXG5cdGFzeW5jIGVkaXREb2N1bWVudChcblx0XHRvQ29udGV4dDogT0RhdGFWNENvbnRleHQsXG5cdFx0b1ZpZXc6IEZFVmlldyxcblx0XHRhcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudCxcblx0XHRtZXNzYWdlSGFuZGxlcjogTWVzc2FnZUhhbmRsZXIsXG5cdFx0Z3JvdXBJZDogc3RyaW5nLFxuXHRcdHRyYW5zYWN0aW9uRGV0YWlscz86IEVkaXRUcmFuc2FjdGlvbkV4ZWN1dGlvbkRldGFpbHNcblx0KTogUHJvbWlzZTxPRGF0YVY0Q29udGV4dCB8IHVuZGVmaW5lZD4ge1xuXHRcdGNvbnN0IHNQcm9ncmFtbWluZ01vZGVsID0gdGhpcy5nZXRQcm9ncmFtbWluZ01vZGVsKG9Db250ZXh0KTtcblx0XHRpZiAoIW9Db250ZXh0KSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJCaW5kaW5nIGNvbnRleHQgdG8gYWN0aXZlIGRvY3VtZW50IGlzIHJlcXVpcmVkXCIpO1xuXHRcdH1cblx0XHRpZiAoc1Byb2dyYW1taW5nTW9kZWwgIT09IFByb2dyYW1taW5nTW9kZWwuRHJhZnQgJiYgc1Byb2dyYW1taW5nTW9kZWwgIT09IFByb2dyYW1taW5nTW9kZWwuU3RpY2t5KSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJFZGl0IGlzIG9ubHkgYWxsb3dlZCBmb3IgZHJhZnQgb3Igc3RpY2t5IHNlc3Npb24gc3VwcG9ydGVkIHNlcnZpY2VzXCIpO1xuXHRcdH1cblx0XHR0aGlzLmJ1c3lMb2NrKGFwcENvbXBvbmVudCk7XG5cdFx0Ly8gYmVmb3JlIHRyaWdnZXJpbmcgdGhlIGVkaXQgYWN0aW9uIHdlJ2xsIGhhdmUgdG8gcmVtb3ZlIGFsbCBib3VuZCB0cmFuc2l0aW9uIG1lc3NhZ2VzXG5cdFx0bWVzc2FnZUhhbmRsZXIucmVtb3ZlVHJhbnNpdGlvbk1lc3NhZ2VzKCk7XG5cdFx0Y29uc3QgbWVzc2FnZUhhbmRsaW5nS2V5ID0gbWVzc2FnZUhhbmRsZXIucmVnaXN0ZXJUb0hvbGRNZXNzYWdlcygpO1xuXG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IG9OZXdDb250ZXh0ID1cblx0XHRcdFx0c1Byb2dyYW1taW5nTW9kZWwgPT09IFByb2dyYW1taW5nTW9kZWwuRHJhZnRcblx0XHRcdFx0XHQ/IGF3YWl0IGRyYWZ0LmNyZWF0ZURyYWZ0RnJvbUFjdGl2ZURvY3VtZW50KFxuXHRcdFx0XHRcdFx0XHRvQ29udGV4dCxcblx0XHRcdFx0XHRcdFx0YXBwQ29tcG9uZW50LFxuXHRcdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFx0YlByZXNlcnZlQ2hhbmdlczogdHJ1ZSxcblx0XHRcdFx0XHRcdFx0XHRvVmlldzogb1ZpZXdcblx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0Z3JvdXBJZCxcblx0XHRcdFx0XHRcdFx0bWVzc2FnZUhhbmRsZXIsXG5cdFx0XHRcdFx0XHRcdHRyYW5zYWN0aW9uRGV0YWlsc1xuXHRcdFx0XHRcdCAgKVxuXHRcdFx0XHRcdDogYXdhaXQgc3RpY2t5LmVkaXREb2N1bWVudEluU3RpY2t5U2Vzc2lvbihvQ29udGV4dCwgYXBwQ29tcG9uZW50LCBtZXNzYWdlSGFuZGxlcik7XG5cblx0XHRcdGF3YWl0IG1lc3NhZ2VIYW5kbGVyLnNob3dNZXNzYWdlRGlhbG9nKHsgdW5Ib2xkS2V5OiBtZXNzYWdlSGFuZGxpbmdLZXkgfSk7XG5cdFx0XHRyZXR1cm4gb05ld0NvbnRleHQ7XG5cdFx0fSBjYXRjaCAoZXJyOiB1bmtub3duKSB7XG5cdFx0XHRhd2FpdCBtZXNzYWdlSGFuZGxlci5zaG93TWVzc2FnZXMoeyBjb25jdXJyZW50RWRpdEZsYWc6IHRydWUsIHVuSG9sZEtleTogbWVzc2FnZUhhbmRsaW5nS2V5IH0pO1xuXHRcdFx0dGhyb3cgZXJyO1xuXHRcdH0gZmluYWxseSB7XG5cdFx0XHR0aGlzLmJ1c3lVbmxvY2soYXBwQ29tcG9uZW50KTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQ2FuY2VsICdlZGl0JyBtb2RlIG9mIGEgZG9jdW1lbnQuXG5cdCAqIEBwYXJhbSBvQ29udGV4dCBDb250ZXh0IG9mIHRoZSBkb2N1bWVudCB0byBiZSBjYW5jZWxlZCBvciBkZWxldGVkXG5cdCAqIEBwYXJhbSBbbUluUGFyYW1ldGVyc10gT3B0aW9uYWwsIGNhbiBjb250YWluIHRoZSBmb2xsb3dpbmcgYXR0cmlidXRlczpcblx0ICogQHBhcmFtIG1JblBhcmFtZXRlcnMuY2FuY2VsQnV0dG9uIENhbmNlbCBCdXR0b24gb2YgdGhlIGRpc2NhcmQgcG9wb3ZlciAobWFuZGF0b3J5IGZvciBub3cpXG5cdCAqIEBwYXJhbSBtSW5QYXJhbWV0ZXJzLnNraXBEaXNjYXJkUG9wb3ZlciBPcHRpb25hbCwgc3VwcmVzc2VzIHRoZSBkaXNjYXJkIHBvcG92ZXIgaW5jYXNlIG9mIGRyYWZ0IGFwcGxpY2F0aW9ucyB3aGlsZSBuYXZpZ2F0aW5nIG91dCBvZiBPUFxuXHQgKiBAcGFyYW0gYXBwQ29tcG9uZW50IFRoZSBhcHBDb21wb25lbnRcblx0ICogQHBhcmFtIHJlc291cmNlTW9kZWwgVGhlIG1vZGVsIHRvIGxvYWQgdGV4dCByZXNvdXJjZXNcblx0ICogQHBhcmFtIG1lc3NhZ2VIYW5kbGVyIFRoZSBtZXNzYWdlIGhhbmRsZXIgZXh0ZW5zaW9uXG5cdCAqIEBwYXJhbSBpc05ld09iamVjdCBUcnVlIGlmIHdlJ3JlIHRyeWluZyB0byBjYW5jZWwgYSBuZXdseSBjcmVhdGVkIG9iamVjdFxuXHQgKiBAcGFyYW0gaXNPYmplY3RNb2RpZmllZCBUcnVlIGlmIHRoZSBvYmplY3QgaGFzIGJlZW4gbW9kaWZpZWQgYnkgdGhlIHVzZXJcblx0ICogQHJldHVybnMgUHJvbWlzZSByZXNvbHZlcyB3aXRoID8/P1xuXHQgKiBAZmluYWxcblx0ICovXG5cdGFzeW5jIGNhbmNlbERvY3VtZW50KFxuXHRcdG9Db250ZXh0OiBPRGF0YVY0Q29udGV4dCxcblx0XHRtSW5QYXJhbWV0ZXJzOiBDYW5jZWxQYXJhbWV0ZXJzIHwgdW5kZWZpbmVkLFxuXHRcdGFwcENvbXBvbmVudDogQXBwQ29tcG9uZW50LFxuXHRcdHJlc291cmNlTW9kZWw6IFJlc291cmNlTW9kZWwsXG5cdFx0bWVzc2FnZUhhbmRsZXI6IE1lc3NhZ2VIYW5kbGVyLFxuXHRcdGlzTmV3T2JqZWN0OiBib29sZWFuLFxuXHRcdGlzT2JqZWN0TW9kaWZpZWQ6IGJvb2xlYW5cblx0KTogUHJvbWlzZTxPRGF0YVY0Q29udGV4dCB8IHVuZGVmaW5lZD4ge1xuXHRcdC8vY29udGV4dCBtdXN0IGFsd2F5cyBiZSBwYXNzZWQgLSBtYW5kYXRvcnkgcGFyYW1ldGVyXG5cdFx0aWYgKCFvQ29udGV4dCkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiTm8gY29udGV4dCBleGlzdHMuIFBhc3MgYSBtZWFuaW5nZnVsIGNvbnRleHRcIik7XG5cdFx0fVxuXHRcdGNvbnN0IG1QYXJhbWV0ZXJzID0gZ2V0UGFyYW1ldGVycyhtSW5QYXJhbWV0ZXJzKTtcblx0XHRjb25zdCBvTW9kZWwgPSBvQ29udGV4dC5nZXRNb2RlbCgpO1xuXHRcdGNvbnN0IHNQcm9ncmFtbWluZ01vZGVsID0gdGhpcy5nZXRQcm9ncmFtbWluZ01vZGVsKG9Db250ZXh0KTtcblxuXHRcdGlmIChzUHJvZ3JhbW1pbmdNb2RlbCAhPT0gUHJvZ3JhbW1pbmdNb2RlbC5EcmFmdCAmJiBzUHJvZ3JhbW1pbmdNb2RlbCAhPT0gUHJvZ3JhbW1pbmdNb2RlbC5TdGlja3kpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIkNhbmNlbCBkb2N1bWVudCBvbmx5IGFsbG93ZWQgZm9yIGRyYWZ0IG9yIHN0aWNreSBzZXNzaW9uIHN1cHBvcnRlZCBzZXJ2aWNlc1wiKTtcblx0XHR9XG5cdFx0dGhpcy5idXN5TG9jayhhcHBDb21wb25lbnQpO1xuXHRcdHRyeSB7XG5cdFx0XHRsZXQgcmV0dXJuZWRWYWx1ZTogT0RhdGFWNENvbnRleHQgfCB1bmRlZmluZWQ7XG5cdFx0XHRsZXQgc2libGluZ0NvbnRleHRDYW5vbmljYWxQYXRoLCBkcmFmdEFkbWluRGF0YTtcblx0XHRcdGNvbnN0IHNpYmxpbmdDb250ZXh0ID0gb01vZGVsLmJpbmRDb250ZXh0KGAke29Db250ZXh0LmdldFBhdGgoKX0vU2libGluZ0VudGl0eWApLmdldEJvdW5kQ29udGV4dCgpO1xuXHRcdFx0aWYgKHNQcm9ncmFtbWluZ01vZGVsID09PSBQcm9ncmFtbWluZ01vZGVsLkRyYWZ0ICYmICFpc09iamVjdE1vZGlmaWVkKSB7XG5cdFx0XHRcdGNvbnN0IGRyYWZ0RGF0YUNvbnRleHQgPSBvTW9kZWwuYmluZENvbnRleHQoYCR7b0NvbnRleHQuZ2V0UGF0aCgpfS9EcmFmdEFkbWluaXN0cmF0aXZlRGF0YWApLmdldEJvdW5kQ29udGV4dCgpO1xuXHRcdFx0XHRbc2libGluZ0NvbnRleHRDYW5vbmljYWxQYXRoLCBkcmFmdEFkbWluRGF0YV0gPSBhd2FpdCBQcm9taXNlLmFsbChbXG5cdFx0XHRcdFx0aXNOZXdPYmplY3QgPyB1bmRlZmluZWQgOiBzaWJsaW5nQ29udGV4dC5yZXF1ZXN0Q2Fub25pY2FsUGF0aCgpLFxuXHRcdFx0XHRcdGRyYWZ0RGF0YUNvbnRleHQucmVxdWVzdE9iamVjdCgpXG5cdFx0XHRcdF0pO1xuXHRcdFx0XHRpZiAoZHJhZnRBZG1pbkRhdGEpIHtcblx0XHRcdFx0XHRpc09iamVjdE1vZGlmaWVkID0gZHJhZnRBZG1pbkRhdGEuQ3JlYXRpb25EYXRlVGltZSAhPT0gZHJhZnRBZG1pbkRhdGEuTGFzdENoYW5nZURhdGVUaW1lO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRpZiAoIW1QYXJhbWV0ZXJzLnNraXBEaXNjYXJkUG9wb3Zlcikge1xuXHRcdFx0XHRhd2FpdCB0aGlzLl9jb25maXJtRGlzY2FyZChtUGFyYW1ldGVycy5jYW5jZWxCdXR0b24sIGlzT2JqZWN0TW9kaWZpZWQsIHJlc291cmNlTW9kZWwpO1xuXHRcdFx0fVxuXHRcdFx0aWYgKG9Db250ZXh0LmlzS2VlcEFsaXZlKCkpIHtcblx0XHRcdFx0Ly8gaWYgdGhlIGNvbnRleHQgaXMga2VwdCBhbGl2ZSB3ZSBzZXQgaXQgYWdhaW4gdG8gZGV0YWNoIHRoZSBvbkJlZm9yZURlc3Ryb3kgY2FsbGJhY2sgYW5kIGhhbmRsZSBuYXZpZ2F0aW9uIGhlcmVcblx0XHRcdFx0Ly8gdGhlIGNvbnRleHQgbmVlZHMgdG8gc3RpbGwgYmUga2VwdCBhbGl2ZSB0byBiZSBhYmxlIHRvIHJlc2V0IGNoYW5nZXMgcHJvcGVybHlcblx0XHRcdFx0b0NvbnRleHQuc2V0S2VlcEFsaXZlKHRydWUsIHVuZGVmaW5lZCk7XG5cdFx0XHR9XG5cdFx0XHRpZiAobVBhcmFtZXRlcnMuYmVmb3JlQ2FuY2VsQ2FsbEJhY2spIHtcblx0XHRcdFx0YXdhaXQgbVBhcmFtZXRlcnMuYmVmb3JlQ2FuY2VsQ2FsbEJhY2soeyBjb250ZXh0OiBvQ29udGV4dCB9KTtcblx0XHRcdH1cblx0XHRcdGlmIChzUHJvZ3JhbW1pbmdNb2RlbCA9PT0gUHJvZ3JhbW1pbmdNb2RlbC5EcmFmdCkge1xuXHRcdFx0XHRpZiAoaXNOZXdPYmplY3QpIHtcblx0XHRcdFx0XHRpZiAob0NvbnRleHQuaGFzUGVuZGluZ0NoYW5nZXMoKSkge1xuXHRcdFx0XHRcdFx0b0NvbnRleHQuZ2V0QmluZGluZygpLnJlc2V0Q2hhbmdlcygpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRhd2FpdCBkcmFmdC5kZWxldGVEcmFmdChvQ29udGV4dCwgbWVzc2FnZUhhbmRsZXIsIGFwcENvbXBvbmVudCk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRcdGlmIChvQ29udGV4dC5oYXNQZW5kaW5nQ2hhbmdlcygpKSB7XG5cdFx0XHRcdFx0XHRcdG9Db250ZXh0LmdldEJpbmRpbmcoKS5yZXNldENoYW5nZXMoKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdHJldHVybmVkVmFsdWUgPSBvTW9kZWxcblx0XHRcdFx0XHRcdFx0LmJpbmRDb250ZXh0KFxuXHRcdFx0XHRcdFx0XHRcdHNpYmxpbmdDb250ZXh0Q2Fub25pY2FsUGF0aCA/IHNpYmxpbmdDb250ZXh0Q2Fub25pY2FsUGF0aCA6IGF3YWl0IHNpYmxpbmdDb250ZXh0LnJlcXVlc3RDYW5vbmljYWxQYXRoKClcblx0XHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdFx0XHQuZ2V0Qm91bmRDb250ZXh0KCk7XG5cdFx0XHRcdFx0fSBmaW5hbGx5IHtcblx0XHRcdFx0XHRcdGF3YWl0IGRyYWZ0LmRlbGV0ZURyYWZ0KG9Db250ZXh0LCBtZXNzYWdlSGFuZGxlciwgYXBwQ29tcG9uZW50KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNvbnN0IGRpc2NhcmRlZENvbnRleHQgPSBhd2FpdCBzdGlja3kuZGlzY2FyZERvY3VtZW50KG9Db250ZXh0KTtcblx0XHRcdFx0aWYgKGRpc2NhcmRlZENvbnRleHQpIHtcblx0XHRcdFx0XHRpZiAoZGlzY2FyZGVkQ29udGV4dC5oYXNQZW5kaW5nQ2hhbmdlcygpKSB7XG5cdFx0XHRcdFx0XHRkaXNjYXJkZWRDb250ZXh0LmdldEJpbmRpbmcoKS5yZXNldENoYW5nZXMoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0aWYgKCFpc05ld09iamVjdCkge1xuXHRcdFx0XHRcdFx0ZGlzY2FyZGVkQ29udGV4dC5yZWZyZXNoKCk7XG5cdFx0XHRcdFx0XHRyZXR1cm5lZFZhbHVlID0gZGlzY2FyZGVkQ29udGV4dDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gcmVtb3ZlIGV4aXN0aW5nIGJvdW5kIHRyYW5zaXRpb24gbWVzc2FnZXNcblx0XHRcdG1lc3NhZ2VIYW5kbGVyLnJlbW92ZVRyYW5zaXRpb25NZXNzYWdlcygpO1xuXHRcdFx0Ly8gc2hvdyB1bmJvdW5kIG1lc3NhZ2VzXG5cdFx0XHRhd2FpdCBtZXNzYWdlSGFuZGxlci5zaG93TWVzc2FnZXMoKTtcblx0XHRcdHJldHVybiByZXR1cm5lZFZhbHVlO1xuXHRcdH0gY2F0Y2ggKGVycjogdW5rbm93bikge1xuXHRcdFx0YXdhaXQgbWVzc2FnZUhhbmRsZXIuc2hvd01lc3NhZ2VzKCk7XG5cdFx0XHR0aHJvdyBlcnI7XG5cdFx0fSBmaW5hbGx5IHtcblx0XHRcdHRoaXMuYnVzeVVubG9jayhhcHBDb21wb25lbnQpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBTYXZlcyB0aGUgZG9jdW1lbnQuXG5cdCAqIEBwYXJhbSBjb250ZXh0IENvbnRleHQgb2YgdGhlIGRvY3VtZW50IHRvIGJlIHNhdmVkXG5cdCAqIEBwYXJhbSBhcHBDb21wb25lbnQgVGhlIGFwcENvbXBvbmVudFxuXHQgKiBAcGFyYW0gcmVzb3VyY2VNb2RlbCBUaGUgbW9kZWwgdG8gbG9hZCB0ZXh0IHJlc291cmNlc1xuXHQgKiBAcGFyYW0gZXhlY3V0ZVNpZGVFZmZlY3RzT25FcnJvciBUcnVlIGlmIHdlIHNob3VsZCBleGVjdXRlIHNpZGUgZWZmZWN0cyBpbiBjYXNlIG9mIGFuIGVycm9yXG5cdCAqIEBwYXJhbSBiaW5kaW5nc0ZvclNpZGVFZmZlY3RzIFRoZSBsaXN0QmluZGluZ3MgdG8gYmUgdXNlZCBmb3IgZXhlY3V0aW5nIHNpZGUgZWZmZWN0cyBvbiBlcnJvclxuXHQgKiBAcGFyYW0gbWVzc2FnZUhhbmRsZXIgVGhlIG1lc3NhZ2UgaGFuZGxlciBleHRlbnNpb25cblx0ICogQHBhcmFtIGlzTmV3T2JqZWN0IFRydWUgaWYgd2UncmUgdHJ5aW5nIHRvIGNhbmNlbCBhIG5ld2x5IGNyZWF0ZWQgb2JqZWN0XG5cdCAqIEBwYXJhbSBza2lwQ29uZmlybWF0aW9uTXNnXG5cdCAqIEByZXR1cm5zIFByb21pc2UgcmVzb2x2ZXMgd2l0aCA/Pz9cblx0ICogQGZpbmFsXG5cdCAqL1xuXHRhc3luYyBzYXZlRG9jdW1lbnQoXG5cdFx0Y29udGV4dDogT0RhdGFWNENvbnRleHQsXG5cdFx0YXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQsXG5cdFx0cmVzb3VyY2VNb2RlbDogUmVzb3VyY2VNb2RlbCxcblx0XHRleGVjdXRlU2lkZUVmZmVjdHNPbkVycm9yOiBib29sZWFuLFxuXHRcdGJpbmRpbmdzRm9yU2lkZUVmZmVjdHM6IE9EYXRhTGlzdEJpbmRpbmdbXSxcblx0XHRtZXNzYWdlSGFuZGxlcjogTWVzc2FnZUhhbmRsZXIsXG5cdFx0aXNOZXdPYmplY3Q6IGJvb2xlYW4sXG5cdFx0c2tpcENvbmZpcm1hdGlvbk1zZyA9IGZhbHNlLFxuXHRcdGlzU3RhbmRhcmRTYXZlPzogYm9vbGVhblxuXHQpOiBQcm9taXNlPE9EYXRhVjRDb250ZXh0PiB7XG5cdFx0Y29uc3Qgc1Byb2dyYW1taW5nTW9kZWwgPSB0aGlzLmdldFByb2dyYW1taW5nTW9kZWwoY29udGV4dCk7XG5cdFx0aWYgKHNQcm9ncmFtbWluZ01vZGVsICE9PSBQcm9ncmFtbWluZ01vZGVsLlN0aWNreSAmJiBzUHJvZ3JhbW1pbmdNb2RlbCAhPT0gUHJvZ3JhbW1pbmdNb2RlbC5EcmFmdCkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiU2F2ZSBpcyBvbmx5IGFsbG93ZWQgZm9yIGRyYWZ0IG9yIHN0aWNreSBzZXNzaW9uIHN1cHBvcnRlZCBzZXJ2aWNlc1wiKTtcblx0XHR9XG5cblx0XHR0cnkge1xuXHRcdFx0dGhpcy5idXN5TG9jayhhcHBDb21wb25lbnQpO1xuXHRcdFx0Y29uc3QgZW50aXR5U2V0TmFtZSA9IHRoaXMuZ2V0Q29sbGVjdGlvbk5hbWVGcm9tQ29udGV4dChjb250ZXh0KTtcblx0XHRcdGNvbnN0IG9BY3RpdmVEb2N1bWVudCA9XG5cdFx0XHRcdHNQcm9ncmFtbWluZ01vZGVsID09PSBQcm9ncmFtbWluZ01vZGVsLkRyYWZ0XG5cdFx0XHRcdFx0PyBhd2FpdCBkcmFmdC5hY3RpdmF0ZURvY3VtZW50KGNvbnRleHQsIGFwcENvbXBvbmVudCwgbWVzc2FnZUhhbmRsZXIsIHsgcmVzb3VyY2VNb2RlbDogcmVzb3VyY2VNb2RlbCB9LCBpc1N0YW5kYXJkU2F2ZSlcblx0XHRcdFx0XHQ6IGF3YWl0IHN0aWNreS5hY3RpdmF0ZURvY3VtZW50KFxuXHRcdFx0XHRcdFx0XHRjb250ZXh0LFxuXHRcdFx0XHRcdFx0XHRhcHBDb21wb25lbnQsXG5cdFx0XHRcdFx0XHRcdG1lc3NhZ2VIYW5kbGVyLFxuXHRcdFx0XHRcdFx0XHR7IHJlc291cmNlTW9kZWw6IHJlc291cmNlTW9kZWwgfSxcblx0XHRcdFx0XHRcdFx0aXNTdGFuZGFyZFNhdmVcblx0XHRcdFx0XHQgICk7XG5cblx0XHRcdGNvbnN0IG1lc3NhZ2VzUmVjZWl2ZWQgPSBtZXNzYWdlSGFuZGxpbmcuZ2V0TWVzc2FnZXMoKS5jb25jYXQobWVzc2FnZUhhbmRsaW5nLmdldE1lc3NhZ2VzKHRydWUsIHRydWUpKTsgLy8gZ2V0IHVuYm91bmQgYW5kIGJvdW5kIG1lc3NhZ2VzIHByZXNlbnQgaW4gdGhlIG1vZGVsXG5cdFx0XHRpZiAoIXNraXBDb25maXJtYXRpb25Nc2cgJiYgIShtZXNzYWdlc1JlY2VpdmVkLmxlbmd0aCA9PT0gMSAmJiBtZXNzYWdlc1JlY2VpdmVkWzBdLmdldFR5cGUoKSA9PT0gTWVzc2FnZVR5cGUuU3VjY2VzcykpIHtcblx0XHRcdFx0Ly8gc2hvdyBvdXIgb2JqZWN0IGNyZWF0aW9uIHRvYXN0IG9ubHkgaWYgaXQgaXMgbm90IGNvbWluZyBmcm9tIGJhY2tlbmRcblx0XHRcdFx0TWVzc2FnZVRvYXN0LnNob3coXG5cdFx0XHRcdFx0aXNOZXdPYmplY3Rcblx0XHRcdFx0XHRcdD8gcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiQ19UUkFOU0FDVElPTl9IRUxQRVJfT0JKRUNUX0NSRUFURURcIiwgdW5kZWZpbmVkLCBlbnRpdHlTZXROYW1lKVxuXHRcdFx0XHRcdFx0OiByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJDX1RSQU5TQUNUSU9OX0hFTFBFUl9PQkpFQ1RfU0FWRURcIiwgdW5kZWZpbmVkLCBlbnRpdHlTZXROYW1lKVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gb0FjdGl2ZURvY3VtZW50O1xuXHRcdH0gY2F0Y2ggKGVycjogdW5rbm93bikge1xuXHRcdFx0aWYgKGV4ZWN1dGVTaWRlRWZmZWN0c09uRXJyb3IgJiYgYmluZGluZ3NGb3JTaWRlRWZmZWN0cz8ubGVuZ3RoID4gMCkge1xuXHRcdFx0XHQvKiBUaGUgc2lkZUVmZmVjdHMgYXJlIGV4ZWN1dGVkIG9ubHkgZm9yIHRhYmxlIGl0ZW1zIGluIHRyYW5zaWVudCBzdGF0ZSAqL1xuXHRcdFx0XHRiaW5kaW5nc0ZvclNpZGVFZmZlY3RzLmZvckVhY2goKGxpc3RCaW5kaW5nKSA9PiB7XG5cdFx0XHRcdFx0aWYgKCFDb21tb25VdGlscy5oYXNUcmFuc2llbnRDb250ZXh0KGxpc3RCaW5kaW5nKSkge1xuXHRcdFx0XHRcdFx0YXBwQ29tcG9uZW50LmdldFNpZGVFZmZlY3RzU2VydmljZSgpLnJlcXVlc3RTaWRlRWZmZWN0c0Zvck5hdmlnYXRpb25Qcm9wZXJ0eShsaXN0QmluZGluZy5nZXRQYXRoKCksIGNvbnRleHQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0XHRhd2FpdCBtZXNzYWdlSGFuZGxlci5zaG93TWVzc2FnZXMoKTtcblx0XHRcdHRocm93IGVycjtcblx0XHR9IGZpbmFsbHkge1xuXHRcdFx0dGhpcy5idXN5VW5sb2NrKGFwcENvbXBvbmVudCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIENhbGxzIGEgYm91bmQgb3IgdW5ib3VuZCBhY3Rpb24uXG5cdCAqIEBwYXJhbSBzQWN0aW9uTmFtZSBUaGUgbmFtZSBvZiB0aGUgYWN0aW9uIHRvIGJlIGNhbGxlZFxuXHQgKiBAcGFyYW0gW21QYXJhbWV0ZXJzXSBDb250YWlucyB0aGUgZm9sbG93aW5nIGF0dHJpYnV0ZXM6XG5cdCAqIEBwYXJhbSBbbVBhcmFtZXRlcnMucGFyYW1ldGVyVmFsdWVzXSBBIG1hcCBvZiBhY3Rpb24gcGFyYW1ldGVyIG5hbWVzIGFuZCBwcm92aWRlZCB2YWx1ZXNcblx0ICogQHBhcmFtIFttUGFyYW1ldGVycy5za2lwUGFyYW1ldGVyRGlhbG9nXSBTa2lwcyB0aGUgcGFyYW1ldGVyIGRpYWxvZyBpZiB2YWx1ZXMgYXJlIHByb3ZpZGVkIGZvciBhbGwgb2YgdGhlbVxuXHQgKiBAcGFyYW0gW21QYXJhbWV0ZXJzLmNvbnRleHRzXSBNYW5kYXRvcnkgZm9yIGEgYm91bmQgYWN0aW9uOiBFaXRoZXIgb25lIGNvbnRleHQgb3IgYW4gYXJyYXkgd2l0aCBjb250ZXh0cyBmb3Igd2hpY2ggdGhlIGFjdGlvbiBpcyB0byBiZSBjYWxsZWRcblx0ICogQHBhcmFtIFttUGFyYW1ldGVycy5tb2RlbF0gTWFuZGF0b3J5IGZvciBhbiB1bmJvdW5kIGFjdGlvbjogQW4gaW5zdGFuY2Ugb2YgYW4gT0RhdGEgVjQgbW9kZWxcblx0ICogQHBhcmFtIFttUGFyYW1ldGVycy5pbnZvY2F0aW9uR3JvdXBpbmddIE1vZGUgaG93IGFjdGlvbnMgYXJlIHRvIGJlIGNhbGxlZDogJ0NoYW5nZVNldCcgdG8gcHV0IGFsbCBhY3Rpb24gY2FsbHMgaW50byBvbmUgY2hhbmdlc2V0LCAnSXNvbGF0ZWQnIHRvIHB1dCB0aGVtIGludG8gc2VwYXJhdGUgY2hhbmdlc2V0c1xuXHQgKiBAcGFyYW0gW21QYXJhbWV0ZXJzLmxhYmVsXSBBIGh1bWFuLXJlYWRhYmxlIGxhYmVsIGZvciB0aGUgYWN0aW9uXG5cdCAqIEBwYXJhbSBtUGFyYW1ldGVycy5iaW5kaW5nUGFyYW1ldGVyc1xuXHQgKiBAcGFyYW0gbVBhcmFtZXRlcnMuc2hvd0FjdGlvblBhcmFtZXRlckRpYWxvZ1xuXHQgKiBAcGFyYW0gbVBhcmFtZXRlcnMuZW50aXR5U2V0TmFtZVxuXHQgKiBAcGFyYW0gbVBhcmFtZXRlcnMudmlld1xuXHQgKiBAcGFyYW0gbVBhcmFtZXRlcnMuY29udHJvbElkXG5cdCAqIEBwYXJhbSBtUGFyYW1ldGVycy5pc0NyZWF0ZUFjdGlvblxuXHQgKiBAcGFyYW0gbVBhcmFtZXRlcnMub3BlcmF0aW9uQXZhaWxhYmxlTWFwXG5cdCAqIEBwYXJhbSBtUGFyYW1ldGVycy5pbnRlcm5hbE1vZGVsQ29udGV4dFxuXHQgKiBAcGFyYW0gbVBhcmFtZXRlcnMuZ3JvdXBJZFxuXHQgKiBAcGFyYW0gbVBhcmFtZXRlcnMuZGVmYXVsdFZhbHVlc0V4dGVuc2lvbkZ1bmN0aW9uXG5cdCAqIEBwYXJhbSBtUGFyYW1ldGVycy5pZ25vcmVFVGFnIElmIHNwZWNpZmllZCwgdGhlIGFjdGlvbiBpcyBjYWxsZWQgd2l0aG91dCBFVGFnIGhhbmRsaW5nXG5cdCAqIEBwYXJhbSBhcHBDb21wb25lbnQgVGhlIGFwcENvbXBvbmVudFxuXHQgKiBAcGFyYW0gbWVzc2FnZUhhbmRsZXIgVGhlIG1lc3NhZ2UgaGFuZGxlciBleHRlbnNpb25cblx0ICogQHJldHVybnMgUHJvbWlzZSByZXNvbHZlcyB3aXRoIGFuIGFycmF5IG9mIHJlc3BvbnNlIG9iamVjdHMgKFRPRE86IHRvIGJlIGNoYW5nZWQpXG5cdCAqIEBmaW5hbFxuXHQgKi9cblx0YXN5bmMgY2FsbEFjdGlvbihcblx0XHRzQWN0aW9uTmFtZTogc3RyaW5nLFxuXHRcdG1QYXJhbWV0ZXJzOiB7XG5cdFx0XHRiaW5kaW5nUGFyYW1ldGVycz86IEJpbmRDb250ZXh0UGFyYW1ldGVycztcblx0XHRcdHBhcmFtZXRlclZhbHVlcz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+W107XG5cdFx0XHRza2lwUGFyYW1ldGVyRGlhbG9nPzogYm9vbGVhbjtcblx0XHRcdHNob3dBY3Rpb25QYXJhbWV0ZXJEaWFsb2c/OiBib29sZWFuO1xuXHRcdFx0bGFiZWw/OiBzdHJpbmc7XG5cdFx0XHRpbnZvY2F0aW9uR3JvdXBpbmc/OiBzdHJpbmc7XG5cdFx0XHRlbnRpdHlTZXROYW1lPzogc3RyaW5nO1xuXHRcdFx0Y29udGV4dHM/OiBPRGF0YVY0Q29udGV4dCB8IE9EYXRhVjRDb250ZXh0W10gfCBudWxsO1xuXHRcdFx0bW9kZWw/OiBPRGF0YU1vZGVsO1xuXHRcdFx0dmlldzogVmlldztcblx0XHRcdGNvbnRyb2xJZD86IHN0cmluZztcblx0XHRcdGlzQ3JlYXRlQWN0aW9uPzogYm9vbGVhbjtcblx0XHRcdG9wZXJhdGlvbkF2YWlsYWJsZU1hcD86IHN0cmluZztcblx0XHRcdGludGVybmFsTW9kZWxDb250ZXh0PzogSW50ZXJuYWxNb2RlbENvbnRleHQgfCBudWxsO1xuXHRcdFx0Z3JvdXBJZD86IHN0cmluZztcblx0XHRcdGRlZmF1bHRWYWx1ZXNFeHRlbnNpb25GdW5jdGlvbj86IHN0cmluZztcblx0XHRcdGlnbm9yZUVUYWc/OiBib29sZWFuO1xuXHRcdH0sXG5cdFx0YXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQsXG5cdFx0bWVzc2FnZUhhbmRsZXI6IE1lc3NhZ2VIYW5kbGVyXG5cdCk6IFByb21pc2U8UHJvbWlzZVNldHRsZWRSZXN1bHQ8T3BlcmF0aW9uUmVzdWx0PltdPiB7XG5cdFx0bVBhcmFtZXRlcnMgPSBnZXRQYXJhbWV0ZXJzKG1QYXJhbWV0ZXJzKTtcblx0XHRsZXQgY29udGV4dFRvUHJvY2Vzcztcblx0XHRsZXQgb01vZGVsOiBPRGF0YU1vZGVsIHwgdW5kZWZpbmVkO1xuXHRcdGlmICghc0FjdGlvbk5hbWUpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIlByb3ZpZGUgbmFtZSBvZiBhY3Rpb24gdG8gYmUgZXhlY3V0ZWRcIik7XG5cdFx0fVxuXHRcdC8vIGFjdGlvbiBpbXBvcnRzIGFyZSBub3QgZGlyZWN0bHkgb2J0YWluZWQgZnJvbSB0aGUgbWV0YU1vZGVsIGJ5IGl0IGlzIHByZXNlbnQgaW5zaWRlIHRoZSBlbnRpdHlDb250YWluZXJcblx0XHQvLyBhbmQgdGhlIGFjaW9ucyBpdCByZWZlcnMgdG8gcHJlc2VudCBvdXRzaWRlIHRoZSBlbnRpdHljb250YWluZXIsIGhlbmNlIHRvIG9idGFpbiBraW5kIG9mIHRoZSBhY3Rpb25cblx0XHQvLyBzcGxpdCgpIG9uIGl0cyBuYW1lIHdhcyByZXF1aXJlZFxuXHRcdGNvbnN0IHNOYW1lID0gc0FjdGlvbk5hbWUuc3BsaXQoXCIvXCIpWzFdO1xuXG5cdFx0Y29udGV4dFRvUHJvY2VzcyA9IHNOYW1lID8gdW5kZWZpbmVkIDogbVBhcmFtZXRlcnMuY29udGV4dHM7XG5cdFx0Ly9jaGVja2luZyB3aGV0aGVyIHRoZSBjb250ZXh0IGlzIGFuIGFycmF5IHdpdGggbW9yZSB0aGFuIDAgbGVuZ3RoIG9yIG5vdCBhbiBhcnJheShjcmVhdGUgYWN0aW9uKVxuXHRcdGlmIChjb250ZXh0VG9Qcm9jZXNzICYmICgoQXJyYXkuaXNBcnJheShjb250ZXh0VG9Qcm9jZXNzKSAmJiBjb250ZXh0VG9Qcm9jZXNzLmxlbmd0aCkgfHwgIUFycmF5LmlzQXJyYXkoY29udGV4dFRvUHJvY2VzcykpKSB7XG5cdFx0XHRjb250ZXh0VG9Qcm9jZXNzID0gQXJyYXkuaXNBcnJheShjb250ZXh0VG9Qcm9jZXNzKSA/IGNvbnRleHRUb1Byb2Nlc3NbMF0gOiBjb250ZXh0VG9Qcm9jZXNzO1xuXHRcdFx0b01vZGVsID0gY29udGV4dFRvUHJvY2Vzcy5nZXRNb2RlbCgpO1xuXHRcdH1cblx0XHRpZiAobVBhcmFtZXRlcnMubW9kZWwpIHtcblx0XHRcdG9Nb2RlbCA9IG1QYXJhbWV0ZXJzLm1vZGVsO1xuXHRcdH1cblx0XHRpZiAoIW9Nb2RlbCkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiUGFzcyBhIGNvbnRleHQgZm9yIGEgYm91bmQgYWN0aW9uIG9yIHBhc3MgdGhlIG1vZGVsIGZvciBhbiB1bmJvdW5kIGFjdGlvblwiKTtcblx0XHR9XG5cdFx0Y29uc3QgbWVzc2FnZUhhbmRsaW5nS2V5ID0gbWVzc2FnZUhhbmRsZXIucmVnaXN0ZXJUb0hvbGRNZXNzYWdlcygpO1xuXHRcdHRyeSB7XG5cdFx0XHRjb25zdCBjb250cm9sID0gKG1QYXJhbWV0ZXJzLmNvbnRyb2xJZCA/IG1QYXJhbWV0ZXJzLnZpZXcuYnlJZChtUGFyYW1ldGVycy5jb250cm9sSWQpIDogbVBhcmFtZXRlcnMudmlldykgYXNcblx0XHRcdFx0fCBDb250cm9sXG5cdFx0XHRcdHwgdW5kZWZpbmVkO1xuXHRcdFx0bGV0IG9SZXN1bHQ6IFByb21pc2VTZXR0bGVkUmVzdWx0PE9wZXJhdGlvblJlc3VsdD5bXTtcblx0XHRcdGlmIChjb250ZXh0VG9Qcm9jZXNzICYmIG1QYXJhbWV0ZXJzLmNvbnRleHRzKSB7XG5cdFx0XHRcdGNvbnN0IGNvbnRleHRzID0gQXJyYXkuaXNBcnJheShtUGFyYW1ldGVycy5jb250ZXh0cykgPyBtUGFyYW1ldGVycy5jb250ZXh0cyA6IFttUGFyYW1ldGVycy5jb250ZXh0c107IC8vIEVuc3VyZSB0aGF0IGNvbnRleHRzIGlzIGFuIGFycmF5IChmb3Igc3RhdGljIGFjdGlvbnMgaXQncyBub3QgYW4gd2UgbmVlZCB0byBmaXggaXQpXG5cblx0XHRcdFx0Y29uc3QgbWV0YU1vZGVsID0gb01vZGVsLmdldE1ldGFNb2RlbCgpLFxuXHRcdFx0XHRcdGFjdGlvblBhdGggPSBgJHttZXRhTW9kZWwuZ2V0TWV0YVBhdGgoY29udGV4dHNbMF0uZ2V0UGF0aCgpKX0vJHtzQWN0aW9uTmFtZX1gLFxuXHRcdFx0XHRcdGJvdW5kQWN0aW9uID0gbWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KGAke2FjdGlvblBhdGh9L0AkdWk1Lm92ZXJsb2FkLzBgKSE7XG5cblx0XHRcdFx0Y29uc3QgY29udmVydGVkVHlwZXMgPSBjb252ZXJ0VHlwZXMob01vZGVsLmdldE1ldGFNb2RlbCgpKTtcblx0XHRcdFx0Y29uc3QgY29udmVydGVkQWN0aW9uID0gY29udmVydGVkVHlwZXMucmVzb2x2ZVBhdGg8RWRtQWN0aW9uIHwgdW5kZWZpbmVkPihib3VuZEFjdGlvbi5nZXRQYXRoKCkpLnRhcmdldDtcblx0XHRcdFx0aWYgKCFjb252ZXJ0ZWRBY3Rpb24pIHtcblx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJVbmtub3duIGJvdW5kIGFjdGlvblwiKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRvUmVzdWx0ID0gYXdhaXQgbmV3IE9wZXJhdGlvbihhcHBDb21wb25lbnQsIG9Nb2RlbCwgY29udmVydGVkQWN0aW9uLCB7XG5cdFx0XHRcdFx0cGFyYW1ldGVyVmFsdWVzOiBtUGFyYW1ldGVycy5wYXJhbWV0ZXJWYWx1ZXMgYXMgUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgYm9vbGVhbiB8IG51bWJlciB8IE11bHRpVmFsdWVGaWVsZEl0ZW1bXT5bXSxcblx0XHRcdFx0XHRjb250ZXh0cyxcblx0XHRcdFx0XHRpbnZvY2F0aW9uR3JvdXBpbmc6IG1QYXJhbWV0ZXJzLmludm9jYXRpb25Hcm91cGluZyxcblx0XHRcdFx0XHRsYWJlbDogbVBhcmFtZXRlcnMubGFiZWwsXG5cdFx0XHRcdFx0c2tpcFBhcmFtZXRlckRpYWxvZzogbVBhcmFtZXRlcnMuc2tpcFBhcmFtZXRlckRpYWxvZyxcblx0XHRcdFx0XHRiaW5kaW5nUGFyYW1ldGVyczogbVBhcmFtZXRlcnMuYmluZGluZ1BhcmFtZXRlcnMsXG5cdFx0XHRcdFx0ZW50aXR5U2V0TmFtZTogbVBhcmFtZXRlcnMuZW50aXR5U2V0TmFtZSxcblx0XHRcdFx0XHRvRGF0YVByb3BlcnRpZXM6IHtcblx0XHRcdFx0XHRcdGdob3N0Q29udGV4dEJpbmRpbmdQcm90ZWN0aW9uOiB0cnVlLFxuXHRcdFx0XHRcdFx0ZW5oYW5jZSRzZWxlY3Q6IHRydWUsXG5cdFx0XHRcdFx0XHRncm91cElkOiBtUGFyYW1ldGVycy5ncm91cElkLFxuXHRcdFx0XHRcdFx0aWdub3JlRVRhZzogbVBhcmFtZXRlcnMuaWdub3JlRVRhZ1xuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0b0RhdGFFdmVudHM6IHtcblx0XHRcdFx0XHRcdG9uT0RhdGFTdWJtaXQ6ICgpOiB2b2lkID0+IHtcblx0XHRcdFx0XHRcdFx0bWVzc2FnZUhhbmRsZXI/LnJlbW92ZVRyYW5zaXRpb25NZXNzYWdlcygpO1xuXHRcdFx0XHRcdFx0XHR0aGlzLmJ1c3lMb2NrKGFwcENvbXBvbmVudCk7XG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0b25PRGF0YVJlc3BvbnNlOiAoKTogdm9pZCA9PiB7XG5cdFx0XHRcdFx0XHRcdHRoaXMuYnVzeVVubG9jayhhcHBDb21wb25lbnQpO1xuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdG9uUmVxdWVzdFNpZGVFZmZlY3RzOiAoKTogdm9pZCA9PiB7XG5cdFx0XHRcdFx0XHRcdHRoaXMuaGFuZGxlQWN0aW9uRW5hYmxlbWVudE9uT3BlcmF0aW9uKHtcblx0XHRcdFx0XHRcdFx0XHRpbnRlcm5hbE1vZGVsQ29udGV4dDogbVBhcmFtZXRlcnMuaW50ZXJuYWxNb2RlbENvbnRleHQsXG5cdFx0XHRcdFx0XHRcdFx0b3BlcmF0aW9uQXZhaWxhYmxlTWFwOiBtUGFyYW1ldGVycy5vcGVyYXRpb25BdmFpbGFibGVNYXAsXG5cdFx0XHRcdFx0XHRcdFx0Y29udHJvbDogY29udHJvbCxcblx0XHRcdFx0XHRcdFx0XHRjb250ZXh0cyxcblx0XHRcdFx0XHRcdFx0XHRjb252ZXJ0ZWRBY3Rpb25cblx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHR2aWV3OiBtUGFyYW1ldGVycy52aWV3IGFzIEZFVmlldyxcblx0XHRcdFx0XHRpc0NyZWF0ZUFjdGlvbjogbVBhcmFtZXRlcnMuaXNDcmVhdGVBY3Rpb24sXG5cdFx0XHRcdFx0bWVzc2FnZUhhbmRsZXI6IG1lc3NhZ2VIYW5kbGVyLFxuXHRcdFx0XHRcdGRlZmF1bHRWYWx1ZXNFeHRlbnNpb25GdW5jdGlvbjogbVBhcmFtZXRlcnMuZGVmYXVsdFZhbHVlc0V4dGVuc2lvbkZ1bmN0aW9uXG5cdFx0XHRcdH0pLmV4ZWN1dGUoKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG9SZXN1bHQgPSBhd2FpdCBvcGVyYXRpb25zLmNhbGxBY3Rpb25JbXBvcnQoc0FjdGlvbk5hbWUsIG9Nb2RlbCwgYXBwQ29tcG9uZW50LCB7XG5cdFx0XHRcdFx0cGFyYW1ldGVyVmFsdWVzOiBtUGFyYW1ldGVycy5wYXJhbWV0ZXJWYWx1ZXMgYXMgUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgYm9vbGVhbiB8IG51bWJlciB8IE11bHRpVmFsdWVGaWVsZEl0ZW1bXT5bXSxcblx0XHRcdFx0XHRsYWJlbDogbVBhcmFtZXRlcnMubGFiZWwsXG5cdFx0XHRcdFx0c2tpcFBhcmFtZXRlckRpYWxvZzogbVBhcmFtZXRlcnMuc2tpcFBhcmFtZXRlckRpYWxvZyxcblx0XHRcdFx0XHRiaW5kaW5nUGFyYW1ldGVyczogbVBhcmFtZXRlcnMuYmluZGluZ1BhcmFtZXRlcnMsXG5cdFx0XHRcdFx0ZW50aXR5U2V0TmFtZTogbVBhcmFtZXRlcnMuZW50aXR5U2V0TmFtZSxcblx0XHRcdFx0XHRvRGF0YUV2ZW50czoge1xuXHRcdFx0XHRcdFx0b25PRGF0YVN1Ym1pdDogKCkgPT4ge1xuXHRcdFx0XHRcdFx0XHR0aGlzLmJ1c3lMb2NrKGFwcENvbXBvbmVudCk7XG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0b25PRGF0YVJlc3BvbnNlOiAoKSA9PiB7XG5cdFx0XHRcdFx0XHRcdHRoaXMuYnVzeVVubG9jayhhcHBDb21wb25lbnQpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0b0RhdGFQcm9wZXJ0aWVzOiB7XG5cdFx0XHRcdFx0XHRpZ25vcmVFVGFnOiBtUGFyYW1ldGVycy5pZ25vcmVFVGFnXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRtZXNzYWdlSGFuZGxlcjogbWVzc2FnZUhhbmRsZXIsXG5cdFx0XHRcdFx0dmlldzogbVBhcmFtZXRlcnMudmlldyBhcyBGRVZpZXdcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0XHRhd2FpdCB0aGlzLl9oYW5kbGVBY3Rpb25SZXNwb25zZShtZXNzYWdlSGFuZGxlciwgbVBhcmFtZXRlcnMsIHNBY3Rpb25OYW1lLCBtZXNzYWdlSGFuZGxpbmdLZXkpO1xuXHRcdFx0cmV0dXJuIG9SZXN1bHQ7XG5cdFx0fSBjYXRjaCAoZXJyOiB1bmtub3duKSB7XG5cdFx0XHRhd2FpdCB0aGlzLl9oYW5kbGVBY3Rpb25SZXNwb25zZShtZXNzYWdlSGFuZGxlciwgbVBhcmFtZXRlcnMsIHNBY3Rpb25OYW1lLCBtZXNzYWdlSGFuZGxpbmdLZXkpO1xuXHRcdFx0dGhyb3cgZXJyO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBjb2xsZWN0aW9uIG5hbWUgZnJvbSB0aGUgY29udGV4dC5cblx0ICogQHBhcmFtIGNvbnRleHQgVGhlIGNvbnRleHRcblx0ICogQHJldHVybnMgVGhlIGNvbGxlY3Rpb24gbmFtZVxuXHQgKi9cblx0Z2V0Q29sbGVjdGlvbk5hbWVGcm9tQ29udGV4dChjb250ZXh0OiBPRGF0YVY0Q29udGV4dCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdFx0Y29uc3QgbWV0YUNvbnRleHQgPSBjb250ZXh0LmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCkuZ2V0TWV0YUNvbnRleHQoY29udGV4dC5nZXRQYXRoKCkpO1xuXHRcdHJldHVybiAoTWV0YU1vZGVsQ29udmVydGVyLmdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyhtZXRhQ29udGV4dCkudGFyZ2V0T2JqZWN0IGFzIEVudGl0eVNldCB8IE5hdmlnYXRpb25Qcm9wZXJ0eSB8IHVuZGVmaW5lZClcblx0XHRcdD8ubmFtZTtcblx0fVxuXG5cdGhhbmRsZUFjdGlvbkVuYWJsZW1lbnRPbk9wZXJhdGlvbihwYXJhbWV0ZXJzOiB7XG5cdFx0aW50ZXJuYWxNb2RlbENvbnRleHQ/OiBJbnRlcm5hbE1vZGVsQ29udGV4dCB8IG51bGw7XG5cdFx0b3BlcmF0aW9uQXZhaWxhYmxlTWFwPzogc3RyaW5nO1xuXHRcdGNvbnRyb2w/OiBDb250cm9sO1xuXHRcdGNvbnRleHRzPzogT0RhdGFWNENvbnRleHRbXTtcblx0XHRjb252ZXJ0ZWRBY3Rpb246IEVkbUFjdGlvbjtcblx0fSk6IHZvaWQge1xuXHRcdGlmIChwYXJhbWV0ZXJzLmludGVybmFsTW9kZWxDb250ZXh0ICYmIHBhcmFtZXRlcnMub3BlcmF0aW9uQXZhaWxhYmxlTWFwKSB7XG5cdFx0XHRsZXQgc2VsZWN0ZWRDb250ZXh0czogT0RhdGFWNENvbnRleHRbXSA9IFtdO1xuXHRcdFx0Ly9jaGVjayBmb3Igc2tpcHBpbmcgc3RhdGljIGFjdGlvbnNcblx0XHRcdGlmICghYWN0aW9uSGVscGVyLmlzU3RhdGljQWN0aW9uKHBhcmFtZXRlcnMuY29udmVydGVkQWN0aW9uKSkge1xuXHRcdFx0XHRzZWxlY3RlZENvbnRleHRzID0gcGFyYW1ldGVycy5pbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQcm9wZXJ0eShcInNlbGVjdGVkQ29udGV4dHNcIikgfHwgW107XG5cdFx0XHRcdEFjdGlvblJ1bnRpbWUuc2V0QWN0aW9uRW5hYmxlbWVudChcblx0XHRcdFx0XHRwYXJhbWV0ZXJzLmludGVybmFsTW9kZWxDb250ZXh0LFxuXHRcdFx0XHRcdEpTT04ucGFyc2UocGFyYW1ldGVycy5vcGVyYXRpb25BdmFpbGFibGVNYXApLFxuXHRcdFx0XHRcdHNlbGVjdGVkQ29udGV4dHMsXG5cdFx0XHRcdFx0XCJ0YWJsZVwiXG5cdFx0XHRcdCk7XG5cdFx0XHR9IGVsc2UgaWYgKHBhcmFtZXRlcnMuY29udHJvbCkge1xuXHRcdFx0XHRpZiAocGFyYW1ldGVycy5jb250cm9sLmlzQTxUYWJsZT4oXCJzYXAudWkubWRjLlRhYmxlXCIpKSB7XG5cdFx0XHRcdFx0c2VsZWN0ZWRDb250ZXh0cyA9IHBhcmFtZXRlcnMuY29udHJvbC5nZXRTZWxlY3RlZENvbnRleHRzKCkgYXMgT0RhdGFWNENvbnRleHRbXTtcblx0XHRcdFx0XHRBY3Rpb25SdW50aW1lLnNldEFjdGlvbkVuYWJsZW1lbnQoXG5cdFx0XHRcdFx0XHRwYXJhbWV0ZXJzLmludGVybmFsTW9kZWxDb250ZXh0LFxuXHRcdFx0XHRcdFx0SlNPTi5wYXJzZShwYXJhbWV0ZXJzLm9wZXJhdGlvbkF2YWlsYWJsZU1hcCksXG5cdFx0XHRcdFx0XHRzZWxlY3RlZENvbnRleHRzLFxuXHRcdFx0XHRcdFx0XCJ0YWJsZVwiXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0Ly91cGRhdGUgZGVsZXRlIGJ1dHRvblxuXHRcdFx0ZGVsZXRlSGVscGVyLnVwZGF0ZURlbGV0ZUluZm9Gb3JTZWxlY3RlZENvbnRleHRzKHBhcmFtZXRlcnMuaW50ZXJuYWxNb2RlbENvbnRleHQsIHNlbGVjdGVkQ29udGV4dHMpO1xuXHRcdH1cblx0fVxuXG5cdGFzeW5jIF9oYW5kbGVBY3Rpb25SZXNwb25zZShcblx0XHRtZXNzYWdlSGFuZGxlcjogTWVzc2FnZUhhbmRsZXIsXG5cdFx0cGFyYW1ldGVyczoge1xuXHRcdFx0Y29udGV4dHM/OiBPRGF0YVY0Q29udGV4dCB8IE9EYXRhVjRDb250ZXh0W10gfCBudWxsO1xuXHRcdFx0Y29udHJvbD86IENvbnRyb2w7XG5cdFx0XHRjb250cm9sSWQ/OiBzdHJpbmc7XG5cdFx0XHR2aWV3PzogVmlldztcblx0XHRcdGxhYmVsPzogc3RyaW5nO1xuXHRcdFx0aW50ZXJuYWxNb2RlbENvbnRleHQ/OiBJbnRlcm5hbE1vZGVsQ29udGV4dCB8IG51bGw7XG5cdFx0fSxcblx0XHRzQWN0aW9uTmFtZTogc3RyaW5nLFxuXHRcdG1lc3NhZ2VIYW5kbGluZ0tleTogc3RyaW5nXG5cdCk6IFByb21pc2U8dW5rbm93bj4ge1xuXHRcdGNvbnN0IGFjdGlvbk5hbWUgPSBwYXJhbWV0ZXJzLmxhYmVsID8gcGFyYW1ldGVycy5sYWJlbCA6IHNBY3Rpb25OYW1lO1xuXG5cdFx0Y29uc3QgYVRyYW5zaWVudE1lc3NhZ2VzID0gbWVzc2FnZUhhbmRsaW5nLmdldE1lc3NhZ2VzKHRydWUsIHRydWUpO1xuXHRcdGlmIChhVHJhbnNpZW50TWVzc2FnZXMubGVuZ3RoID4gMCAmJiBwYXJhbWV0ZXJzLmludGVybmFsTW9kZWxDb250ZXh0KSB7XG5cdFx0XHRwYXJhbWV0ZXJzLmludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwic0FjdGlvbk5hbWVcIiwgYWN0aW9uTmFtZSk7XG5cdFx0fVxuXHRcdGxldCBjb250cm9sO1xuXHRcdGlmIChwYXJhbWV0ZXJzLmNvbnRyb2xJZCAmJiBwYXJhbWV0ZXJzLnZpZXcpIHtcblx0XHRcdGNvbnRyb2wgPSBwYXJhbWV0ZXJzLnZpZXcuYnlJZChwYXJhbWV0ZXJzLmNvbnRyb2xJZCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbnRyb2wgPSBwYXJhbWV0ZXJzLnZpZXc7XG5cdFx0fVxuXHRcdHJldHVybiBtZXNzYWdlSGFuZGxlci5zaG93TWVzc2FnZXMoe1xuXHRcdFx0c0FjdGlvbk5hbWU6IGFjdGlvbk5hbWUsXG5cdFx0XHRjb250cm9sOiBjb250cm9sIGFzIHVua25vd24gYXMgQ29udHJvbCxcblx0XHRcdHVuSG9sZEtleTogbWVzc2FnZUhhbmRsaW5nS2V5LFxuXHRcdFx0YVNlbGVjdGVkQ29udGV4dHM6IHBhcmFtZXRlcnMuY29udGV4dHNcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBIYW5kbGVzIHZhbGlkYXRpb24gZXJyb3JzIGZvciB0aGUgJ0Rpc2NhcmQnIGFjdGlvbi5cblx0ICogQGZpbmFsXG5cdCAqL1xuXHRoYW5kbGVWYWxpZGF0aW9uRXJyb3IoKTogdm9pZCB7XG5cdFx0Y29uc3QgZXJyb3JUb1JlbW92ZSA9IE1lc3NhZ2luZy5nZXRNZXNzYWdlTW9kZWwoKVxuXHRcdFx0LmdldERhdGEoKVxuXHRcdFx0LmZpbHRlcigoZXJyb3I6IE1lc3NhZ2UpID0+IGVycm9yLnZhbGlkYXRpb24pOyAvLyBvbmx5IG5lZWRzIHRvIGhhbmRsZSB2YWxpZGF0aW9uIG1lc3NhZ2VzLCB0ZWNobmljYWwgYW5kIHBlcnNpc3RlbnQgZXJyb3JzIG5lZWRzIG5vdCB0byBiZSBjaGVja2VkIGhlcmUuXG5cdFx0TWVzc2FnaW5nLnJlbW92ZU1lc3NhZ2VzKGVycm9yVG9SZW1vdmUpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENyZWF0ZXMgYSBuZXcgUG9wb3Zlci4gRmFjdG9yeSBtZXRob2QgdG8gbWFrZSB1bml0IHRlc3RzIGVhc2llci5cblx0ICogQHBhcmFtIHNldHRpbmdzIEluaXRpYWwgcGFyYW1ldGVycyBmb3IgdGhlIHBvcG92ZXJcblx0ICogQHJldHVybnMgQSBuZXcgUG9wb3ZlclxuXHQgKi9cblx0X2NyZWF0ZVBvcG92ZXIoc2V0dGluZ3M/OiAkUG9wb3ZlclNldHRpbmdzKTogUG9wb3ZlciB7XG5cdFx0cmV0dXJuIG5ldyBQb3BvdmVyKHNldHRpbmdzKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTaG93cyBhIHBvcG92ZXIgdG8gY29uZmlybSBkaXNjYXJkIGlmIG5lZWRlZC5cblx0ICogQHBhcmFtIGNhbmNlbEJ1dHRvbiBUaGUgY29udHJvbCB3aGljaCB3aWxsIG9wZW4gdGhlIHBvcG92ZXJcblx0ICogQHBhcmFtIGlzTW9kaWZpZWQgVHJ1ZSBpZiB0aGUgb2JqZWN0IGhhcyBiZWVuIG1vZGlmaWVkIGFuZCBhIGNvbmZpcm1hdGlvbiBwb3BvdmVyIG11c3QgYmUgc2hvd25cblx0ICogQHBhcmFtIHJlc291cmNlTW9kZWwgVGhlIG1vZGVsIHRvIGxvYWQgdGV4dCByZXNvdXJjZXNcblx0ICogQHJldHVybnMgUHJvbWlzZSByZXNvbHZlcyBpZiB1c2VyIGNvbmZpcm1zIGRpc2NhcmQsIHJlamVjdHMgaWYgb3RoZXJ3aXNlLCByZWplY3RzIGlmIG5vIGNvbnRyb2wgcGFzc2VkIHRvIG9wZW4gcG9wb3ZlclxuXHQgKiBAZmluYWxcblx0ICovXG5cdGFzeW5jIF9jb25maXJtRGlzY2FyZChjYW5jZWxCdXR0b246IEJ1dHRvbiwgaXNNb2RpZmllZDogYm9vbGVhbiwgcmVzb3VyY2VNb2RlbDogUmVzb3VyY2VNb2RlbCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdC8vIElmIHRoZSBkYXRhIGlzbid0IG1vZGlmaWVkLCBkbyBub3Qgc2hvdyBhbnkgY29uZmlybWF0aW9uIHBvcG92ZXJcblx0XHRpZiAoIWlzTW9kaWZpZWQpIHtcblx0XHRcdHRoaXMuaGFuZGxlVmFsaWRhdGlvbkVycm9yKCk7XG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG5cdFx0fVxuXG5cdFx0Y2FuY2VsQnV0dG9uLnNldEVuYWJsZWQoZmFsc2UpO1xuXHRcdHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0XHRjb25zdCBjb25maXJtYXRpb25Qb3BvdmVyID0gdGhpcy5fY3JlYXRlUG9wb3Zlcih7XG5cdFx0XHRcdHNob3dIZWFkZXI6IGZhbHNlLFxuXHRcdFx0XHRwbGFjZW1lbnQ6IFwiVG9wXCJcblx0XHRcdH0pO1xuXHRcdFx0Y29uZmlybWF0aW9uUG9wb3Zlci5hZGRTdHlsZUNsYXNzKFwic2FwVWlDb250ZW50UGFkZGluZ1wiKTtcblxuXHRcdFx0Ly8gQ3JlYXRlIHRoZSBjb250ZW50IG9mIHRoZSBwb3BvdmVyXG5cdFx0XHRjb25zdCB0aXRsZSA9IG5ldyBUZXh0KHtcblx0XHRcdFx0dGV4dDogcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiQ19UUkFOU0FDVElPTl9IRUxQRVJfRFJBRlRfRElTQ0FSRF9NRVNTQUdFXCIpXG5cdFx0XHR9KTtcblx0XHRcdGNvbnN0IGNvbmZpcm1CdXR0b24gPSBuZXcgQnV0dG9uKHtcblx0XHRcdFx0dGV4dDogcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiQ19UUkFOU0FDVElPTl9IRUxQRVJfRFJBRlRfRElTQ0FSRF9CVVRUT05cIiksXG5cdFx0XHRcdHdpZHRoOiBcIjEwMCVcIixcblx0XHRcdFx0cHJlc3M6ICgpOiB2b2lkID0+IHtcblx0XHRcdFx0XHR0aGlzLmhhbmRsZVZhbGlkYXRpb25FcnJvcigpO1xuXHRcdFx0XHRcdGNvbmZpcm1hdGlvblBvcG92ZXIuZGF0YShcImNvbnRpbnVlRGlzY2FyZFwiLCB0cnVlKTtcblx0XHRcdFx0XHRjb25maXJtYXRpb25Qb3BvdmVyLmNsb3NlKCk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdFx0Y29uZmlybWF0aW9uUG9wb3Zlci5hZGRDb250ZW50KG5ldyBWQm94KHsgaXRlbXM6IFt0aXRsZSwgY29uZmlybUJ1dHRvbl0gfSkpO1xuXG5cdFx0XHQvLyBBdHRhY2ggaGFuZGxlclxuXHRcdFx0Y29uZmlybWF0aW9uUG9wb3Zlci5hdHRhY2hCZWZvcmVPcGVuKCgpID0+IHtcblx0XHRcdFx0Y29uZmlybWF0aW9uUG9wb3Zlci5zZXRJbml0aWFsRm9jdXMoY29uZmlybUJ1dHRvbik7XG5cdFx0XHR9KTtcblx0XHRcdGNvbmZpcm1hdGlvblBvcG92ZXIuYXR0YWNoQWZ0ZXJDbG9zZSgoKSA9PiB7XG5cdFx0XHRcdGNhbmNlbEJ1dHRvbi5zZXRFbmFibGVkKHRydWUpO1xuXHRcdFx0XHRpZiAoY29uZmlybWF0aW9uUG9wb3Zlci5kYXRhKFwiY29udGludWVEaXNjYXJkXCIpKSB7XG5cdFx0XHRcdFx0cmVzb2x2ZSgpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHJlamVjdCgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblxuXHRcdFx0Y29uZmlybWF0aW9uUG9wb3Zlci5vcGVuQnkoY2FuY2VsQnV0dG9uLCBmYWxzZSk7XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogUmVsb2FkcyBkYXRhIGZvciBhbiBPRGF0YUxpc3RCaW5kaW5nLlxuXHQgKiBAcGFyYW0gbGlzdEJpbmRpbmcgVGhlIGxpc3RiaW5kaW5nIHRvIHJlZnJlc2hcblx0ICogQHBhcmFtIGFwcENvbXBvbmVudFxuXHQgKiBAcmV0dXJucyBUaGUgY29ycmVzcG9uZGluZyBwcm9taXNlXG5cdCAqL1xuXHRhc3luYyByZWZyZXNoTGlzdEJpbmRpbmcobGlzdEJpbmRpbmc6IE9EYXRhTGlzdEJpbmRpbmcsIGFwcENvbXBvbmVudDogQXBwQ29tcG9uZW50KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0dHJ5IHtcblx0XHRcdGlmIChsaXN0QmluZGluZy5pc1Jvb3QoKSkge1xuXHRcdFx0XHRpZiAodGhpcy5pc0xpc3RCaW5kaW5nSGllcmFyY2hpY2FsKGxpc3RCaW5kaW5nKSkge1xuXHRcdFx0XHRcdC8vIFdlIHVzZSBhIHNpZGUtZWZmZWN0IHJlZnJlc2ggZm9yIGEgVHJlZVRhYmxlLCB0byBwcmVzZXJ2ZSBleHBhbnNpb24gc3RhdGVzXG5cdFx0XHRcdFx0YXdhaXQgYXBwQ29tcG9uZW50XG5cdFx0XHRcdFx0XHQuZ2V0U2lkZUVmZmVjdHNTZXJ2aWNlKClcblx0XHRcdFx0XHRcdC5yZXF1ZXN0U2lkZUVmZmVjdHMoW3sgJE5hdmlnYXRpb25Qcm9wZXJ0eVBhdGg6IFwiXCIgfV0sIGxpc3RCaW5kaW5nLmdldEhlYWRlckNvbnRleHQoKSEpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGF3YWl0IGxpc3RCaW5kaW5nLnJlcXVlc3RSZWZyZXNoKCk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGF3YWl0IGFwcENvbXBvbmVudFxuXHRcdFx0XHRcdC5nZXRTaWRlRWZmZWN0c1NlcnZpY2UoKVxuXHRcdFx0XHRcdC5yZXF1ZXN0U2lkZUVmZmVjdHMoW3sgJE5hdmlnYXRpb25Qcm9wZXJ0eVBhdGg6IGxpc3RCaW5kaW5nLmdldFBhdGgoKSB9XSwgbGlzdEJpbmRpbmcuZ2V0Q29udGV4dCgpKTtcblx0XHRcdH1cblx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0TG9nLmVycm9yKGBFcnJvciB3aGlsZSByZWZyZXNoaW5nIGxpc3QgYmluZGluZyAke2xpc3RCaW5kaW5nLmdldFBhdGgoKX1gLCBlcnJvciBhcyBzdHJpbmcpO1xuXHRcdH1cblx0fVxuXG5cdGFzeW5jIGNyZWF0ZVdpdGhEaWFsb2coXG5cdFx0bGlzdEJpbmRpbmc6IE9EYXRhTGlzdEJpbmRpbmcsXG5cdFx0ZmllbGROYW1lczogc3RyaW5nW10sXG5cdFx0cGFyYW1ldGVyczoge1xuXHRcdFx0cGFyZW50Q29udHJvbD86IENvbnRyb2w7XG5cdFx0XHRkYXRhPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cdFx0XHRiSXNDcmVhdGVEaWFsb2c/OiBib29sZWFuO1xuXHRcdFx0YmVmb3JlQ3JlYXRlQ2FsbEJhY2s/OiBGdW5jdGlvbjtcblx0XHRcdGFmdGVyQ3JlYXRlQ2FsbEJhY2s/OiAobmV3RG9jdW1lbnRDb250ZXh0OiBPRGF0YVY0Q29udGV4dCkgPT4gUHJvbWlzZTx2b2lkPjtcblx0XHRcdGNyZWF0ZUF0RW5kPzogYm9vbGVhbjtcblx0XHRcdGluYWN0aXZlPzogYm9vbGVhbjtcblx0XHRcdHBhcmVudENvbnRleHQ/OiBPRGF0YVY0Q29udGV4dDtcblx0XHRcdGtlZXBUcmFuc2llbnRDb250ZXh0T25GYWlsZWQ/OiBib29sZWFuO1xuXHRcdFx0Y3JlYXRlQWN0aW9uPzogYm9vbGVhbjtcblx0XHRcdGNyZWF0aW9uTW9kZT86IHN0cmluZztcblx0XHR9LFxuXHRcdGFwcENvbXBvbmVudDogQXBwQ29tcG9uZW50LFxuXHRcdHJlc291cmNlTW9kZWw6IFJlc291cmNlTW9kZWwsXG5cdFx0bWVzc2FnZUhhbmRsZXI6IE1lc3NhZ2VIYW5kbGVyXG5cdCk6IFByb21pc2U8T0RhdGFWNENvbnRleHQ+IHtcblx0XHRjb25zdCBtb2RlbCA9IGxpc3RCaW5kaW5nLmdldE1vZGVsKCkgYXMgT0RhdGFNb2RlbDtcblx0XHRjb25zdCBtZXRhTW9kZWwgPSBtb2RlbC5nZXRNZXRhTW9kZWwoKTtcblx0XHRjb25zdCBsaXN0TWV0YVBhdGggPSBtZXRhTW9kZWwuZ2V0TWV0YVBhdGgobGlzdEJpbmRpbmcuZ2V0UmVzb2x2ZWRQYXRoKCkhKTtcblxuXHRcdC8vIENyZWF0ZSBhIGZha2UgKHRyYW5zaWVudCkgbGlzdEJpbmRpbmcgYW5kIGNvbnRleHQsIGp1c3QgZm9yIHRoZSBiaW5kaW5nIGNvbnRleHQgb2YgdGhlIGRpYWxvZ1xuXHRcdGNvbnN0IHRyYW5zaWVudExpc3RCaW5kaW5nID0gbW9kZWwuYmluZExpc3QobGlzdEJpbmRpbmcuZ2V0UGF0aCgpLCBsaXN0QmluZGluZy5nZXRDb250ZXh0KCksIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB7XG5cdFx0XHQkJHVwZGF0ZUdyb3VwSWQ6IFwic3VibWl0TGF0ZXJcIlxuXHRcdH0pO1xuXHRcdHRyYW5zaWVudExpc3RCaW5kaW5nLnJlZnJlc2hJbnRlcm5hbCA9IGZ1bmN0aW9uICgpOiB2b2lkIHtcblx0XHRcdC8qICovXG5cdFx0fTtcblx0XHRjb25zdCB0cmFuc2llbnRDb250ZXh0ID0gdHJhbnNpZW50TGlzdEJpbmRpbmcuY3JlYXRlKHBhcmFtZXRlcnMuZGF0YSwgdHJ1ZSk7XG5cdFx0Y29uc3QgZmllbGRNZXRhQ29udGV4dHMgPSBmaWVsZE5hbWVzLm1hcCgobmFtZSkgPT4ge1xuXHRcdFx0cmV0dXJuIG1ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChgJHtsaXN0TWV0YVBhdGh9LyR7bmFtZX1gKSBhcyBDb250ZXh0O1xuXHRcdH0pO1xuXG5cdFx0Y29uc3QgY3JlYXRlRGlhbG9nID0gZ2V0Q29yZVVJRmFjdG9yeSgpLm5ld0NyZWF0ZURpYWxvZyhcblx0XHRcdHRyYW5zaWVudENvbnRleHQsXG5cdFx0XHRmaWVsZE5hbWVzLFxuXHRcdFx0YXBwQ29tcG9uZW50LFxuXHRcdFx0cGFyYW1ldGVycy5jcmVhdGlvbk1vZGUgPT09IENyZWF0aW9uTW9kZS5DcmVhdGlvbkRpYWxvZyA/IFwiU3RhbmRhbG9uZVwiIDogXCJXaXRoTmF2aWdhdGlvblwiLFxuXHRcdFx0cGFyYW1ldGVycy5wYXJlbnRDb250cm9sXG5cdFx0KTtcblxuXHRcdHRyeSB7XG5cdFx0XHRhd2FpdCBDb21tb25VdGlscy5zZXRVc2VyRGVmYXVsdHMoXG5cdFx0XHRcdGFwcENvbXBvbmVudCxcblx0XHRcdFx0ZmllbGRNZXRhQ29udGV4dHMsXG5cdFx0XHRcdHRyYW5zaWVudENvbnRleHQsXG5cdFx0XHRcdGZhbHNlLFxuXHRcdFx0XHRwYXJhbWV0ZXJzLmNyZWF0ZUFjdGlvbixcblx0XHRcdFx0cGFyYW1ldGVycy5kYXRhXG5cdFx0XHQpO1xuXHRcdFx0Y3JlYXRlRGlhbG9nLm9wZW5EaWFsb2coKTtcblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRhd2FpdCBtZXNzYWdlSGFuZGxlci5zaG93TWVzc2FnZXMoKTtcblx0XHRcdHRocm93IGU7XG5cdFx0fVxuXG5cdFx0Y29uc3QgcmVzdWx0UHJvbWlzZUtlZXBlciA9IG5ldyBQcm9taXNlS2VlcGVyPE9EYXRhVjRDb250ZXh0PigpO1xuXG5cdFx0Y29uc3Qgb25FeGl0RGlhbG9nID0gYXN5bmMgKGV2ZW50OiBFeGl0RGlhbG9nRXZlbnQpOiBQcm9taXNlPHZvaWQ+ID0+IHtcblx0XHRcdGlmICghZXZlbnQuZ2V0UGFyYW1ldGVyKFwiYWNjZXB0XCIpKSB7XG5cdFx0XHRcdC8vIFVzZXIgaGFzIGNhbmNlbGxlZCBjcmVhdGlvbjogZGVzdHJveSB0aGUgdHJhbnNpZW50IGxpc3QgYmluZGluZyBhbmQgY2xvc2UgdGhlIGRpYWxvZ1xuXHRcdFx0XHR0cmFuc2llbnRMaXN0QmluZGluZy5kZXN0cm95KCk7XG5cdFx0XHRcdGNyZWF0ZURpYWxvZy5jbG9zZURpYWxvZygpO1xuXHRcdFx0XHRyZXN1bHRQcm9taXNlS2VlcGVyLnJlamVjdChGRUxpYnJhcnkuQ29uc3RhbnRzLkNhbmNlbEFjdGlvbkRpYWxvZyk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0Y3JlYXRlRGlhbG9nLnNldEJ1c3kodHJ1ZSk7XG5cdFx0XHRwYXJhbWV0ZXJzLmJJc0NyZWF0ZURpYWxvZyA9IHRydWU7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRjb25zdCB0cmFuc2llbnREYXRhID0gdHJhbnNpZW50Q29udGV4dC5nZXRPYmplY3QoKTtcblx0XHRcdFx0bGV0IGNyZWF0ZURhdGE6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG5cdFx0XHRcdE9iamVjdC5rZXlzKHRyYW5zaWVudERhdGEpLmZvckVhY2goKHByb3BlcnR5UGF0aCkgPT4ge1xuXHRcdFx0XHRcdGNvbnN0IG9Qcm9wZXJ0eSA9IG1ldGFNb2RlbC5nZXRPYmplY3QoYCR7bGlzdE1ldGFQYXRofS8ke3Byb3BlcnR5UGF0aH1gKTtcblx0XHRcdFx0XHQvLyBFbnN1cmUgbmF2aWdhdGlvbiBwcm9wZXJ0aWVzIGFyZSBub3QgcGFydCBvZiB0aGUgcGF5bG9hZCwgYXMgZGVlcCBjcmVhdGUgbm90IHN1cHBvcnRlZFxuXHRcdFx0XHRcdC8vIEFuZCByZW1vdmUgYW55IHByb3BlcnR5IHN0YXJ0aW5nIGJ5IEAkdWk1IGFzIHRoZXkgYXJlIG5vdCBwcm9wZXJ0eSBjcmVhdGVkIGJ5IGZpbGxpbmcgdGhlIGZvcm1cblx0XHRcdFx0XHRpZiAob1Byb3BlcnR5ICYmIG9Qcm9wZXJ0eS4ka2luZCAhPT0gXCJOYXZpZ2F0aW9uUHJvcGVydHlcIiAmJiAhcHJvcGVydHlQYXRoPy5zdGFydHNXaXRoKFwiQCR1aTVcIikpIHtcblx0XHRcdFx0XHRcdGNyZWF0ZURhdGFbcHJvcGVydHlQYXRoXSA9IHRyYW5zaWVudERhdGFbcHJvcGVydHlQYXRoXTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXG5cdFx0XHRcdGlmIChwYXJhbWV0ZXJzLmJlZm9yZUNyZWF0ZUNhbGxCYWNrKSB7XG5cdFx0XHRcdFx0Ly9iZWZvcmVDcmVhdGVDYWxsQmFjayBleHBlY3RzIGNyZWF0ZVBhcmFtZXRlcnMgb2YgdHlwZSBhbnlbXVxuXHRcdFx0XHRcdGNvbnN0IGNyZWF0ZURhdGFBc0FycmF5ID0gT2JqZWN0LmVudHJpZXMoY3JlYXRlRGF0YSkubWFwKChba2V5LCB2YWx1ZV0pID0+ICh7IFtrZXldOiB2YWx1ZSB9KSk7XG5cdFx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRcdGF3YWl0IHRvRVM2UHJvbWlzZShcblx0XHRcdFx0XHRcdFx0cGFyYW1ldGVycy5iZWZvcmVDcmVhdGVDYWxsQmFjayh7XG5cdFx0XHRcdFx0XHRcdFx0Y29udGV4dFBhdGg6IGxpc3RCaW5kaW5nLmdldFBhdGgoKSxcblx0XHRcdFx0XHRcdFx0XHRjcmVhdGVQYXJhbWV0ZXJzOiBjcmVhdGVEYXRhQXNBcnJheVxuXHRcdFx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0XHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgY3JlYXRpbmcgdGhlIG5ldyBkb2N1bWVudFwiLCBlcnJvciBhcyBzdHJpbmcpO1xuXHRcdFx0XHRcdFx0dGhyb3cgRkVMaWJyYXJ5LkNvbnN0YW50cy5PbkJlZm9yZUNyZWF0ZUZhaWxlZDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Y3JlYXRlRGF0YSA9IGNyZWF0ZURhdGFBc0FycmF5LnJlZHVjZSgocmVzdWx0LCBjdXJyZW50T2JqZWN0KSA9PiB7XG5cdFx0XHRcdFx0XHRyZXR1cm4geyAuLi5yZXN1bHQsIC4uLmN1cnJlbnRPYmplY3QgfTtcblx0XHRcdFx0XHR9LCB7fSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKE9iamVjdC5rZXlzKGNyZWF0ZURhdGEpLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHRhcHBDb21wb25lbnQuZ2V0TW9kZWwoXCJ1aVwiKS5zZXRQcm9wZXJ0eShVaU1vZGVsQ29uc3RhbnRzLkRvY3VtZW50TW9kaWZpZWQsIHRydWUpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnN0IG5ld0NvbnRleHQgPSBhd2FpdCB0aGlzLmNyZWF0ZUNvbnRleHQobGlzdEJpbmRpbmcsIGNyZWF0ZURhdGEsIHtcblx0XHRcdFx0XHRjcmVhdGVBdEVuZDogcGFyYW1ldGVycy5jcmVhdGVBdEVuZCxcblx0XHRcdFx0XHRjcmVhdGVJbmFjdGl2ZTogcGFyYW1ldGVycy5pbmFjdGl2ZSxcblx0XHRcdFx0XHRwYXJlbnRDb250ZXh0OiBwYXJhbWV0ZXJzLnBhcmVudENvbnRleHRcblx0XHRcdFx0fSk7XG5cblx0XHRcdFx0Y29uc3QgY3JlYXRpb25TdWNjZXNzID0gYXdhaXQgdGhpcy53YWl0Rm9yQ3JlYXRlQ29tcGxldGlvbihuZXdDb250ZXh0LCBwYXJhbWV0ZXJzLmtlZXBUcmFuc2llbnRDb250ZXh0T25GYWlsZWQgPT09IHRydWUpO1xuXHRcdFx0XHRpZiAoY3JlYXRpb25TdWNjZXNzKSB7XG5cdFx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRcdGF3YWl0IHBhcmFtZXRlcnMuYWZ0ZXJDcmVhdGVDYWxsQmFjaz8uKG5ld0NvbnRleHQpO1xuXHRcdFx0XHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRcdFx0XHRjcmVhdGVEaWFsb2cuZGlzcGxheUVycm9yTWVzc2FnZXMoTWVzc2FnaW5nLmdldE1lc3NhZ2VNb2RlbCgpLmdldERhdGEoKSk7XG5cdFx0XHRcdFx0XHRhd2FpdCBtZXNzYWdlSGFuZGxlci5zaG93TWVzc2FnZURpYWxvZyh7IHNob3dCb3VuZFN0YXRlTWVzc2FnZXM6IHRydWUgfSk7XG5cblx0XHRcdFx0XHRcdC8vIERlbGV0ZSB0aGUgY3JlYXRlZCBkb2N1bWVudCBhbmQgcmVmcmVzaCBpdHMgbGlzdCBiaW5kaW5nIChvdGhlcndpc2UgdGhlIGNyZWF0ZWQgZG9jdW1lbnQgaXMgc3RpbGwgdmlzaWJsZSBpbiB0aGUgbGlzdClcblx0XHRcdFx0XHRcdGF3YWl0IHRoaXMuZGVsZXRlRG9jdW1lbnQobmV3Q29udGV4dCwgeyBzaWxlbnRNb2RlOiB0cnVlIH0sIGFwcENvbXBvbmVudCwgcmVzb3VyY2VNb2RlbCwgbWVzc2FnZUhhbmRsZXIpO1xuXHRcdFx0XHRcdFx0YXdhaXQgdGhpcy5yZWZyZXNoTGlzdEJpbmRpbmcobGlzdEJpbmRpbmcsIGFwcENvbXBvbmVudCk7XG5cblx0XHRcdFx0XHRcdExvZy5lcnJvcihcIkVycm9yIHdoaWxlIGNyZWF0aW5nL3NhdmluZyB0aGUgbmV3IGRvY3VtZW50XCIsIGVycm9yIGFzIHN0cmluZyk7XG5cdFx0XHRcdFx0XHR0aHJvdyBGRUxpYnJhcnkuQ29uc3RhbnRzLkNyZWF0aW9uRmFpbGVkO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHRyYW5zaWVudExpc3RCaW5kaW5nLmRlc3Ryb3koKTtcblx0XHRcdFx0XHRjcmVhdGVEaWFsb2cuY2xvc2VEaWFsb2coKTtcblx0XHRcdFx0XHRyZXN1bHRQcm9taXNlS2VlcGVyLnJlc29sdmUobmV3Q29udGV4dCk7XG5cdFx0XHRcdH1cblx0XHRcdH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG5cdFx0XHRcdC8vIGluIGNhc2Ugb2YgY3JlYXRpb24gZmFpbGVkLCBkaWFsb2cgc2hvdWxkIHN0YXkgb3BlbiAtIHRvIGFjaGlldmUgdGhlIHNhbWUsIG5vdGhpbmcgaGFzIHRvIGJlIGRvbmUgKGxpa2UgaW4gY2FzZSBvZiBzdWNjZXNzIHdpdGggYktlZXBEaWFsb2dPcGVuKVxuXHRcdFx0XHRpZiAoIVtGRUxpYnJhcnkuQ29uc3RhbnRzLk9uQmVmb3JlQ3JlYXRlRmFpbGVkLCBGRUxpYnJhcnkuQ29uc3RhbnRzLkNyZWF0aW9uRmFpbGVkXS5pbmNsdWRlcyhlcnJvcikpIHtcblx0XHRcdFx0XHQvLyBvdGhlciBlcnJvcnMgYXJlIG5vdCBleHBlY3RlZFxuXHRcdFx0XHRcdHRyYW5zaWVudExpc3RCaW5kaW5nLmRlc3Ryb3koKTtcblx0XHRcdFx0XHRjcmVhdGVEaWFsb2cuY2xvc2VEaWFsb2coKTtcblx0XHRcdFx0XHRyZXN1bHRQcm9taXNlS2VlcGVyLnJlamVjdChlcnJvciBhcyBzdHJpbmcgfCBFcnJvcik7XG5cdFx0XHRcdH1cblx0XHRcdH0gZmluYWxseSB7XG5cdFx0XHRcdGNyZWF0ZURpYWxvZy5zZXRCdXN5KGZhbHNlKTtcblx0XHRcdFx0bWVzc2FnZUhhbmRsZXIuc2hvd01lc3NhZ2VzKHsgaXNPcGVyYXRpb25EaWFsb2dPcGVuOiBjcmVhdGVEaWFsb2cuaXNPcGVuKCkgfSk7XG5cdFx0XHR9XG5cdFx0fTtcblxuXHRcdGNyZWF0ZURpYWxvZy5hdHRhY2hFeGl0RGlhbG9nKHt9LCBvbkV4aXREaWFsb2cpO1xuXG5cdFx0cmV0dXJuIHJlc3VsdFByb21pc2VLZWVwZXIucHJvbWlzZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBXYWl0cyBmb3IgdGhlIGNyZWF0aW9uIG9mIGEgY29udGV4dCB0byBiZSBmaW5pc2hlZC5cblx0ICogQHBhcmFtIG5ld0NvbnRleHQgVGhlIGNvbnRleHQgYmVpbmcgY3JlYXRlZFxuXHQgKiBAcGFyYW0ga2VlcFRyYW5zaWVudENvbnRleHRPbkZhaWxlZFxuXHQgKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBjcmVhdGlvbiB3YXMgc3VjY2Vzc2Z1bFxuXHQgKi9cblx0YXN5bmMgd2FpdEZvckNyZWF0ZUNvbXBsZXRpb24obmV3Q29udGV4dDogT0RhdGFWNENvbnRleHQsIGtlZXBUcmFuc2llbnRDb250ZXh0T25GYWlsZWQ6IGJvb2xlYW4pOiBQcm9taXNlPGJvb2xlYW4+IHtcblx0XHRjb25zdCBwcm9taXNlS2VlcGVyID0gbmV3IFByb21pc2VLZWVwZXI8Ym9vbGVhbj4oKTtcblx0XHRjb25zdCBwYXJlbnRMaXN0QmluZGluZyA9IG5ld0NvbnRleHQuZ2V0QmluZGluZygpIGFzIE9EYXRhTGlzdEJpbmRpbmc7XG5cblx0XHRjb25zdCBvbkNyZWF0ZUNvbXBsZXRlZCA9IChldmVudDogT0RhdGFMaXN0QmluZGluZyRDcmVhdGVDb21wbGV0ZWRFdmVudCk6IHZvaWQgPT4ge1xuXHRcdFx0Y29uc3QgY3JlYXRlZENvbnRleHQgPSBldmVudC5nZXRQYXJhbWV0ZXIoXCJjb250ZXh0XCIpO1xuXHRcdFx0Y29uc3Qgc3VjY2VzcyA9IGV2ZW50LmdldFBhcmFtZXRlcihcInN1Y2Nlc3NcIik7XG5cdFx0XHRpZiAoY3JlYXRlZENvbnRleHQgPT09IG5ld0NvbnRleHQpIHtcblx0XHRcdFx0cGFyZW50TGlzdEJpbmRpbmcuZGV0YWNoQ3JlYXRlQ29tcGxldGVkKG9uQ3JlYXRlQ29tcGxldGVkKTtcblx0XHRcdFx0cHJvbWlzZUtlZXBlci5yZXNvbHZlKHN1Y2Nlc3MgPT09IHRydWUpO1xuXHRcdFx0fVxuXHRcdH07XG5cblx0XHRwYXJlbnRMaXN0QmluZGluZy5hdHRhY2hDcmVhdGVDb21wbGV0ZWQob25DcmVhdGVDb21wbGV0ZWQpO1xuXG5cdFx0Y29uc3QgY3JlYXRpb25TdWNjZXNzZnVsID0gYXdhaXQgcHJvbWlzZUtlZXBlci5wcm9taXNlO1xuXHRcdGlmICghY3JlYXRpb25TdWNjZXNzZnVsKSB7XG5cdFx0XHRpZiAoIWtlZXBUcmFuc2llbnRDb250ZXh0T25GYWlsZWQpIHtcblx0XHRcdFx0Ly8gQ2FuY2VsIHRoZSBwZW5kaW5nIFBPU1QgYW5kIGRlbGV0ZSB0aGUgY29udGV4dCBpbiB0aGUgbGlzdEJpbmRpbmdcblx0XHRcdFx0KG5ld0NvbnRleHQuY3JlYXRlZCgpID8/IFByb21pc2UucmVzb2x2ZSgpKS5jYXRjaChmdW5jdGlvbiAoY29udGV4dEVycm9yOiB1bmtub3duKSB7XG5cdFx0XHRcdFx0TG9nLnRyYWNlKFwidHJhbnNpZW50IGNyZWF0aW9uIGNvbnRleHQgZGVsZXRpb24gZXJyb3JcIiwgY29udGV4dEVycm9yIGFzIHN0cmluZyk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRwYXJlbnRMaXN0QmluZGluZy5yZXNldENoYW5nZXMoKTtcblx0XHRcdFx0cGFyZW50TGlzdEJpbmRpbmcuZ2V0TW9kZWwoKS5yZXNldENoYW5nZXMocGFyZW50TGlzdEJpbmRpbmcuZ2V0VXBkYXRlR3JvdXBJZCgpKTtcblx0XHRcdFx0dGhyb3cgRkVMaWJyYXJ5LkNvbnN0YW50cy5DcmVhdGlvbkZhaWxlZDtcblx0XHRcdH1cblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0YXdhaXQgbmV3Q29udGV4dC5jcmVhdGVkKCk7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmlldmVzIHRoZSBuYW1lIG9mIHRoZSBOZXdBY3Rpb24gdG8gYmUgZXhlY3V0ZWQuXG5cdCAqIEBwYXJhbSBvU3RhcnR1cFBhcmFtZXRlcnMgU3RhcnR1cCBwYXJhbWV0ZXJzIG9mIHRoZSBhcHBsaWNhdGlvblxuXHQgKiBAcGFyYW0gW29TdGFydHVwUGFyYW1ldGVycy5wcmVmZXJyZWRNb2RlXVxuXHQgKiBAcGFyYW0gc0NyZWF0ZUhhc2ggSGFzaCB0byBiZSBjaGVja2VkIGZvciBhY3Rpb24gdHlwZVxuXHQgKiBAcGFyYW0gb01ldGFNb2RlbCBUaGUgTWV0YU1vZGVsIHVzZWQgdG8gY2hlY2sgZm9yIE5ld0FjdGlvbiBwYXJhbWV0ZXJcblx0ICogQHBhcmFtIHNNZXRhUGF0aCBUaGUgTWV0YVBhdGhcblx0ICogQHJldHVybnMgVGhlIG5hbWUgb2YgdGhlIGFjdGlvblxuXHQgKiBAZmluYWxcblx0ICovXG5cdF9nZXROZXdBY3Rpb24oXG5cdFx0b1N0YXJ0dXBQYXJhbWV0ZXJzOiB7XG5cdFx0XHRwcmVmZXJyZWRNb2RlPzogc3RyaW5nW107XG5cdFx0fSxcblx0XHRzQ3JlYXRlSGFzaDogc3RyaW5nLFxuXHRcdG9NZXRhTW9kZWw6IE9EYXRhTWV0YU1vZGVsLFxuXHRcdHNNZXRhUGF0aDogc3RyaW5nXG5cdCk6IHN0cmluZyB7XG5cdFx0bGV0IHNOZXdBY3Rpb247XG5cblx0XHRpZiAob1N0YXJ0dXBQYXJhbWV0ZXJzICYmIG9TdGFydHVwUGFyYW1ldGVycy5wcmVmZXJyZWRNb2RlICYmIHNDcmVhdGVIYXNoLnRvVXBwZXJDYXNlKCkuaW5jbHVkZXMoXCJJLUFDVElPTj1DUkVBVEVXSVRIXCIpKSB7XG5cdFx0XHRjb25zdCBzUHJlZmVycmVkTW9kZSA9IG9TdGFydHVwUGFyYW1ldGVycy5wcmVmZXJyZWRNb2RlWzBdO1xuXHRcdFx0c05ld0FjdGlvbiA9IHNQcmVmZXJyZWRNb2RlLnRvVXBwZXJDYXNlKCkuaW5jbHVkZXMoXCJDUkVBVEVXSVRIOlwiKVxuXHRcdFx0XHQ/IHNQcmVmZXJyZWRNb2RlLnN1YnN0cmluZyhzUHJlZmVycmVkTW9kZS5sYXN0SW5kZXhPZihcIjpcIikgKyAxKVxuXHRcdFx0XHQ6IHVuZGVmaW5lZDtcblx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0b1N0YXJ0dXBQYXJhbWV0ZXJzICYmXG5cdFx0XHRvU3RhcnR1cFBhcmFtZXRlcnMucHJlZmVycmVkTW9kZSAmJlxuXHRcdFx0c0NyZWF0ZUhhc2gudG9VcHBlckNhc2UoKS5pbmNsdWRlcyhcIkktQUNUSU9OPUFVVE9DUkVBVEVXSVRIXCIpXG5cdFx0KSB7XG5cdFx0XHRjb25zdCBzUHJlZmVycmVkTW9kZSA9IG9TdGFydHVwUGFyYW1ldGVycy5wcmVmZXJyZWRNb2RlWzBdO1xuXHRcdFx0c05ld0FjdGlvbiA9IHNQcmVmZXJyZWRNb2RlLnRvVXBwZXJDYXNlKCkuaW5jbHVkZXMoXCJBVVRPQ1JFQVRFV0lUSDpcIilcblx0XHRcdFx0PyBzUHJlZmVycmVkTW9kZS5zdWJzdHJpbmcoc1ByZWZlcnJlZE1vZGUubGFzdEluZGV4T2YoXCI6XCIpICsgMSlcblx0XHRcdFx0OiB1bmRlZmluZWQ7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHNOZXdBY3Rpb24gPVxuXHRcdFx0XHRvTWV0YU1vZGVsICYmIG9NZXRhTW9kZWwuZ2V0T2JqZWN0ICE9PSB1bmRlZmluZWRcblx0XHRcdFx0XHQ/IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KGAke3NNZXRhUGF0aH1AY29tLnNhcC52b2NhYnVsYXJpZXMuU2Vzc2lvbi52MS5TdGlja3lTZXNzaW9uU3VwcG9ydGVkL05ld0FjdGlvbmApIHx8XG5cdFx0XHRcdFx0ICBvTWV0YU1vZGVsLmdldE9iamVjdChgJHtzTWV0YVBhdGh9QGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5EcmFmdFJvb3QvTmV3QWN0aW9uYClcblx0XHRcdFx0XHQ6IHVuZGVmaW5lZDtcblx0XHR9XG5cdFx0cmV0dXJuIHNOZXdBY3Rpb247XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmlldmVzIHRoZSBsYWJlbCBmb3IgdGhlIHRpdGxlIG9mIGEgc3BlY2lmaWMgY3JlYXRlIGFjdGlvbiBkaWFsb2csIGUuZy4gQ3JlYXRlIFNhbGVzIE9yZGVyIGZyb20gUXVvdGF0aW9uLlxuXHQgKlxuXHQgKiBUaGUgZm9sbG93aW5nIHByaW9yaXR5IGlzIGFwcGxpZWQ6XG5cdCAqIDEuIGxhYmVsIG9mIGxpbmUtaXRlbSBhbm5vdGF0aW9uLlxuXHQgKiAyLiBsYWJlbCBhbm5vdGF0ZWQgaW4gdGhlIGFjdGlvbi5cblx0ICogMy4gXCJDcmVhdGVcIiBhcyBhIGNvbnN0YW50IGZyb20gaTE4bi5cblx0ICogQHBhcmFtIG9NZXRhTW9kZWwgVGhlIE1ldGFNb2RlbCB1c2VkIHRvIGNoZWNrIGZvciB0aGUgTmV3QWN0aW9uIHBhcmFtZXRlclxuXHQgKiBAcGFyYW0gc01ldGFQYXRoIFRoZSBNZXRhUGF0aFxuXHQgKiBAcGFyYW0gc05ld0FjdGlvbiBDb250YWlucyB0aGUgbmFtZSBvZiB0aGUgYWN0aW9uIHRvIGJlIGV4ZWN1dGVkXG5cdCAqIEBwYXJhbSByZXNvdXJjZU1vZGVsIFJlc291cmNlQnVuZGxlIHRvIGFjY2VzcyB0aGUgZGVmYXVsdCBDcmVhdGUgbGFiZWxcblx0ICogQHJldHVybnMgVGhlIGxhYmVsIGZvciB0aGUgQ3JlYXRlIEFjdGlvbiBEaWFsb2dcblx0ICogQGZpbmFsXG5cdCAqL1xuXHRfZ2V0U3BlY2lmaWNDcmVhdGVBY3Rpb25EaWFsb2dMYWJlbChcblx0XHRvTWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCB8IHVuZGVmaW5lZCxcblx0XHRzTWV0YVBhdGg6IHN0cmluZyxcblx0XHRzTmV3QWN0aW9uOiBzdHJpbmcsXG5cdFx0cmVzb3VyY2VNb2RlbDogUmVzb3VyY2VNb2RlbCB8IHVuZGVmaW5lZFxuXHQpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRcdGNvbnN0IGxpbmVJdGVtcyA9IG9NZXRhTW9kZWw/LmdldE9iamVjdChgJHtzTWV0YVBhdGh9L0Bjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5MaW5lSXRlbWApIGFzIExpbmVJdGVtIHwgdW5kZWZpbmVkO1xuXG5cdFx0Y29uc3QgbGFiZWwgPSBsaW5lSXRlbXM/LmZpbmQoKGxpbmVJdGVtKSA9PiBpc0RhdGFGaWVsZEZvckFjdGlvbihsaW5lSXRlbSkgJiYgbGluZUl0ZW0uQWN0aW9uLnNwbGl0KFwiKFwiLCAxKVswXSA9PT0gc05ld0FjdGlvbilcblx0XHRcdD8uTGFiZWw7XG5cblx0XHRyZXR1cm4gKFxuXHRcdFx0bGFiZWwgfHxcblx0XHRcdG9NZXRhTW9kZWw/LmdldE9iamVjdChgJHtzTWV0YVBhdGh9LyR7c05ld0FjdGlvbn1AY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkxhYmVsYCkgfHxcblx0XHRcdHJlc291cmNlTW9kZWw/LmdldFRleHQoXCJDX1RSQU5TQUNUSU9OX0hFTFBFUl9TQVBGRV9BQ1RJT05fQ1JFQVRFXCIpXG5cdFx0KTtcblx0fVxufVxuXG5jb25zdCBzaW5nbGV0b24gPSBuZXcgVHJhbnNhY3Rpb25IZWxwZXIoKTtcbmV4cG9ydCBkZWZhdWx0IHNpbmdsZXRvbjtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0VBMkRBLE1BQU1BLFlBQVksR0FBR0MsU0FBUyxDQUFDRCxZQUFZO0VBQzNDLE1BQU1FLGdCQUFnQixHQUFHRCxTQUFTLENBQUNDLGdCQUFnQjs7RUFFbkQ7RUFDQSxNQUFNQyxpQkFBaUIsR0FBR0MsWUFBWSxDQUFDRCxpQkFBaUI7RUFDeEQsTUFBTUUsMEJBQTBCLEdBQUdELFlBQVksQ0FBQ0MsMEJBQTBCOztFQUUxRTtFQUNBLFNBQVNDLGFBQWFBLENBQUlDLFdBQXVCLEVBQUs7SUFDckQsSUFBSUEsV0FBVyxJQUFLQSxXQUFXLENBQVdDLFdBQVcsSUFBS0QsV0FBVyxDQUFXQyxXQUFXLENBQUMsQ0FBQyxDQUFDQyxPQUFPLENBQUMsQ0FBQyxLQUFLLG1CQUFtQixFQUFFO01BQ2hJRixXQUFXLEdBQUcsQ0FBQyxDQUFNO0lBQ3RCO0lBQ0EsT0FBUUEsV0FBVyxJQUFXLENBQUMsQ0FBTztFQUN2QztFQUFDLElBNEJLRyxpQkFBaUI7SUFBQSxTQUFBQSxrQkFBQTtJQUFBLElBQUFDLE1BQUEsR0FBQUQsaUJBQUEsQ0FBQUUsU0FBQTtJQUFBRCxNQUFBLENBQ3RCRSxRQUFRLEdBQVIsU0FBQUEsUUFBUUEsQ0FBQ0MsWUFBMEIsRUFBRUMsUUFBaUIsRUFBUTtNQUM3REMsVUFBVSxDQUFDQyxJQUFJLENBQUNILFlBQVksQ0FBQ0ksUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFSCxRQUFRLENBQUM7SUFDdkQsQ0FBQztJQUFBSixNQUFBLENBRURRLFVBQVUsR0FBVixTQUFBQSxVQUFVQSxDQUFDTCxZQUEwQixFQUFFQyxRQUFpQixFQUFRO01BQy9EQyxVQUFVLENBQUNJLE1BQU0sQ0FBQ04sWUFBWSxDQUFDSSxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUVILFFBQVEsQ0FBQztJQUN6RCxDQUFDO0lBQUFKLE1BQUEsQ0FFRFUsbUJBQW1CLEdBQW5CLFNBQUFBLG1CQUFtQkEsQ0FBQ0MsTUFBZ0MsRUFBMkI7TUFDOUUsSUFBSUMsSUFBWTtNQUNoQixJQUFJRCxNQUFNLENBQUNFLEdBQUcsQ0FBaUIsK0JBQStCLENBQUMsRUFBRTtRQUNoRUQsSUFBSSxHQUFHRCxNQUFNLENBQUNHLE9BQU8sQ0FBQyxDQUFDO01BQ3hCLENBQUMsTUFBTTtRQUNORixJQUFJLEdBQUcsQ0FBQ0QsTUFBTSxDQUFDSSxVQUFVLENBQUMsQ0FBQyxHQUFHSixNQUFNLENBQUNLLGVBQWUsQ0FBQyxDQUFDLEdBQUdMLE1BQU0sQ0FBQ0csT0FBTyxDQUFDLENBQUMsS0FBSyxFQUFFO01BQ2pGO01BRUEsTUFBTUcsU0FBUyxHQUFHTixNQUFNLENBQUNKLFFBQVEsQ0FBQyxDQUFDLEVBQUVXLFlBQVksQ0FBQyxDQUErQjtNQUNqRixJQUFJRCxTQUFTLElBQUlFLFdBQVcsQ0FBQ0MsZ0JBQWdCLENBQUNILFNBQVMsRUFBRUwsSUFBSSxDQUFDLEVBQUU7UUFDL0QsT0FBT3JCLGdCQUFnQixDQUFDOEIsS0FBSztNQUM5QixDQUFDLE1BQU0sSUFBSUosU0FBUyxJQUFJRSxXQUFXLENBQUNHLHdCQUF3QixDQUFDTCxTQUFTLENBQUMsRUFBRTtRQUN4RSxPQUFPMUIsZ0JBQWdCLENBQUNnQyxNQUFNO01BQy9CLENBQUMsTUFBTTtRQUNOLE9BQU9oQyxnQkFBZ0IsQ0FBQ2lDLFFBQVE7TUFDakM7SUFDRDs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQVRDO0lBQUF4QixNQUFBLENBVU15QixnQkFBZ0IsR0FBdEIsZUFBTUEsZ0JBQWdCQSxDQUNyQkMsUUFBd0IsRUFDeEI5QixXQUFpRixFQUNqRitCLEtBQVcsRUFDa0Q7TUFDN0QsTUFBTUMseUJBQXlCLEdBQUdoQyxXQUFXLElBQUlBLFdBQVcsQ0FBQ2lDLHdCQUF3QjtNQUNyRixJQUFJRCx5QkFBeUIsRUFBRTtRQUM5QixNQUFNRSxPQUFPLEdBQUdGLHlCQUF5QixDQUFDRyxTQUFTLENBQUMsQ0FBQyxFQUFFSCx5QkFBeUIsQ0FBQ0ksV0FBVyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUNDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDO1VBQzVIQyxhQUFhLEdBQUdOLHlCQUF5QixDQUFDRyxTQUFTLENBQ2xESCx5QkFBeUIsQ0FBQ0ksV0FBVyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFDOUNKLHlCQUF5QixDQUFDTyxNQUMzQixDQUFDO1VBQ0RDLEtBQUssR0FBR3hDLFdBQVcsQ0FBQ3lDLElBQUk7UUFDekIsT0FBT0QsS0FBSyxDQUFDLDJCQUEyQixDQUFDO1FBQ3pDLE9BQU9FLFNBQVMsQ0FBQ0MsaUJBQWlCLENBQUNULE9BQU8sRUFBRUksYUFBYSxFQUFFRSxLQUFLLEVBQUVULEtBQUssRUFBRUQsUUFBUSxDQUFDO01BQ25GO01BQ0EsT0FBT2MsT0FBTyxDQUFDQyxPQUFPLENBQUMsRUFBRSxDQUFDO0lBQzNCOztJQUVBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0EsT0FKQztJQUFBekMsTUFBQSxDQUtjMEMsK0JBQStCLEdBQTdDLGVBQWNBLCtCQUErQkEsQ0FBQ0MsV0FBNkIsRUFBK0I7TUFDekcsTUFBTUMsS0FBSyxHQUFHRCxXQUFXLENBQUNwQyxRQUFRLENBQUMsQ0FBQztNQUNwQyxNQUFNVSxTQUFTLEdBQUcyQixLQUFLLENBQUMxQixZQUFZLENBQUMsQ0FBQztNQUN0QyxNQUFNMkIsV0FBVyxHQUFHNUIsU0FBUyxDQUFDNkIsY0FBYyxDQUFDSCxXQUFXLENBQUMzQixlQUFlLENBQUMsQ0FBVyxDQUFDO01BQ3JGLE1BQU0rQixxQkFBcUIsR0FBR0Msa0JBQWtCLENBQUNDLDJCQUEyQixDQUFDSixXQUFXLENBQUM7TUFFekYsTUFBTUsseUJBQXlCLEdBQUlILHFCQUFxQixDQUFDSSxZQUFZLENBQW9DQyxXQUFXLENBQUNDLE1BQU0sRUFDeEhDLHFCQUFxQjtNQUN4QixNQUFNQyw0QkFBNEIsR0FBSVIscUJBQXFCLENBQUNTLGVBQWUsRUFBNEJKLFdBQVcsQ0FBQ0MsTUFBTSxFQUN0SEMscUJBQXFCO01BQ3hCLE1BQU1HLG1CQUFtQixHQUFHUCx5QkFBeUIsSUFBSUssNEJBQTRCO01BRXJGLElBQUksQ0FBQ0UsbUJBQW1CLEVBQUU7UUFDekI7UUFDQSxPQUFPQyxTQUFTO01BQ2pCO01BRUEsTUFBTUMsaUJBQWlCLEdBQUdDLG9CQUFvQixDQUFDYixxQkFBcUIsQ0FBQ0ksWUFBWSxDQUFDLElBQUlELHlCQUF5QixLQUFLUSxTQUFTO01BQzdILElBQUlHLHNCQUFzQjtNQUMxQixJQUFJRixpQkFBaUIsRUFBRTtRQUN0QjtRQUNBLE1BQU1HLFdBQVcsR0FBR25CLFdBQVcsQ0FBQzdCLE9BQU8sQ0FBQyxDQUFDO1FBQ3pDLE1BQU1pRCxPQUFPLEdBQUdwQixXQUFXLENBQUNxQixVQUFVLENBQUMsQ0FBQztRQUN4QyxJQUFJRixXQUFXLEVBQUVHLFVBQVUsQ0FBQyxHQUFHLENBQUMsRUFBRTtVQUNqQ0osc0JBQXNCLEdBQUdFLE9BQU87UUFDakMsQ0FBQyxNQUFNLElBQUlELFdBQVcsSUFBSUMsT0FBTyxJQUFJRCxXQUFXLENBQUNJLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRTtVQUMvRDtVQUNBLE1BQU1DLFFBQVEsR0FBR0wsV0FBVyxDQUFDTSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDOztVQUUxQztVQUNBLE1BQU1DLFVBQVUsR0FBRyxHQUFHTixPQUFPLENBQUNqRCxPQUFPLENBQUMsQ0FBQyxJQUFJcUQsUUFBUSxFQUFFOztVQUVyRDtVQUNBTixzQkFBc0IsR0FBR2pCLEtBQUssQ0FBQzBCLFdBQVcsQ0FBQ0QsVUFBVSxDQUFDLENBQUNFLGVBQWUsQ0FBQyxDQUFDO1FBQ3pFLENBQUMsTUFBTTtVQUNOO1VBQ0FWLHNCQUFzQixHQUFHRSxPQUFPO1FBQ2pDO01BQ0QsQ0FBQyxNQUFNO1FBQ047UUFDQUYsc0JBQXNCLEdBQUdsQixXQUFXLENBQUM2QixnQkFBZ0IsQ0FBQyxDQUFDO01BQ3hEO01BQ0EsSUFBSSxDQUFDWCxzQkFBc0IsRUFBRTtRQUM1QixPQUFPSCxTQUFTO01BQ2pCO01BQ0EsTUFBTWUsbUJBQW1CLEdBQUcsR0FBR3hELFNBQVMsQ0FBQ3lELFdBQVcsQ0FBQ2Isc0JBQXNCLENBQUMvQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUkyQyxtQkFBbUIsRUFBRTtNQUUvRyxNQUFNa0IseUJBQXlCLEdBQUczQixrQkFBa0IsQ0FBQ0MsMkJBQTJCLENBQUNoQyxTQUFTLENBQUM2QixjQUFjLENBQUMyQixtQkFBbUIsQ0FBQyxDQUFDO01BQy9ILE1BQU1HLHFCQUFxQixHQUFJRCx5QkFBeUIsQ0FBQ3hCLFlBQVksRUFBYTBCLE9BQU8sR0FDdEYsTUFBTUMsVUFBVSxDQUFDQyxpQkFBaUIsQ0FBQ3RCLG1CQUFtQixDQUFDdUIsUUFBUSxDQUFDLENBQUMsRUFBRW5CLHNCQUFzQixFQUFFakIsS0FBSyxDQUFDLEdBQy9GLE1BQU1rQyxVQUFVLENBQUNHLGtCQUFrQixDQUFDeEIsbUJBQW1CLENBQUN1QixRQUFRLENBQUMsQ0FBQyxFQUFFcEMsS0FBSyxDQUFxQjtNQUVuRyxPQUFPZ0MscUJBQXFCLENBQUNNLFNBQVMsQ0FBQyxDQUFDO0lBQ3pDOztJQUVBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0EsT0FKQztJQUFBbEYsTUFBQSxDQUtBbUYseUJBQXlCLEdBQXpCLFNBQUFBLHlCQUF5QkEsQ0FBQ3hDLFdBQTZCLEVBQVc7TUFDakUsT0FBUUEsV0FBVyxDQUFDeUMsY0FBYyxDQUFDLENBQUMsRUFBa0RDLGtCQUFrQixHQUFHLElBQUksR0FBRyxLQUFLO0lBQ3hIOztJQUVBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0EsT0FKQztJQUFBckYsTUFBQSxDQUtBc0YsdUJBQXVCLEdBQXZCLFNBQUFBLHVCQUF1QkEsQ0FBQzNDLFdBQTZCLEVBQVc7TUFDL0QsTUFBTTRDLFdBQVcsR0FBRzVDLFdBQVcsQ0FBQ3lDLGNBQWMsQ0FBQyxDQUFnRDtNQUMvRixPQUFPRyxXQUFXLEtBQUs3QixTQUFTLElBQUksQ0FBQzZCLFdBQVcsQ0FBQ0Ysa0JBQWtCO0lBQ3BFOztJQUVBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BVEM7SUFBQXJGLE1BQUEsQ0FVY3dGLGFBQWEsR0FBM0IsZUFBY0EsYUFBYUEsQ0FDMUI3QyxXQUE2QixFQUM3QjhDLFdBQStCLEVBQy9CQyxPQUE0RixFQUNsRTtNQUMxQixNQUFNQyxlQUFlLEdBQUdGLFdBQVcsSUFBSSxDQUFDLENBQUM7TUFFekMsSUFBSSxJQUFJLENBQUNOLHlCQUF5QixDQUFDeEMsV0FBVyxDQUFDLEVBQUU7UUFDaEQsSUFBSWlELHNCQUF3QztRQUM1QyxJQUFJRixPQUFPLENBQUNHLGFBQWEsRUFBRUMsVUFBVSxDQUFDLENBQUMsS0FBSyxLQUFLLEVBQUU7VUFDbEQ7VUFDQSxNQUFNbkQsV0FBVyxDQUFDb0QsTUFBTSxDQUFDTCxPQUFPLENBQUNHLGFBQWEsQ0FBQztRQUNoRDtRQUVBLElBQUlsRCxXQUFXLENBQUM1QixVQUFVLENBQUMsQ0FBQyxFQUFFO1VBQzdCaUYsTUFBTSxDQUFDQyxNQUFNLENBQUNOLGVBQWUsRUFBRTtZQUFFLG1CQUFtQixFQUFFRCxPQUFPLENBQUNHO1VBQWMsQ0FBQyxDQUFDO1VBQzlFRCxzQkFBc0IsR0FBR2pELFdBQVc7UUFDckMsQ0FBQyxNQUFNO1VBQ047VUFDQTtVQUNBLE1BQU1DLEtBQUssR0FBR0QsV0FBVyxDQUFDcEMsUUFBUSxDQUFDLENBQUM7VUFDcEMsTUFBTVUsU0FBUyxHQUFHMkIsS0FBSyxDQUFDMUIsWUFBWSxDQUFDLENBQUM7VUFDdEMwRSxzQkFBc0IsR0FBR2hELEtBQUssQ0FBQ3NELFFBQVEsQ0FBQ3ZELFdBQVcsQ0FBQzdCLE9BQU8sQ0FBQyxDQUFDLEVBQUU0QyxTQUFTLEVBQUVBLFNBQVMsRUFBRUEsU0FBUyxFQUFFO1lBQy9GeUMsU0FBUyxFQUFFeEQsV0FBVyxDQUFDeUQsVUFBVSxDQUFDLENBQUM7WUFDbkNDLGVBQWUsRUFBRTFELFdBQVcsQ0FBQzJELGdCQUFnQixDQUFDO1VBQy9DLENBQUMsQ0FBQzs7VUFFRjtVQUNBLElBQUlaLE9BQU8sQ0FBQ0csYUFBYSxFQUFFO1lBQzFCLE1BQU1VLFVBQVUsR0FBR3ZELGtCQUFrQixDQUFDQywyQkFBMkIsQ0FBQ2hDLFNBQVMsQ0FBQzZCLGNBQWMsQ0FBQ0gsV0FBVyxDQUFDN0IsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2xILE1BQU11RSxrQkFBa0IsR0FBSTFDLFdBQVcsQ0FBQ3lDLGNBQWMsQ0FBQyxDQUFDLENBQW9DQyxrQkFBa0I7WUFDOUcsTUFBTW1CLGdCQUFnQixHQUNyQkQsVUFBVSxDQUFDRSxnQkFBZ0IsQ0FBQ3JELFdBQVcsQ0FBQ3NELFdBQVcsR0FBRyxzQkFBc0JyQixrQkFBa0IsRUFBRSxDQUFDLEVBQzlGc0Isd0JBQXdCLENBQUNDLEtBQUs7WUFDbEMsSUFBSSxDQUFDSixnQkFBZ0IsRUFBRTtjQUN0QixNQUFNLElBQUlLLEtBQUssQ0FBQyw4Q0FBOENsRSxXQUFXLENBQUM3QixPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDdkY7WUFDQSxNQUFNZ0csaUJBQXlDLEdBQUcsQ0FBQyxDQUFDO1lBQ3BEQSxpQkFBaUIsQ0FBQyxHQUFHTixnQkFBZ0IsYUFBYSxDQUFDLEdBQUdkLE9BQU8sQ0FBQ0csYUFBYSxDQUFDL0UsT0FBTyxDQUFDLENBQUMsQ0FBQ21CLE9BQU8sQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUMxRytELE1BQU0sQ0FBQ0MsTUFBTSxDQUFDTixlQUFlLEVBQUVtQixpQkFBaUIsQ0FBQztVQUNsRDtRQUNEO1FBRUEsT0FBT2xCLHNCQUFzQixDQUFDbUIsTUFBTSxDQUFDcEIsZUFBZSxFQUFFLElBQUksQ0FBQztNQUM1RCxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUNMLHVCQUF1QixDQUFDM0MsV0FBVyxDQUFDLEVBQUU7UUFDckQsSUFBSUEsV0FBVyxDQUFDNUIsVUFBVSxDQUFDLENBQUMsRUFBRTtVQUM3QixNQUFNLElBQUk4RixLQUFLLENBQUMsaUZBQWlGLENBQUM7UUFDbkcsQ0FBQyxNQUFNO1VBQ047VUFDQSxNQUFNakUsS0FBSyxHQUFHRCxXQUFXLENBQUNwQyxRQUFRLENBQUMsQ0FBQztVQUNwQyxNQUFNcUYsc0JBQXNCLEdBQUdoRCxLQUFLLENBQUNzRCxRQUFRLENBQUN2RCxXQUFXLENBQUM3QixPQUFPLENBQUMsQ0FBQyxFQUFFNEMsU0FBUyxFQUFFQSxTQUFTLEVBQUVBLFNBQVMsRUFBRTtZQUNyR3lDLFNBQVMsRUFBRXhELFdBQVcsQ0FBQ3lELFVBQVUsQ0FBQyxDQUFDO1lBQ25DQyxlQUFlLEVBQUUxRCxXQUFXLENBQUMyRCxnQkFBZ0IsQ0FBQztVQUMvQyxDQUFDLENBQUM7VUFDRixPQUFPVixzQkFBc0IsQ0FBQ21CLE1BQU0sQ0FBQ3BCLGVBQWUsRUFBRSxJQUFJLENBQUM7UUFDNUQ7TUFDRCxDQUFDLE1BQU07UUFDTixPQUFPaEQsV0FBVyxDQUFDb0UsTUFBTSxDQUFDcEIsZUFBZSxFQUFFLElBQUksRUFBRUQsT0FBTyxDQUFDc0IsV0FBVyxFQUFFdEIsT0FBTyxDQUFDdUIsY0FBYyxDQUFDO01BQzlGO0lBQ0QsQ0FBQztJQUFBakgsTUFBQSxDQUVEa0gscUJBQXFCLEdBQXJCLFNBQUFBLHFCQUFxQkEsQ0FBQ3ZFLFdBQTZCLEVBQUV3RSxVQUE4QixFQUFFaEgsWUFBMEIsRUFBWTtNQUMxSCxNQUFNYyxTQUFTLEdBQUcwQixXQUFXLENBQUNwQyxRQUFRLENBQUMsQ0FBQyxDQUFDVyxZQUFZLENBQUMsQ0FBQztNQUN2RCxNQUFNa0csUUFBUSxHQUFHbkcsU0FBUyxDQUFDeUQsV0FBVyxDQUFDL0IsV0FBVyxDQUFDNkIsZ0JBQWdCLENBQUMsQ0FBQyxDQUFFMUQsT0FBTyxDQUFDLENBQUMsQ0FBQztNQUVqRixNQUFNdUcsd0JBQXdCLEdBQUdDLG9CQUFvQixDQUFDckcsU0FBUyxFQUFFbUcsUUFBUSxFQUFFakgsWUFBWSxDQUFDO01BQ3hGO01BQ0EsT0FBT2tILHdCQUF3QixDQUFDRSxNQUFNLENBQUVDLFNBQWlCLElBQUs7UUFDN0QsT0FBTyxFQUFFQSxTQUFTLEtBQUtMLFVBQVUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQzFDLENBQUMsQ0FBQztJQUNIOztJQUVBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FoQkM7SUFBQW5ILE1BQUEsQ0FpQk15SCxjQUFjLEdBQXBCLGVBQU1BLGNBQWNBLENBQ25CQyxlQUFpQyxFQUNqQ0MsWUFBMEMsRUFDMUN4SCxZQUEwQixFQUMxQnlILGFBQTRCLEVBQzVCQyxjQUE4QixFQUM5QkMsYUFBc0IsRUFDSTtNQUMxQixJQUFJQyxrQkFBOEM7TUFDbEQsTUFBTUMsVUFBVSxHQUFHckksYUFBYSxDQUFDZ0ksWUFBWSxDQUFDO01BQzlDLElBQUksQ0FBQ0QsZUFBZSxFQUFFO1FBQ3JCLE1BQU0sSUFBSWIsS0FBSyxDQUFDLDRDQUE0QyxDQUFDO01BQzlEO01BQ0EsTUFBTW9CLGdCQUFnQixHQUFHLElBQUksQ0FBQ3ZILG1CQUFtQixDQUFDZ0gsZUFBZSxDQUFDO01BQ2xFLElBQUlPLGdCQUFnQixLQUFLMUksZ0JBQWdCLENBQUM4QixLQUFLLElBQUk0RyxnQkFBZ0IsS0FBSzFJLGdCQUFnQixDQUFDZ0MsTUFBTSxFQUFFO1FBQ2hHLE1BQU0sSUFBSXNGLEtBQUssQ0FBQyw2RUFBNkUsQ0FBQztNQUMvRjtNQUNBLE1BQU16RyxRQUFRLEdBQUcsSUFBSSxDQUFDOEgsV0FBVyxDQUFDRixVQUFVLENBQUM7TUFDN0NBLFVBQVUsQ0FBQ0csb0JBQW9CLEdBQUdMLGFBQWEsR0FBR3BFLFNBQVMsR0FBR3NFLFVBQVUsQ0FBQ0csb0JBQW9CO01BQzdGLElBQUksQ0FBQ1IsWUFBWSxFQUFFUyxRQUFRLEVBQUU7UUFDNUIsSUFBSSxDQUFDbEksUUFBUSxDQUFDQyxZQUFZLEVBQUVDLFFBQVEsQ0FBQztNQUN0QztNQUNBLE1BQU1pSSxrQkFBa0IsR0FBR1IsY0FBYyxDQUFDUyxzQkFBc0IsQ0FBQyxDQUFDO01BQ2xFLElBQUk7UUFDSFAsa0JBQWtCLEdBQUcsTUFBTSxJQUFJLENBQUNRLGVBQWUsQ0FDOUNiLGVBQWUsRUFDZk0sVUFBVSxFQUNWN0gsWUFBWSxFQUNaMEgsY0FBYyxFQUNkRCxhQUFhLEVBQ2JFLGFBQ0QsQ0FBQztRQUNELE1BQU1ELGNBQWMsQ0FBQ1csaUJBQWlCLENBQUM7VUFBRUMsT0FBTyxFQUFFVCxVQUFVLENBQUNVLGFBQWE7VUFBRUMsU0FBUyxFQUFFTjtRQUFtQixDQUFDLENBQUM7UUFDNUcsT0FBT04sa0JBQWtCO01BQzFCLENBQUMsQ0FBQyxPQUFPYSxLQUFjLEVBQUU7UUFDeEI7UUFDQSxNQUFNZixjQUFjLENBQUNXLGlCQUFpQixDQUFDO1VBQUVDLE9BQU8sRUFBRVQsVUFBVSxDQUFDVSxhQUFhO1VBQUVDLFNBQVMsRUFBRU47UUFBbUIsQ0FBQyxDQUFDO1FBQzVHLElBQ0MsQ0FBQ08sS0FBSyxLQUFLdEosU0FBUyxDQUFDdUosU0FBUyxDQUFDQyxxQkFBcUIsSUFBSUYsS0FBSyxLQUFLdEosU0FBUyxDQUFDdUosU0FBUyxDQUFDRSxrQkFBa0IsS0FDeEdoQixrQkFBa0IsRUFBRWlCLFdBQVcsQ0FBQyxDQUFDLEVBQ2hDO1VBQ0Q7VUFDQTtVQUNBO1VBQ0FqQixrQkFBa0IsQ0FBQ2tCLE1BQU0sQ0FBQyxTQUFTLENBQUM7UUFDckM7UUFDQSxNQUFNTCxLQUFLO01BQ1osQ0FBQyxTQUFTO1FBQ1QsSUFBSSxDQUFDakIsWUFBWSxFQUFFUyxRQUFRLEVBQUU7VUFDNUIsSUFBSSxDQUFDNUgsVUFBVSxDQUFDTCxZQUFZLEVBQUVDLFFBQVEsQ0FBQztRQUN4QztNQUNEO0lBQ0QsQ0FBQztJQUFBSixNQUFBLENBRU9rSSxXQUFXLEdBQW5CLFNBQVFBLFdBQVdBLENBQUN0SSxXQUE2QixFQUFVO01BQzFELE9BQU9BLFdBQVcsQ0FBQ3NKLFFBQVEsS0FBSyxPQUFPLEdBQUcsY0FBY3RKLFdBQVcsQ0FBQ3VKLE1BQU0sRUFBRSxHQUFHLE9BQU87SUFDdkY7O0lBRUE7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQWhCQztJQUFBbkosTUFBQSxDQWlCY29KLHFCQUFxQixHQUFuQyxlQUFjQSxxQkFBcUJBLENBQUMxQixlQUFpQyxFQUFFTSxVQUE0QixFQUEyQjtNQUM3SCxJQUFJQSxVQUFVLENBQUNHLG9CQUFvQixFQUFFO1FBQ3BDO1FBQ0EsTUFBTWtCLGdCQUFnQixHQUFHckIsVUFBVSxDQUFDM0YsSUFBSSxHQUFHMkQsTUFBTSxDQUFDc0QsT0FBTyxDQUFDdEIsVUFBVSxDQUFDM0YsSUFBSSxDQUFDLENBQUNrSCxHQUFHLENBQUNDLElBQUE7VUFBQSxJQUFDLENBQUNDLEdBQUcsRUFBRTdDLEtBQUssQ0FBQyxHQUFBNEMsSUFBQTtVQUFBLE9BQU07WUFBRSxDQUFDQyxHQUFHLEdBQUc3QztVQUFNLENBQUM7UUFBQSxDQUFDLENBQUMsR0FBRyxFQUFFO1FBQ3pILElBQUk7VUFDSCxNQUFNOEMsWUFBWSxDQUNqQjFCLFVBQVUsQ0FBQ0csb0JBQW9CLENBQUM7WUFDL0J3QixXQUFXLEVBQUVqQyxlQUFlLElBQUlBLGVBQWUsQ0FBQzVHLE9BQU8sQ0FBQyxDQUFDO1lBQ3pEdUksZ0JBQWdCLEVBQUVBO1VBQ25CLENBQUMsQ0FDRixDQUFDO1FBQ0YsQ0FBQyxDQUFDLE9BQU9ULEtBQWMsRUFBRTtVQUN4QmdCLEdBQUcsQ0FBQ2hCLEtBQUssQ0FBQ0EsS0FBZSxDQUFDO1VBQzFCLE1BQU10SixTQUFTLENBQUN1SixTQUFTLENBQUNnQixvQkFBb0I7UUFDL0M7UUFDQTdCLFVBQVUsQ0FBQzNGLElBQUksR0FBR2dILGdCQUFnQixDQUFDUyxNQUFNLENBQUMsQ0FBQ0MsTUFBTSxFQUFFQyxhQUFhLEtBQUs7VUFDcEUsT0FBTztZQUFFLEdBQUdELE1BQU07WUFBRSxHQUFHQztVQUFjLENBQUM7UUFDdkMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO01BQ1A7TUFDQSxNQUFNQyxhQUFhLEdBQUcsSUFBSSxDQUFDekUsYUFBYSxDQUFDa0MsZUFBZSxFQUFFTSxVQUFVLENBQUMzRixJQUFJLEVBQUU7UUFDMUUyRSxXQUFXLEVBQUUsQ0FBQyxDQUFDZ0IsVUFBVSxDQUFDaEIsV0FBVztRQUNyQ0MsY0FBYyxFQUFFLENBQUMsQ0FBQ2UsVUFBVSxDQUFDSSxRQUFRO1FBQ3JDdkMsYUFBYSxFQUFFbUMsVUFBVSxDQUFDbkM7TUFDM0IsQ0FBQyxDQUFDO01BQ0YsSUFBSTZCLGVBQWUsQ0FBQ3BCLGdCQUFnQixDQUFDLENBQUMsS0FBSzRELFdBQVcsQ0FBQ0Msd0JBQXdCLEVBQUU7UUFDaEZ6QyxlQUFlLENBQUNuSCxRQUFRLENBQUMsQ0FBQyxDQUFDNkosV0FBVyxDQUFDRixXQUFXLENBQUNDLHdCQUF3QixDQUFDO01BQzdFO01BQ0EsT0FBT0YsYUFBYTtJQUNyQjs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FwQkM7SUFBQWpLLE1BQUEsQ0FxQmN1SSxlQUFlLEdBQTdCLGVBQWNBLGVBQWVBLENBQzVCYixlQUFpQyxFQUNqQ00sVUFBNEIsRUFDNUI3SCxZQUEwQixFQUMxQjBILGNBQThCLEVBQzlCRCxhQUE0QixFQUM1QkUsYUFBc0IsRUFDZ0I7TUFDdEMsTUFBTTdHLFNBQVMsR0FBR3lHLGVBQWUsQ0FBQ25ILFFBQVEsQ0FBQyxDQUFDLENBQUNXLFlBQVksQ0FBQyxDQUFDO01BQzNELE1BQU1rRyxRQUFRLEdBQUduRyxTQUFTLENBQUN5RCxXQUFXLENBQUNnRCxlQUFlLENBQUNsRCxnQkFBZ0IsQ0FBQyxDQUFDLENBQUUxRCxPQUFPLENBQUMsQ0FBQyxDQUFDO01BQ3JGLE1BQU11SixVQUFVLEdBQUdsSyxZQUFZLENBQUNtSyxjQUFjLENBQUMsQ0FBQyxDQUFDQyxPQUFPLENBQUMsQ0FBQztNQUMxRCxNQUFNQyxhQUFhLEdBQUdySyxZQUFZLENBQUNzSyxnQkFBZ0IsQ0FBQyxDQUFDO01BQ3JELE1BQU1DLGlCQUFpQixHQUFHRixhQUFhLEVBQUVFLGlCQUFpQixJQUFJLENBQUMsQ0FBQztNQUNoRSxNQUFNQyxTQUFTLEdBQUcsQ0FBQ2pELGVBQWUsQ0FBQzNHLFVBQVUsQ0FBQyxDQUFDLEdBQzVDLElBQUksQ0FBQzZKLGFBQWEsQ0FBQ0YsaUJBQWlCLEVBQUVMLFVBQVUsRUFBRXBKLFNBQVMsRUFBRW1HLFFBQVEsQ0FBQyxHQUN0RTFELFNBQVM7TUFFWixJQUFJaUgsU0FBUyxFQUFFO1FBQ2QsTUFBTVosTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDYyx5QkFBeUIsQ0FDbERGLFNBQVMsRUFDVGpELGVBQWUsRUFDZk0sVUFBVSxFQUNWN0gsWUFBWSxFQUNaeUgsYUFBYSxFQUNiQyxjQUNELENBQUM7UUFDRCxJQUFJa0MsTUFBTSxDQUFDZSxNQUFNLEtBQUssVUFBVSxFQUFFO1VBQ2pDLE1BQU1mLE1BQU0sQ0FBQ2dCLE1BQU07UUFDcEI7UUFDQSxPQUFPaEIsTUFBTSxDQUFDbkQsS0FBSyxDQUFDb0UsZUFBZTtNQUNwQyxDQUFDLE1BQU07UUFDTixPQUFPLElBQUksQ0FBQ0MsdUJBQXVCLENBQUN2RCxlQUFlLEVBQUVNLFVBQVUsRUFBRTdILFlBQVksRUFBRXlILGFBQWEsRUFBRUMsY0FBYyxFQUFFQyxhQUFhLENBQUM7TUFDN0g7SUFDRDs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQVRDO0lBQUE5SCxNQUFBLENBVWM2Syx5QkFBeUIsR0FBdkMsZUFBY0EseUJBQXlCQSxDQUN0Q0ssVUFBa0IsRUFDbEJ4RCxlQUFpQyxFQUNqQ00sVUFBNEIsRUFDNUI3SCxZQUEwQixFQUMxQnlILGFBQTRCLEVBQzVCQyxjQUE4QixFQUNtQjtNQUNqRCxNQUFNc0QsaUJBQWlCLEdBQUd6RCxlQUFlLENBQUNsRCxnQkFBZ0IsQ0FBQyxDQUFDLENBQUUxRCxPQUFPLENBQUMsQ0FBQztNQUN2RSxNQUFNRyxTQUFTLEdBQUd5RyxlQUFlLENBQUNuSCxRQUFRLENBQUMsQ0FBQyxDQUFDVyxZQUFZLENBQUMsQ0FBQztNQUMzRCxNQUFNa0csUUFBUSxHQUFHbkcsU0FBUyxDQUFDeUQsV0FBVyxDQUFDeUcsaUJBQWlCLENBQUM7TUFDekQsTUFBTUMsWUFBWSxHQUFHakssV0FBVyxDQUFDa0ssZUFBZSxDQUFDcEssU0FBUyxFQUFFbUcsUUFBUSxDQUFDO01BQ3JFLE1BQU1rRSxpQkFBd0MsR0FBRztRQUFFQyx5QkFBeUIsRUFBRSxJQUFJO1FBQUVsRixlQUFlLEVBQUU7TUFBUSxDQUFDO01BRTlHLE1BQU1tRixrQkFBNEIsR0FBRyxFQUFFO01BQ3ZDLElBQUlKLFlBQVksRUFBRTtRQUNqQkksa0JBQWtCLENBQUNDLElBQUksQ0FBQ0wsWUFBWSxDQUFDO01BQ3RDO01BQ0EsSUFBSSxJQUFJLENBQUMxSyxtQkFBbUIsQ0FBQ2dILGVBQWUsQ0FBQyxLQUFLbkksZ0JBQWdCLENBQUM4QixLQUFLLEVBQUU7UUFDekVtSyxrQkFBa0IsQ0FBQ0MsSUFBSSxDQUFDLGdCQUFnQixFQUFFLGdCQUFnQixFQUFFLGlCQUFpQixDQUFDLENBQUMsQ0FBQztNQUNqRjtNQUNBLElBQUlELGtCQUFrQixDQUFDckosTUFBTSxHQUFHLENBQUMsRUFBRTtRQUNsQ21KLGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxHQUFHRSxrQkFBa0IsQ0FBQ0UsSUFBSSxDQUFDLEdBQUcsQ0FBQztNQUM1RDtNQUNBLE1BQU0zQixNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUM0QixVQUFVLENBQ25DVCxVQUFVLEVBQ1Y7UUFDQ1UsUUFBUSxFQUFFbEUsZUFBZSxDQUFDbEQsZ0JBQWdCLENBQUMsQ0FBQztRQUM1Q3FILHlCQUF5QixFQUFFLElBQUk7UUFDL0JDLEtBQUssRUFBRSxJQUFJLENBQUNDLG1DQUFtQyxDQUFDOUssU0FBUyxFQUFFbUcsUUFBUSxFQUFFOEQsVUFBVSxFQUFFdEQsYUFBYSxDQUFDO1FBQy9GMEQsaUJBQWlCLEVBQUVBLGlCQUFpQjtRQUNwQ1UsSUFBSSxFQUFFaEUsVUFBVSxDQUFDVSxhQUFhO1FBQzlCdUQsY0FBYyxFQUFFLElBQUk7UUFDcEJDLG1CQUFtQixFQUFFbEUsVUFBVSxDQUFDa0U7TUFDakMsQ0FBQyxFQUNEL0wsWUFBWSxFQUNaMEgsY0FDRCxDQUFDO01BQ0QsT0FBT2tDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDakI7O0lBRUE7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FUQztJQUFBL0osTUFBQSxDQVVjaUwsdUJBQXVCLEdBQXJDLGVBQWNBLHVCQUF1QkEsQ0FDcEN2RCxlQUFpQyxFQUNqQ00sVUFBNEIsRUFDNUI3SCxZQUEwQixFQUMxQnlILGFBQTRCLEVBQzVCQyxjQUE4QixFQUM5QkMsYUFBc0IsRUFDZ0I7TUFDdEMsSUFBSTtRQUNILElBQUlDLGtCQUE4QztRQUNsRCxNQUFNdEMsV0FBVyxHQUFHdUMsVUFBVSxDQUFDM0YsSUFBSTtRQUNuQyxJQUFJLENBQUN5RixhQUFhLEVBQUU7VUFDbkIsTUFBTXFFLHdCQUF3QixHQUFHLE1BQU0sSUFBSSxDQUFDekosK0JBQStCLENBQUNnRixlQUFlLENBQUM7VUFDNUZNLFVBQVUsQ0FBQzNGLElBQUksR0FBRzJELE1BQU0sQ0FBQ0MsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFa0csd0JBQXdCLEVBQUVuRSxVQUFVLENBQUMzRixJQUFJLENBQUM7UUFDL0U7UUFDQSxJQUFJMkYsVUFBVSxDQUFDM0YsSUFBSSxFQUFFO1VBQ3BCLE9BQU8yRixVQUFVLENBQUMzRixJQUFJLENBQUMsZ0JBQWdCLENBQUM7UUFDekM7UUFFQSxNQUFNK0osYUFBYSxHQUFHcEUsVUFBVSxDQUFDcUUsWUFBWSxLQUFLaE4sWUFBWSxDQUFDaU4sV0FBVyxJQUFJdEUsVUFBVSxDQUFDcUUsWUFBWSxLQUFLaE4sWUFBWSxDQUFDa04sTUFBTTtRQUM3SCxNQUFNQyxvQkFBb0IsR0FBR0osYUFBYSxHQUFHLElBQUksQ0FBQ2xGLHFCQUFxQixDQUFDUSxlQUFlLEVBQUVqQyxXQUFXLEVBQUV0RixZQUFZLENBQUMsR0FBRyxFQUFFO1FBQ3hILElBQUk2SCxVQUFVLENBQUNxRSxZQUFZLEtBQUtoTixZQUFZLENBQUNvTixjQUFjLEVBQUU7VUFDNUR6RSxVQUFVLENBQUN3RSxvQkFBb0IsRUFBRUUsT0FBTyxDQUFFbEYsU0FBUyxJQUFLO1lBQ3ZELElBQUksQ0FBQ2dGLG9CQUFvQixDQUFDdEksUUFBUSxDQUFDc0QsU0FBUyxDQUFDLEVBQUU7Y0FDOUNnRixvQkFBb0IsQ0FBQ2YsSUFBSSxDQUFDakUsU0FBUyxDQUFDO1lBQ3JDO1VBQ0QsQ0FBQyxDQUFDO1VBRUYsSUFBSWdGLG9CQUFvQixDQUFDckssTUFBTSxLQUFLLENBQUMsRUFBRTtZQUN0QztZQUNBLE1BQU0sSUFBSTBFLEtBQUssQ0FBQyw2Q0FBNkMsQ0FBQztVQUMvRDtRQUNEO1FBRUEsSUFBSTJGLG9CQUFvQixDQUFDckssTUFBTSxHQUFHLENBQUMsRUFBRTtVQUNwQzRGLGtCQUFrQixHQUFHLE1BQU0sSUFBSSxDQUFDNEUsZ0JBQWdCLENBQy9DakYsZUFBZSxFQUNmOEUsb0JBQW9CLEVBQ3BCeEUsVUFBVSxFQUNWN0gsWUFBWSxFQUNaeUgsYUFBYSxFQUNiQyxjQUNELENBQUM7UUFDRixDQUFDLE1BQU07VUFDTkUsa0JBQWtCLEdBQUcsTUFBTSxJQUFJLENBQUNxQixxQkFBcUIsQ0FBQzFCLGVBQWUsRUFBRU0sVUFBVSxDQUFDO1VBQ2xGLElBQUksQ0FBQ0EsVUFBVSxDQUFDSSxRQUFRLEVBQUU7WUFDekIsTUFBTSxJQUFJLENBQUN3RSx1QkFBdUIsQ0FBQzdFLGtCQUFrQixFQUFFQyxVQUFVLENBQUM2RSw0QkFBNEIsS0FBSyxJQUFJLENBQUM7VUFDekc7UUFDRDtRQUNBLE9BQU85RSxrQkFBa0I7TUFDMUIsQ0FBQyxDQUFDLE9BQU9hLEtBQWMsRUFBRTtRQUN4QixNQUFNa0UsR0FBRyxHQUFJbEUsS0FBSyxDQUFXbUUsT0FBTyxJQUFJbkUsS0FBSztRQUM3Q2dCLEdBQUcsQ0FBQ2hCLEtBQUssQ0FBQyx1Q0FBdUMsRUFBRWtFLEdBQUcsQ0FBQztRQUN2RCxNQUFNQSxHQUFHO01BQ1Y7SUFDRCxDQUFDO0lBQUE5TSxNQUFBLENBRURnTixlQUFlLEdBQWYsU0FBQUEsZUFBZUEsQ0FBQ0MsU0FBMkIsRUFBVztNQUNyRCxNQUFNQyxvQkFBb0IsR0FBR0QsU0FBUyxDQUFDLENBQUMsQ0FBQztNQUN6QyxNQUFNRSxpQkFBaUIsR0FBRyxJQUFJLENBQUN6TSxtQkFBbUIsQ0FBQ3dNLG9CQUFvQixDQUFDO01BQ3hFLE9BQU9DLGlCQUFpQixLQUFLNU4sZ0JBQWdCLENBQUM4QixLQUFLO0lBQ3BEOztJQUVBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BWkM7SUFBQXJCLE1BQUEsQ0FhTW9OLGNBQWMsR0FBcEIsZUFBTUEsY0FBY0EsQ0FDbkJ4QixRQUEyQyxFQUMzQ2hNLFdBQXdDLEVBQ3hDTyxZQUEwQixFQUMxQnlILGFBQTRCLEVBQzVCQyxjQUE4QixFQUNkO01BQ2hCO01BQ0EsSUFBSSxDQUFDM0gsUUFBUSxDQUFDQyxZQUFZLENBQUM7TUFFM0IsTUFBTWtOLGdCQUFnQixHQUFHQyxLQUFLLENBQUNDLE9BQU8sQ0FBQzNCLFFBQVEsQ0FBQyxHQUFHLENBQUMsR0FBR0EsUUFBUSxDQUFDLEdBQUcsQ0FBQ0EsUUFBUSxDQUFDO01BQzdFLE1BQU00QixZQUFZLEdBQUcsQ0FBQzVOLFdBQVcsQ0FBQzZOLGdCQUFnQixJQUFJSixnQkFBZ0IsRUFBRSxDQUFDLENBQUM7TUFFMUUsT0FBTyxJQUFJN0ssT0FBTyxDQUFPLENBQUNDLE9BQU8sRUFBRWlMLE1BQU0sS0FBSztRQUM3QyxJQUFJO1VBQ0gsTUFBTUMsWUFBWSxHQUFHLElBQUksQ0FBQ1gsZUFBZSxDQUFDcE4sV0FBVyxDQUFDNk4sZ0JBQWdCLElBQUlKLGdCQUFnQixDQUFDO1VBQzNGLE1BQU1PLEtBQWdCLEdBQUcsRUFBRTtVQUMzQixJQUFJbEksT0FBdUIsR0FBRyxFQUFFO1VBQ2hDLElBQUltSSxjQUFtQztVQUN2QztVQUNBLElBQUlqTyxXQUFXLEVBQUU7WUFDaEJBLFdBQVcsR0FBR0QsYUFBYSxDQUFDQyxXQUFXLENBQUM7WUFDeENBLFdBQVcsQ0FBQ2tPLGFBQWEsR0FBRyxJQUFJLENBQUNDLDRCQUE0QixDQUFDUCxZQUFZLENBQUM7WUFDM0UsSUFBSSxDQUFDNU4sV0FBVyxDQUFDb08sd0JBQXdCLEVBQUU7Y0FDMUM7Y0FDQSxJQUFJTCxZQUFZLEVBQUU7Z0JBQ2pCO2dCQUNBLE1BQU1NLGFBQWEsR0FBR1osZ0JBQWdCLENBQUNhLElBQUksQ0FBRW5LLE9BQU8sSUFBSztrQkFDeEQsTUFBTW9LLFdBQVcsR0FBR3BLLE9BQU8sQ0FBQ21CLFNBQVMsQ0FBQyxDQUFDO2tCQUN2QyxPQUNDaUosV0FBVyxDQUFDQyxjQUFjLEtBQUssSUFBSSxJQUNuQ0QsV0FBVyxDQUFDRSxjQUFjLEtBQUssSUFBSSxJQUNuQ0YsV0FBVyxDQUFDRyx1QkFBdUIsSUFDbkNILFdBQVcsQ0FBQ0csdUJBQXVCLENBQUNDLGVBQWUsSUFDbkQsQ0FBQ0osV0FBVyxDQUFDRyx1QkFBdUIsQ0FBQ0Usa0JBQWtCO2dCQUV6RCxDQUFDLENBQUM7Z0JBQ0YsSUFBSVAsYUFBYSxFQUFFO2tCQUNsQjtrQkFDQSxNQUFNUSxlQUFlLEdBQUdSLGFBQWEsQ0FBQy9JLFNBQVMsQ0FBQyxDQUFDLENBQUNvSix1QkFBdUIsQ0FBQ0MsZUFBZTtrQkFDekZHLFVBQVUsQ0FBQ0MsSUFBSSxDQUNkL0csYUFBYSxDQUFDZ0gsT0FBTyxDQUFDLCtEQUErRCxFQUFFLENBQ3RGSCxlQUFlLENBQ2YsQ0FBQyxFQUNGO29CQUNDSSxLQUFLLEVBQUVqSCxhQUFhLENBQUNnSCxPQUFPLENBQUMsaUJBQWlCLENBQUM7b0JBQy9DRSxPQUFPLEVBQUVwQjtrQkFDVixDQUNELENBQUM7a0JBQ0Q7Z0JBQ0QsQ0FBQyxNQUFNO2tCQUNORyxjQUFjLEdBQUdSLGdCQUFnQixDQUFDYSxJQUFJLENBQUVuSyxPQUFPLElBQUs7b0JBQ25ELE1BQU07c0JBQUVxSyxjQUFjO3NCQUFFQyxjQUFjO3NCQUFFQztvQkFBd0IsQ0FBQyxHQUFHdkssT0FBTyxDQUFDbUIsU0FBUyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7b0JBQzdGLE9BQU9rSixjQUFjLEtBQUssSUFBSSxJQUFJQyxjQUFjLEtBQUssSUFBSSxJQUFJLENBQUMsQ0FBQ0MsdUJBQXVCLEVBQUVDLGVBQWU7a0JBQ3hHLENBQUMsQ0FBQztnQkFDSDtjQUNEO2NBQ0EsSUFBSVEsV0FBVyxHQUFHLEVBQUU7Y0FDcEIsSUFBSWxCLGNBQWMsRUFBRTtnQkFDbkIsTUFBTW1CLGtCQUFrQixHQUFHbkIsY0FBYyxDQUFDM0ksU0FBUyxDQUFDLENBQUMsQ0FBQ29KLHVCQUF1QixDQUFDQyxlQUFlO2dCQUM3RlEsV0FBVyxHQUFHbkgsYUFBYSxDQUFDZ0gsT0FBTyxDQUNsQywwREFBMEQsRUFDMUQsQ0FBQ0ksa0JBQWtCLENBQUMsRUFDcEJwUCxXQUFXLENBQUNrTyxhQUNiLENBQUM7Y0FDRixDQUFDLE1BQU0sSUFBSWxPLFdBQVcsQ0FBQ2lQLEtBQUssRUFBRTtnQkFDN0IsSUFBSWpQLFdBQVcsQ0FBQ3FQLFdBQVcsRUFBRTtrQkFDNUJGLFdBQVcsR0FBR25ILGFBQWEsQ0FBQ2dILE9BQU8sQ0FDbEMscURBQXFELEVBQ3JELENBQUNoUCxXQUFXLENBQUNpUCxLQUFLLEVBQUVqUCxXQUFXLENBQUNxUCxXQUFXLENBQUMsRUFDNUNyUCxXQUFXLENBQUNrTyxhQUNiLENBQUM7Z0JBQ0YsQ0FBQyxNQUFNO2tCQUNOaUIsV0FBVyxHQUFHbkgsYUFBYSxDQUFDZ0gsT0FBTyxDQUNsQywyREFBMkQsRUFDM0QsQ0FBQ2hQLFdBQVcsQ0FBQ2lQLEtBQUssQ0FBQyxFQUNuQmpQLFdBQVcsQ0FBQ2tPLGFBQ2IsQ0FBQztnQkFDRjtjQUNELENBQUMsTUFBTTtnQkFDTmlCLFdBQVcsR0FBR25ILGFBQWEsQ0FBQ2dILE9BQU8sQ0FDbEMsK0RBQStELEVBQy9EbEwsU0FBUyxFQUNUOUQsV0FBVyxDQUFDa08sYUFDYixDQUFDO2NBQ0Y7Y0FDQXBJLE9BQU8sQ0FBQytGLElBQUksQ0FBQztnQkFDWnlELElBQUksRUFBRTFQLGlCQUFpQixDQUFDMlAsaUJBQWlCO2dCQUN6Q3ZELFFBQVEsRUFBRXlCLGdCQUFnQjtnQkFDMUIrQixJQUFJLEVBQUVMLFdBQVc7Z0JBQ2pCTSxRQUFRLEVBQUUsSUFBSTtnQkFDZDVHLE9BQU8sRUFBRS9JLDBCQUEwQixDQUFDNFA7Y0FDckMsQ0FBQyxDQUFDO1lBQ0gsQ0FBQyxNQUFNO2NBQ047Y0FDQSxJQUFJQyxjQUFjLEdBQUdsQyxnQkFBZ0IsQ0FBQ2xMLE1BQU07Y0FFNUMsSUFBSXdMLFlBQVksRUFBRTtnQkFDakI0QixjQUFjLElBQ2IsQ0FBQzNQLFdBQVcsQ0FBQzRQLDRCQUE0QixFQUFFck4sTUFBTSxJQUFJLENBQUMsS0FDckR2QyxXQUFXLENBQUM2UCx5QkFBeUIsRUFBRXROLE1BQU0sSUFBSSxDQUFDLENBQUMsSUFDbkR2QyxXQUFXLENBQUM4UCxlQUFlLEVBQUV2TixNQUFNLElBQUksQ0FBQyxDQUFDO2dCQUMzQzFDLFlBQVksQ0FBQ2tRLG1DQUFtQyxDQUMvQy9QLFdBQVcsRUFDWHlOLGdCQUFnQixFQUNoQmtDLGNBQWMsRUFDZDNILGFBQWEsRUFDYmdHLEtBQUssRUFDTGxJLE9BQ0QsQ0FBQztjQUNGLENBQUMsTUFBTTtnQkFDTixNQUFNa0ssZ0JBQWdCLEdBQUduUSxZQUFZLENBQUNvUSxtQkFBbUIsQ0FBQ2pRLFdBQVcsRUFBRTJQLGNBQWMsRUFBRTNILGFBQWEsQ0FBQztnQkFDckcsSUFBSWdJLGdCQUFnQixFQUFFO2tCQUNyQmhDLEtBQUssQ0FBQ25DLElBQUksQ0FBQ21FLGdCQUFnQixDQUFDO2dCQUM3QjtjQUNEO2NBRUEsTUFBTUUscUJBQXFCLEdBQUdyUSxZQUFZLENBQUNzUSwyQkFBMkIsQ0FDckVuUSxXQUFXLEVBQ1h5TixnQkFBZ0IsRUFDaEJ6RixhQUNELENBQUM7Y0FDRGxDLE9BQU8sR0FBRyxDQUFDLEdBQUdBLE9BQU8sRUFBRSxHQUFHb0sscUJBQXFCLENBQUM7WUFDakQ7VUFDRDtVQUVBLE1BQU1FLGFBQWEsR0FBR3hDLFlBQVksQ0FBQ3lDLFVBQVUsQ0FBQyxDQUFZO1VBQzFELElBQUlDLFdBQThDO1VBQ2xELElBQUlGLGFBQWEsQ0FBQ25QLEdBQUcsQ0FBbUIsd0NBQXdDLENBQUMsRUFBRTtZQUNsRixJQUFJLElBQUksQ0FBQ3NFLHlCQUF5QixDQUFDNkssYUFBYSxDQUFDLEVBQUU7Y0FDbERFLFdBQVcsR0FBRyxNQUFNO1lBQ3JCLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQzVLLHVCQUF1QixDQUFDMEssYUFBYSxDQUFDLEVBQUU7Y0FDdkRFLFdBQVcsR0FBRyxZQUFZO1lBQzNCO1VBQ0Q7O1VBRUE7VUFDQXpRLFlBQVksQ0FBQzBRLDRCQUE0QixDQUFDekssT0FBTyxFQUFFa0ksS0FBSyxDQUFDO1VBQ3pELE1BQU13QyxTQUFTLEdBQUcsTUFBQUEsQ0FBQSxLQUEyQjtZQUM1Q0MsZUFBZSxDQUFDQyw2QkFBNkIsQ0FBQyxDQUFDO1lBQy9DLElBQUksQ0FBQ3BRLFFBQVEsQ0FBQ0MsWUFBWSxDQUFDO1lBRTNCLElBQUk7Y0FDSCxNQUFNVixZQUFZLENBQUM4USxvQkFBb0IsQ0FDdEM3SyxPQUFPLEVBQ1A5RixXQUFXLEVBQ1hpSSxjQUFjLEVBQ2RELGFBQWEsRUFDYnpILFlBQVksRUFDWndOLFlBQVksRUFDWnVDLFdBQ0QsQ0FBQztjQUNEek4sT0FBTyxDQUFDLENBQUM7WUFDVixDQUFDLENBQUMsT0FBTytOLE1BQWUsRUFBRTtjQUN6QjlDLE1BQU0sQ0FBQyxDQUFDO1lBQ1QsQ0FBQyxTQUFTO2NBQ1QsSUFBSSxDQUFDbE4sVUFBVSxDQUFDTCxZQUFZLENBQUM7WUFDOUI7VUFDRCxDQUFDO1VBRUQsTUFBTXNRLE1BQU0sR0FBRyxJQUFJLENBQUNDLGtCQUFrQixDQUFDOUMsS0FBSyxFQUFFaE8sV0FBVyxFQUFFZ0ksYUFBYSxFQUFFd0ksU0FBUyxFQUFFMUMsTUFBTSxDQUFDO1VBRTVGLElBQUk5TixXQUFXLENBQUMrUSxRQUFRLEtBQUssSUFBSSxJQUFJL1EsV0FBVyxDQUFDZ1IsVUFBVSxLQUFLLElBQUksRUFBRTtZQUNyRVIsU0FBUyxDQUFDLENBQUM7VUFDWixDQUFDLE1BQU07WUFDTkssTUFBTSxDQUFDSSxhQUFhLENBQUMscUJBQXFCLENBQUM7WUFDM0NKLE1BQU0sQ0FBQ0ssSUFBSSxDQUFDLENBQUM7VUFDZDtRQUNELENBQUMsU0FBUztVQUNUO1VBQ0EsSUFBSSxDQUFDdFEsVUFBVSxDQUFDTCxZQUFZLENBQUM7UUFDOUI7TUFDRCxDQUFDLENBQUM7SUFDSDs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BVkM7SUFBQUgsTUFBQSxDQVdBMFEsa0JBQWtCLEdBQWxCLFNBQUFBLGtCQUFrQkEsQ0FDakI5QyxLQUFnQixFQUNoQjVGLFVBQWtGLEVBQ2xGSixhQUE0QixFQUM1QndJLFNBQW1CLEVBQ25CVyxRQUFrQixFQUNUO01BQ1QsSUFBSUMsZUFBZSxHQUFHLEtBQUs7TUFDM0IsTUFBTUMsSUFBSSxHQUFHLElBQUlDLElBQUksQ0FBQztRQUFFdEQsS0FBSyxFQUFFQTtNQUFNLENBQUMsQ0FBQztNQUN2QyxNQUFNdUQsa0JBQWtCLEdBQUdDLE9BQU8sQ0FBQ0Msb0JBQW9CLENBQUMsYUFBYSxDQUFFO01BQ3ZFLElBQUl4QyxLQUF5QjtNQUM3QixJQUFJN0csVUFBVSxDQUFDVSxhQUFhLEVBQUU3SCxHQUFHLENBQUMsa0JBQWtCLENBQUMsRUFBRTtRQUN0RGdPLEtBQUssR0FBR2pILGFBQWEsQ0FBQ2dILE9BQU8sQ0FBQyx1QkFBdUIsRUFBRWxMLFNBQVMsRUFBRXNFLFVBQVUsQ0FBQzhGLGFBQWEsQ0FBQztNQUM1RixDQUFDLE1BQU07UUFDTmUsS0FBSyxHQUFHc0Msa0JBQWtCLENBQUN2QyxPQUFPLENBQUMsaUJBQWlCLENBQUM7TUFDdEQ7TUFDQSxNQUFNNkIsTUFBTSxHQUFHLElBQUlhLE1BQU0sQ0FBQztRQUN6QnpDLEtBQUssRUFBRUEsS0FBSztRQUNaMEMsS0FBSyxFQUFFLFNBQVM7UUFDaEJDLE9BQU8sRUFBRSxDQUFDUCxJQUFJLENBQUM7UUFDZlEsY0FBYyxFQUFFN0QsS0FBSztRQUNyQjhELFdBQVcsRUFBRSxJQUFJQyxNQUFNLENBQUM7VUFDdkJ2QyxJQUFJLEVBQUVQLEtBQUs7VUFDWEssSUFBSSxFQUFFLFlBQVk7VUFDbEIwQyxLQUFLLEVBQUUsU0FBQUEsQ0FBQSxFQUFrQjtZQUN4QlosZUFBZSxHQUFHLElBQUk7WUFDdEJQLE1BQU0sQ0FBQ29CLEtBQUssQ0FBQyxDQUFDO1lBQ2R6QixTQUFTLENBQUMsQ0FBQztVQUNaO1FBQ0QsQ0FBQyxDQUFDO1FBQ0YwQixTQUFTLEVBQUUsSUFBSUgsTUFBTSxDQUFDO1VBQ3JCdkMsSUFBSSxFQUFFeEgsYUFBYSxDQUFDZ0gsT0FBTyxDQUFDLHdCQUF3QixDQUFDO1VBQ3JEZ0QsS0FBSyxFQUFFLFNBQUFBLENBQUEsRUFBa0I7WUFDeEJuQixNQUFNLENBQUNvQixLQUFLLENBQUMsQ0FBQztVQUNmO1FBQ0QsQ0FBQyxDQUFDO1FBQ0ZFLFVBQVUsRUFBRSxTQUFBQSxDQUFBLEVBQWtCO1VBQzdCdEIsTUFBTSxDQUFDdUIsT0FBTyxDQUFDLENBQUM7VUFDaEI7VUFDQSxJQUFJLENBQUNoQixlQUFlLEVBQUU7WUFDckJELFFBQVEsQ0FBQyxDQUFDO1VBQ1g7UUFDRDtNQUNELENBQUMsQ0FBQztNQUNGLE9BQU9OLE1BQU07SUFDZDs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BVkM7SUFBQXpRLE1BQUEsQ0FXTWlTLFlBQVksR0FBbEIsZUFBTUEsWUFBWUEsQ0FDakJ2USxRQUF3QixFQUN4QkMsS0FBYSxFQUNieEIsWUFBMEIsRUFDMUIwSCxjQUE4QixFQUM5QnFLLE9BQWUsRUFDZkMsa0JBQW9ELEVBQ2Q7TUFDdEMsTUFBTWhGLGlCQUFpQixHQUFHLElBQUksQ0FBQ3pNLG1CQUFtQixDQUFDZ0IsUUFBUSxDQUFDO01BQzVELElBQUksQ0FBQ0EsUUFBUSxFQUFFO1FBQ2QsTUFBTSxJQUFJbUYsS0FBSyxDQUFDLGdEQUFnRCxDQUFDO01BQ2xFO01BQ0EsSUFBSXNHLGlCQUFpQixLQUFLNU4sZ0JBQWdCLENBQUM4QixLQUFLLElBQUk4TCxpQkFBaUIsS0FBSzVOLGdCQUFnQixDQUFDZ0MsTUFBTSxFQUFFO1FBQ2xHLE1BQU0sSUFBSXNGLEtBQUssQ0FBQyxxRUFBcUUsQ0FBQztNQUN2RjtNQUNBLElBQUksQ0FBQzNHLFFBQVEsQ0FBQ0MsWUFBWSxDQUFDO01BQzNCO01BQ0EwSCxjQUFjLENBQUN1Syx3QkFBd0IsQ0FBQyxDQUFDO01BQ3pDLE1BQU0vSixrQkFBa0IsR0FBR1IsY0FBYyxDQUFDUyxzQkFBc0IsQ0FBQyxDQUFDO01BRWxFLElBQUk7UUFDSCxNQUFNK0osV0FBVyxHQUNoQmxGLGlCQUFpQixLQUFLNU4sZ0JBQWdCLENBQUM4QixLQUFLLEdBQ3pDLE1BQU1pUixLQUFLLENBQUNDLDZCQUE2QixDQUN6QzdRLFFBQVEsRUFDUnZCLFlBQVksRUFDWjtVQUNDcVMsZ0JBQWdCLEVBQUUsSUFBSTtVQUN0QjdRLEtBQUssRUFBRUE7UUFDUixDQUFDLEVBQ0R1USxPQUFPLEVBQ1BySyxjQUFjLEVBQ2RzSyxrQkFDQSxDQUFDLEdBQ0QsTUFBTU0sTUFBTSxDQUFDQywyQkFBMkIsQ0FBQ2hSLFFBQVEsRUFBRXZCLFlBQVksRUFBRTBILGNBQWMsQ0FBQztRQUVwRixNQUFNQSxjQUFjLENBQUNXLGlCQUFpQixDQUFDO1VBQUVHLFNBQVMsRUFBRU47UUFBbUIsQ0FBQyxDQUFDO1FBQ3pFLE9BQU9nSyxXQUFXO01BQ25CLENBQUMsQ0FBQyxPQUFPTSxHQUFZLEVBQUU7UUFDdEIsTUFBTTlLLGNBQWMsQ0FBQytLLFlBQVksQ0FBQztVQUFFQyxrQkFBa0IsRUFBRSxJQUFJO1VBQUVsSyxTQUFTLEVBQUVOO1FBQW1CLENBQUMsQ0FBQztRQUM5RixNQUFNc0ssR0FBRztNQUNWLENBQUMsU0FBUztRQUNULElBQUksQ0FBQ25TLFVBQVUsQ0FBQ0wsWUFBWSxDQUFDO01BQzlCO0lBQ0Q7O0lBRUE7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQWJDO0lBQUFILE1BQUEsQ0FjTThTLGNBQWMsR0FBcEIsZUFBTUEsY0FBY0EsQ0FDbkJwUixRQUF3QixFQUN4QnFSLGFBQTJDLEVBQzNDNVMsWUFBMEIsRUFDMUJ5SCxhQUE0QixFQUM1QkMsY0FBOEIsRUFDOUJtTCxXQUFvQixFQUNwQkMsZ0JBQXlCLEVBQ2E7TUFDdEM7TUFDQSxJQUFJLENBQUN2UixRQUFRLEVBQUU7UUFDZCxNQUFNLElBQUltRixLQUFLLENBQUMsOENBQThDLENBQUM7TUFDaEU7TUFDQSxNQUFNakgsV0FBVyxHQUFHRCxhQUFhLENBQUNvVCxhQUFhLENBQUM7TUFDaEQsTUFBTUcsTUFBTSxHQUFHeFIsUUFBUSxDQUFDbkIsUUFBUSxDQUFDLENBQUM7TUFDbEMsTUFBTTRNLGlCQUFpQixHQUFHLElBQUksQ0FBQ3pNLG1CQUFtQixDQUFDZ0IsUUFBUSxDQUFDO01BRTVELElBQUl5TCxpQkFBaUIsS0FBSzVOLGdCQUFnQixDQUFDOEIsS0FBSyxJQUFJOEwsaUJBQWlCLEtBQUs1TixnQkFBZ0IsQ0FBQ2dDLE1BQU0sRUFBRTtRQUNsRyxNQUFNLElBQUlzRixLQUFLLENBQUMsNkVBQTZFLENBQUM7TUFDL0Y7TUFDQSxJQUFJLENBQUMzRyxRQUFRLENBQUNDLFlBQVksQ0FBQztNQUMzQixJQUFJO1FBQ0gsSUFBSWdULGFBQXlDO1FBQzdDLElBQUlDLDJCQUEyQixFQUFFQyxjQUFjO1FBQy9DLE1BQU1DLGNBQWMsR0FBR0osTUFBTSxDQUFDNU8sV0FBVyxDQUFDLEdBQUc1QyxRQUFRLENBQUNaLE9BQU8sQ0FBQyxDQUFDLGdCQUFnQixDQUFDLENBQUN5RCxlQUFlLENBQUMsQ0FBQztRQUNsRyxJQUFJNEksaUJBQWlCLEtBQUs1TixnQkFBZ0IsQ0FBQzhCLEtBQUssSUFBSSxDQUFDNFIsZ0JBQWdCLEVBQUU7VUFDdEUsTUFBTU0sZ0JBQWdCLEdBQUdMLE1BQU0sQ0FBQzVPLFdBQVcsQ0FBQyxHQUFHNUMsUUFBUSxDQUFDWixPQUFPLENBQUMsQ0FBQywwQkFBMEIsQ0FBQyxDQUFDeUQsZUFBZSxDQUFDLENBQUM7VUFDOUcsQ0FBQzZPLDJCQUEyQixFQUFFQyxjQUFjLENBQUMsR0FBRyxNQUFNN1EsT0FBTyxDQUFDZ1IsR0FBRyxDQUFDLENBQ2pFUixXQUFXLEdBQUd0UCxTQUFTLEdBQUc0UCxjQUFjLENBQUNHLG9CQUFvQixDQUFDLENBQUMsRUFDL0RGLGdCQUFnQixDQUFDRyxhQUFhLENBQUMsQ0FBQyxDQUNoQyxDQUFDO1VBQ0YsSUFBSUwsY0FBYyxFQUFFO1lBQ25CSixnQkFBZ0IsR0FBR0ksY0FBYyxDQUFDTSxnQkFBZ0IsS0FBS04sY0FBYyxDQUFDTyxrQkFBa0I7VUFDekY7UUFDRDtRQUNBLElBQUksQ0FBQ2hVLFdBQVcsQ0FBQ2lVLGtCQUFrQixFQUFFO1VBQ3BDLE1BQU0sSUFBSSxDQUFDQyxlQUFlLENBQUNsVSxXQUFXLENBQUNtVSxZQUFZLEVBQUVkLGdCQUFnQixFQUFFckwsYUFBYSxDQUFDO1FBQ3RGO1FBQ0EsSUFBSWxHLFFBQVEsQ0FBQ3NTLFdBQVcsQ0FBQyxDQUFDLEVBQUU7VUFDM0I7VUFDQTtVQUNBdFMsUUFBUSxDQUFDdVMsWUFBWSxDQUFDLElBQUksRUFBRXZRLFNBQVMsQ0FBQztRQUN2QztRQUNBLElBQUk5RCxXQUFXLENBQUNzVSxvQkFBb0IsRUFBRTtVQUNyQyxNQUFNdFUsV0FBVyxDQUFDc1Usb0JBQW9CLENBQUM7WUFBRW5RLE9BQU8sRUFBRXJDO1VBQVMsQ0FBQyxDQUFDO1FBQzlEO1FBQ0EsSUFBSXlMLGlCQUFpQixLQUFLNU4sZ0JBQWdCLENBQUM4QixLQUFLLEVBQUU7VUFDakQsSUFBSTJSLFdBQVcsRUFBRTtZQUNoQixJQUFJdFIsUUFBUSxDQUFDeVMsaUJBQWlCLENBQUMsQ0FBQyxFQUFFO2NBQ2pDelMsUUFBUSxDQUFDdU8sVUFBVSxDQUFDLENBQUMsQ0FBQ21FLFlBQVksQ0FBQyxDQUFDO1lBQ3JDO1lBQ0EsTUFBTTlCLEtBQUssQ0FBQytCLFdBQVcsQ0FBQzNTLFFBQVEsRUFBRW1HLGNBQWMsRUFBRTFILFlBQVksQ0FBQztVQUNoRSxDQUFDLE1BQU07WUFDTixJQUFJO2NBQ0gsSUFBSXVCLFFBQVEsQ0FBQ3lTLGlCQUFpQixDQUFDLENBQUMsRUFBRTtnQkFDakN6UyxRQUFRLENBQUN1TyxVQUFVLENBQUMsQ0FBQyxDQUFDbUUsWUFBWSxDQUFDLENBQUM7Y0FDckM7Y0FDQWpCLGFBQWEsR0FBR0QsTUFBTSxDQUNwQjVPLFdBQVcsQ0FDWDhPLDJCQUEyQixHQUFHQSwyQkFBMkIsR0FBRyxNQUFNRSxjQUFjLENBQUNHLG9CQUFvQixDQUFDLENBQ3ZHLENBQUMsQ0FDQWxQLGVBQWUsQ0FBQyxDQUFDO1lBQ3BCLENBQUMsU0FBUztjQUNULE1BQU0rTixLQUFLLENBQUMrQixXQUFXLENBQUMzUyxRQUFRLEVBQUVtRyxjQUFjLEVBQUUxSCxZQUFZLENBQUM7WUFDaEU7VUFDRDtRQUNELENBQUMsTUFBTTtVQUNOLE1BQU1tVSxnQkFBZ0IsR0FBRyxNQUFNN0IsTUFBTSxDQUFDOEIsZUFBZSxDQUFDN1MsUUFBUSxDQUFDO1VBQy9ELElBQUk0UyxnQkFBZ0IsRUFBRTtZQUNyQixJQUFJQSxnQkFBZ0IsQ0FBQ0gsaUJBQWlCLENBQUMsQ0FBQyxFQUFFO2NBQ3pDRyxnQkFBZ0IsQ0FBQ3JFLFVBQVUsQ0FBQyxDQUFDLENBQUNtRSxZQUFZLENBQUMsQ0FBQztZQUM3QztZQUNBLElBQUksQ0FBQ3BCLFdBQVcsRUFBRTtjQUNqQnNCLGdCQUFnQixDQUFDRSxPQUFPLENBQUMsQ0FBQztjQUMxQnJCLGFBQWEsR0FBR21CLGdCQUFnQjtZQUNqQztVQUNEO1FBQ0Q7O1FBRUE7UUFDQXpNLGNBQWMsQ0FBQ3VLLHdCQUF3QixDQUFDLENBQUM7UUFDekM7UUFDQSxNQUFNdkssY0FBYyxDQUFDK0ssWUFBWSxDQUFDLENBQUM7UUFDbkMsT0FBT08sYUFBYTtNQUNyQixDQUFDLENBQUMsT0FBT1IsR0FBWSxFQUFFO1FBQ3RCLE1BQU05SyxjQUFjLENBQUMrSyxZQUFZLENBQUMsQ0FBQztRQUNuQyxNQUFNRCxHQUFHO01BQ1YsQ0FBQyxTQUFTO1FBQ1QsSUFBSSxDQUFDblMsVUFBVSxDQUFDTCxZQUFZLENBQUM7TUFDOUI7SUFDRDs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQVpDO0lBQUFILE1BQUEsQ0FhTXlVLFlBQVksR0FBbEIsZUFBTUEsWUFBWUEsQ0FDakIxUSxPQUF1QixFQUN2QjVELFlBQTBCLEVBQzFCeUgsYUFBNEIsRUFDNUI4TSx5QkFBa0MsRUFDbENDLHNCQUEwQyxFQUMxQzlNLGNBQThCLEVBQzlCbUwsV0FBb0IsRUFHTTtNQUFBLElBRjFCNEIsbUJBQW1CLEdBQUFDLFNBQUEsQ0FBQTFTLE1BQUEsUUFBQTBTLFNBQUEsUUFBQW5SLFNBQUEsR0FBQW1SLFNBQUEsTUFBRyxLQUFLO01BQUEsSUFDM0JDLGNBQXdCLEdBQUFELFNBQUEsQ0FBQTFTLE1BQUEsT0FBQTBTLFNBQUEsTUFBQW5SLFNBQUE7TUFFeEIsTUFBTXlKLGlCQUFpQixHQUFHLElBQUksQ0FBQ3pNLG1CQUFtQixDQUFDcUQsT0FBTyxDQUFDO01BQzNELElBQUlvSixpQkFBaUIsS0FBSzVOLGdCQUFnQixDQUFDZ0MsTUFBTSxJQUFJNEwsaUJBQWlCLEtBQUs1TixnQkFBZ0IsQ0FBQzhCLEtBQUssRUFBRTtRQUNsRyxNQUFNLElBQUl3RixLQUFLLENBQUMscUVBQXFFLENBQUM7TUFDdkY7TUFFQSxJQUFJO1FBQ0gsSUFBSSxDQUFDM0csUUFBUSxDQUFDQyxZQUFZLENBQUM7UUFDM0IsTUFBTTJOLGFBQWEsR0FBRyxJQUFJLENBQUNDLDRCQUE0QixDQUFDaEssT0FBTyxDQUFDO1FBQ2hFLE1BQU1nUixlQUFlLEdBQ3BCNUgsaUJBQWlCLEtBQUs1TixnQkFBZ0IsQ0FBQzhCLEtBQUssR0FDekMsTUFBTWlSLEtBQUssQ0FBQzBDLGdCQUFnQixDQUFDalIsT0FBTyxFQUFFNUQsWUFBWSxFQUFFMEgsY0FBYyxFQUFFO1VBQUVELGFBQWEsRUFBRUE7UUFBYyxDQUFDLEVBQUVrTixjQUFjLENBQUMsR0FDckgsTUFBTXJDLE1BQU0sQ0FBQ3VDLGdCQUFnQixDQUM3QmpSLE9BQU8sRUFDUDVELFlBQVksRUFDWjBILGNBQWMsRUFDZDtVQUFFRCxhQUFhLEVBQUVBO1FBQWMsQ0FBQyxFQUNoQ2tOLGNBQ0EsQ0FBQztRQUVMLE1BQU1HLGdCQUFnQixHQUFHNUUsZUFBZSxDQUFDNkUsV0FBVyxDQUFDLENBQUMsQ0FBQ0MsTUFBTSxDQUFDOUUsZUFBZSxDQUFDNkUsV0FBVyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDeEcsSUFBSSxDQUFDTixtQkFBbUIsSUFBSSxFQUFFSyxnQkFBZ0IsQ0FBQzlTLE1BQU0sS0FBSyxDQUFDLElBQUk4UyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQ0csT0FBTyxDQUFDLENBQUMsS0FBS0MsV0FBVyxDQUFDQyxPQUFPLENBQUMsRUFBRTtVQUN0SDtVQUNBQyxZQUFZLENBQUM1RyxJQUFJLENBQ2hCcUUsV0FBVyxHQUNScEwsYUFBYSxDQUFDZ0gsT0FBTyxDQUFDLHFDQUFxQyxFQUFFbEwsU0FBUyxFQUFFb0ssYUFBYSxDQUFDLEdBQ3RGbEcsYUFBYSxDQUFDZ0gsT0FBTyxDQUFDLG1DQUFtQyxFQUFFbEwsU0FBUyxFQUFFb0ssYUFBYSxDQUN2RixDQUFDO1FBQ0Y7UUFFQSxPQUFPaUgsZUFBZTtNQUN2QixDQUFDLENBQUMsT0FBT3BDLEdBQVksRUFBRTtRQUN0QixJQUFJK0IseUJBQXlCLElBQUlDLHNCQUFzQixFQUFFeFMsTUFBTSxHQUFHLENBQUMsRUFBRTtVQUNwRTtVQUNBd1Msc0JBQXNCLENBQUNqSSxPQUFPLENBQUUvSixXQUFXLElBQUs7WUFDL0MsSUFBSSxDQUFDdUgsV0FBVyxDQUFDc0wsbUJBQW1CLENBQUM3UyxXQUFXLENBQUMsRUFBRTtjQUNsRHhDLFlBQVksQ0FBQ3NWLHFCQUFxQixDQUFDLENBQUMsQ0FBQ0MsdUNBQXVDLENBQUMvUyxXQUFXLENBQUM3QixPQUFPLENBQUMsQ0FBQyxFQUFFaUQsT0FBTyxDQUFDO1lBQzdHO1VBQ0QsQ0FBQyxDQUFDO1FBQ0g7UUFDQSxNQUFNOEQsY0FBYyxDQUFDK0ssWUFBWSxDQUFDLENBQUM7UUFDbkMsTUFBTUQsR0FBRztNQUNWLENBQUMsU0FBUztRQUNULElBQUksQ0FBQ25TLFVBQVUsQ0FBQ0wsWUFBWSxDQUFDO01BQzlCO0lBQ0Q7O0lBRUE7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQXpCQztJQUFBSCxNQUFBLENBMEJNMkwsVUFBVSxHQUFoQixlQUFNQSxVQUFVQSxDQUNmZ0ssV0FBbUIsRUFDbkIvVixXQWtCQyxFQUNETyxZQUEwQixFQUMxQjBILGNBQThCLEVBQ3FCO01BQ25EakksV0FBVyxHQUFHRCxhQUFhLENBQUNDLFdBQVcsQ0FBQztNQUN4QyxJQUFJZ1csZ0JBQWdCO01BQ3BCLElBQUkxQyxNQUE4QjtNQUNsQyxJQUFJLENBQUN5QyxXQUFXLEVBQUU7UUFDakIsTUFBTSxJQUFJOU8sS0FBSyxDQUFDLHVDQUF1QyxDQUFDO01BQ3pEO01BQ0E7TUFDQTtNQUNBO01BQ0EsTUFBTWdQLEtBQUssR0FBR0YsV0FBVyxDQUFDdlIsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUV2Q3dSLGdCQUFnQixHQUFHQyxLQUFLLEdBQUduUyxTQUFTLEdBQUc5RCxXQUFXLENBQUNnTSxRQUFRO01BQzNEO01BQ0EsSUFBSWdLLGdCQUFnQixLQUFNdEksS0FBSyxDQUFDQyxPQUFPLENBQUNxSSxnQkFBZ0IsQ0FBQyxJQUFJQSxnQkFBZ0IsQ0FBQ3pULE1BQU0sSUFBSyxDQUFDbUwsS0FBSyxDQUFDQyxPQUFPLENBQUNxSSxnQkFBZ0IsQ0FBQyxDQUFDLEVBQUU7UUFDM0hBLGdCQUFnQixHQUFHdEksS0FBSyxDQUFDQyxPQUFPLENBQUNxSSxnQkFBZ0IsQ0FBQyxHQUFHQSxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsR0FBR0EsZ0JBQWdCO1FBQzNGMUMsTUFBTSxHQUFHMEMsZ0JBQWdCLENBQUNyVixRQUFRLENBQUMsQ0FBQztNQUNyQztNQUNBLElBQUlYLFdBQVcsQ0FBQ2dELEtBQUssRUFBRTtRQUN0QnNRLE1BQU0sR0FBR3RULFdBQVcsQ0FBQ2dELEtBQUs7TUFDM0I7TUFDQSxJQUFJLENBQUNzUSxNQUFNLEVBQUU7UUFDWixNQUFNLElBQUlyTSxLQUFLLENBQUMsMkVBQTJFLENBQUM7TUFDN0Y7TUFDQSxNQUFNd0Isa0JBQWtCLEdBQUdSLGNBQWMsQ0FBQ1Msc0JBQXNCLENBQUMsQ0FBQztNQUNsRSxJQUFJO1FBQ0gsTUFBTUcsT0FBTyxHQUFJN0ksV0FBVyxDQUFDa1csU0FBUyxHQUFHbFcsV0FBVyxDQUFDb00sSUFBSSxDQUFDK0osSUFBSSxDQUFDblcsV0FBVyxDQUFDa1csU0FBUyxDQUFDLEdBQUdsVyxXQUFXLENBQUNvTSxJQUV4RjtRQUNaLElBQUlnSyxPQUFnRDtRQUNwRCxJQUFJSixnQkFBZ0IsSUFBSWhXLFdBQVcsQ0FBQ2dNLFFBQVEsRUFBRTtVQUM3QyxNQUFNQSxRQUFRLEdBQUcwQixLQUFLLENBQUNDLE9BQU8sQ0FBQzNOLFdBQVcsQ0FBQ2dNLFFBQVEsQ0FBQyxHQUFHaE0sV0FBVyxDQUFDZ00sUUFBUSxHQUFHLENBQUNoTSxXQUFXLENBQUNnTSxRQUFRLENBQUMsQ0FBQyxDQUFDOztVQUV0RyxNQUFNM0ssU0FBUyxHQUFHaVMsTUFBTSxDQUFDaFMsWUFBWSxDQUFDLENBQUM7WUFDdEMrVSxVQUFVLEdBQUcsR0FBR2hWLFNBQVMsQ0FBQ3lELFdBQVcsQ0FBQ2tILFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQzlLLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSTZVLFdBQVcsRUFBRTtZQUM3RU8sV0FBVyxHQUFHalYsU0FBUyxDQUFDa1Ysb0JBQW9CLENBQUMsR0FBR0YsVUFBVSxtQkFBbUIsQ0FBRTtVQUVoRixNQUFNRyxjQUFjLEdBQUdDLFlBQVksQ0FBQ25ELE1BQU0sQ0FBQ2hTLFlBQVksQ0FBQyxDQUFDLENBQUM7VUFDMUQsTUFBTW9WLGVBQWUsR0FBR0YsY0FBYyxDQUFDRyxXQUFXLENBQXdCTCxXQUFXLENBQUNwVixPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMwVixNQUFNO1VBQ3ZHLElBQUksQ0FBQ0YsZUFBZSxFQUFFO1lBQ3JCLE1BQU0sSUFBSXpQLEtBQUssQ0FBQyxzQkFBc0IsQ0FBQztVQUN4QztVQUNBbVAsT0FBTyxHQUFHLE1BQU0sSUFBSVMsU0FBUyxDQUFDdFcsWUFBWSxFQUFFK1MsTUFBTSxFQUFFb0QsZUFBZSxFQUFFO1lBQ3BFSSxlQUFlLEVBQUU5VyxXQUFXLENBQUM4VyxlQUFzRjtZQUNuSDlLLFFBQVE7WUFDUitLLGtCQUFrQixFQUFFL1csV0FBVyxDQUFDK1csa0JBQWtCO1lBQ2xEN0ssS0FBSyxFQUFFbE0sV0FBVyxDQUFDa00sS0FBSztZQUN4QkksbUJBQW1CLEVBQUV0TSxXQUFXLENBQUNzTSxtQkFBbUI7WUFDcERaLGlCQUFpQixFQUFFMUwsV0FBVyxDQUFDMEwsaUJBQWlCO1lBQ2hEd0MsYUFBYSxFQUFFbE8sV0FBVyxDQUFDa08sYUFBYTtZQUN4QzhJLGVBQWUsRUFBRTtjQUNoQkMsNkJBQTZCLEVBQUUsSUFBSTtjQUNuQ0MsY0FBYyxFQUFFLElBQUk7Y0FDcEI1RSxPQUFPLEVBQUV0UyxXQUFXLENBQUNzUyxPQUFPO2NBQzVCNkUsVUFBVSxFQUFFblgsV0FBVyxDQUFDbVg7WUFDekIsQ0FBQztZQUNEQyxXQUFXLEVBQUU7Y0FDWkMsYUFBYSxFQUFFQSxDQUFBLEtBQVk7Z0JBQzFCcFAsY0FBYyxFQUFFdUssd0JBQXdCLENBQUMsQ0FBQztnQkFDMUMsSUFBSSxDQUFDbFMsUUFBUSxDQUFDQyxZQUFZLENBQUM7Y0FDNUIsQ0FBQztjQUNEK1csZUFBZSxFQUFFQSxDQUFBLEtBQVk7Z0JBQzVCLElBQUksQ0FBQzFXLFVBQVUsQ0FBQ0wsWUFBWSxDQUFDO2NBQzlCLENBQUM7Y0FDRGdYLG9CQUFvQixFQUFFQSxDQUFBLEtBQVk7Z0JBQ2pDLElBQUksQ0FBQ0MsaUNBQWlDLENBQUM7a0JBQ3RDQyxvQkFBb0IsRUFBRXpYLFdBQVcsQ0FBQ3lYLG9CQUFvQjtrQkFDdERDLHFCQUFxQixFQUFFMVgsV0FBVyxDQUFDMFgscUJBQXFCO2tCQUN4RDdPLE9BQU8sRUFBRUEsT0FBTztrQkFDaEJtRCxRQUFRO2tCQUNSMEs7Z0JBQ0QsQ0FBQyxDQUFDO2NBQ0g7WUFDRCxDQUFDO1lBQ0R0SyxJQUFJLEVBQUVwTSxXQUFXLENBQUNvTSxJQUFjO1lBQ2hDQyxjQUFjLEVBQUVyTSxXQUFXLENBQUNxTSxjQUFjO1lBQzFDcEUsY0FBYyxFQUFFQSxjQUFjO1lBQzlCMFAsOEJBQThCLEVBQUUzWCxXQUFXLENBQUMyWDtVQUM3QyxDQUFDLENBQUMsQ0FBQ0MsT0FBTyxDQUFDLENBQUM7UUFDYixDQUFDLE1BQU07VUFDTnhCLE9BQU8sR0FBRyxNQUFNbFIsVUFBVSxDQUFDMlMsZ0JBQWdCLENBQUM5QixXQUFXLEVBQUV6QyxNQUFNLEVBQUUvUyxZQUFZLEVBQUU7WUFDOUV1VyxlQUFlLEVBQUU5VyxXQUFXLENBQUM4VyxlQUFzRjtZQUNuSDVLLEtBQUssRUFBRWxNLFdBQVcsQ0FBQ2tNLEtBQUs7WUFDeEJJLG1CQUFtQixFQUFFdE0sV0FBVyxDQUFDc00sbUJBQW1CO1lBQ3BEWixpQkFBaUIsRUFBRTFMLFdBQVcsQ0FBQzBMLGlCQUFpQjtZQUNoRHdDLGFBQWEsRUFBRWxPLFdBQVcsQ0FBQ2tPLGFBQWE7WUFDeENrSixXQUFXLEVBQUU7Y0FDWkMsYUFBYSxFQUFFQSxDQUFBLEtBQU07Z0JBQ3BCLElBQUksQ0FBQy9XLFFBQVEsQ0FBQ0MsWUFBWSxDQUFDO2NBQzVCLENBQUM7Y0FDRCtXLGVBQWUsRUFBRUEsQ0FBQSxLQUFNO2dCQUN0QixJQUFJLENBQUMxVyxVQUFVLENBQUNMLFlBQVksQ0FBQztjQUM5QjtZQUNELENBQUM7WUFDRHlXLGVBQWUsRUFBRTtjQUNoQkcsVUFBVSxFQUFFblgsV0FBVyxDQUFDbVg7WUFDekIsQ0FBQztZQUNEbFAsY0FBYyxFQUFFQSxjQUFjO1lBQzlCbUUsSUFBSSxFQUFFcE0sV0FBVyxDQUFDb007VUFDbkIsQ0FBQyxDQUFDO1FBQ0g7UUFDQSxNQUFNLElBQUksQ0FBQzBMLHFCQUFxQixDQUFDN1AsY0FBYyxFQUFFakksV0FBVyxFQUFFK1YsV0FBVyxFQUFFdE4sa0JBQWtCLENBQUM7UUFDOUYsT0FBTzJOLE9BQU87TUFDZixDQUFDLENBQUMsT0FBT3JELEdBQVksRUFBRTtRQUN0QixNQUFNLElBQUksQ0FBQytFLHFCQUFxQixDQUFDN1AsY0FBYyxFQUFFakksV0FBVyxFQUFFK1YsV0FBVyxFQUFFdE4sa0JBQWtCLENBQUM7UUFDOUYsTUFBTXNLLEdBQUc7TUFDVjtJQUNEOztJQUVBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0EsT0FKQztJQUFBM1MsTUFBQSxDQUtBK04sNEJBQTRCLEdBQTVCLFNBQUFBLDRCQUE0QkEsQ0FBQ2hLLE9BQXVCLEVBQXNCO01BQ3pFLE1BQU1sQixXQUFXLEdBQUdrQixPQUFPLENBQUN4RCxRQUFRLENBQUMsQ0FBQyxDQUFDVyxZQUFZLENBQUMsQ0FBQyxDQUFDNEIsY0FBYyxDQUFDaUIsT0FBTyxDQUFDakQsT0FBTyxDQUFDLENBQUMsQ0FBQztNQUN2RixPQUFRa0Msa0JBQWtCLENBQUNDLDJCQUEyQixDQUFDSixXQUFXLENBQUMsQ0FBQ00sWUFBWSxFQUM3RXdVLElBQUk7SUFDUixDQUFDO0lBQUEzWCxNQUFBLENBRURvWCxpQ0FBaUMsR0FBakMsU0FBQUEsaUNBQWlDQSxDQUFDcFAsVUFNakMsRUFBUTtNQUNSLElBQUlBLFVBQVUsQ0FBQ3FQLG9CQUFvQixJQUFJclAsVUFBVSxDQUFDc1AscUJBQXFCLEVBQUU7UUFDeEUsSUFBSTdKLGdCQUFrQyxHQUFHLEVBQUU7UUFDM0M7UUFDQSxJQUFJLENBQUNtSyxZQUFZLENBQUNDLGNBQWMsQ0FBQzdQLFVBQVUsQ0FBQ3NPLGVBQWUsQ0FBQyxFQUFFO1VBQzdEN0ksZ0JBQWdCLEdBQUd6RixVQUFVLENBQUNxUCxvQkFBb0IsQ0FBQ1MsV0FBVyxDQUFDLGtCQUFrQixDQUFDLElBQUksRUFBRTtVQUN4RkMsYUFBYSxDQUFDQyxtQkFBbUIsQ0FDaENoUSxVQUFVLENBQUNxUCxvQkFBb0IsRUFDL0JZLElBQUksQ0FBQ0MsS0FBSyxDQUFDbFEsVUFBVSxDQUFDc1AscUJBQXFCLENBQUMsRUFDNUM3SixnQkFBZ0IsRUFDaEIsT0FDRCxDQUFDO1FBQ0YsQ0FBQyxNQUFNLElBQUl6RixVQUFVLENBQUNTLE9BQU8sRUFBRTtVQUM5QixJQUFJVCxVQUFVLENBQUNTLE9BQU8sQ0FBQzVILEdBQUcsQ0FBUSxrQkFBa0IsQ0FBQyxFQUFFO1lBQ3RENE0sZ0JBQWdCLEdBQUd6RixVQUFVLENBQUNTLE9BQU8sQ0FBQzBQLG1CQUFtQixDQUFDLENBQXFCO1lBQy9FSixhQUFhLENBQUNDLG1CQUFtQixDQUNoQ2hRLFVBQVUsQ0FBQ3FQLG9CQUFvQixFQUMvQlksSUFBSSxDQUFDQyxLQUFLLENBQUNsUSxVQUFVLENBQUNzUCxxQkFBcUIsQ0FBQyxFQUM1QzdKLGdCQUFnQixFQUNoQixPQUNELENBQUM7VUFDRjtRQUNEO1FBQ0E7UUFDQWhPLFlBQVksQ0FBQzJZLG1DQUFtQyxDQUFDcFEsVUFBVSxDQUFDcVAsb0JBQW9CLEVBQUU1SixnQkFBZ0IsQ0FBQztNQUNwRztJQUNELENBQUM7SUFBQXpOLE1BQUEsQ0FFSzBYLHFCQUFxQixHQUEzQixlQUFNQSxxQkFBcUJBLENBQzFCN1AsY0FBOEIsRUFDOUJHLFVBT0MsRUFDRDJOLFdBQW1CLEVBQ25CdE4sa0JBQTBCLEVBQ1A7TUFDbkIsTUFBTTZDLFVBQVUsR0FBR2xELFVBQVUsQ0FBQzhELEtBQUssR0FBRzlELFVBQVUsQ0FBQzhELEtBQUssR0FBRzZKLFdBQVc7TUFFcEUsTUFBTTBDLGtCQUFrQixHQUFHaEksZUFBZSxDQUFDNkUsV0FBVyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUM7TUFDbEUsSUFBSW1ELGtCQUFrQixDQUFDbFcsTUFBTSxHQUFHLENBQUMsSUFBSTZGLFVBQVUsQ0FBQ3FQLG9CQUFvQixFQUFFO1FBQ3JFclAsVUFBVSxDQUFDcVAsb0JBQW9CLENBQUNpQixXQUFXLENBQUMsYUFBYSxFQUFFcE4sVUFBVSxDQUFDO01BQ3ZFO01BQ0EsSUFBSXpDLE9BQU87TUFDWCxJQUFJVCxVQUFVLENBQUM4TixTQUFTLElBQUk5TixVQUFVLENBQUNnRSxJQUFJLEVBQUU7UUFDNUN2RCxPQUFPLEdBQUdULFVBQVUsQ0FBQ2dFLElBQUksQ0FBQytKLElBQUksQ0FBQy9OLFVBQVUsQ0FBQzhOLFNBQVMsQ0FBQztNQUNyRCxDQUFDLE1BQU07UUFDTnJOLE9BQU8sR0FBR1QsVUFBVSxDQUFDZ0UsSUFBSTtNQUMxQjtNQUNBLE9BQU9uRSxjQUFjLENBQUMrSyxZQUFZLENBQUM7UUFDbEMrQyxXQUFXLEVBQUV6SyxVQUFVO1FBQ3ZCekMsT0FBTyxFQUFFQSxPQUE2QjtRQUN0Q0UsU0FBUyxFQUFFTixrQkFBa0I7UUFDN0JrUSxpQkFBaUIsRUFBRXZRLFVBQVUsQ0FBQzREO01BQy9CLENBQUMsQ0FBQztJQUNIOztJQUVBO0FBQ0Q7QUFDQTtBQUNBLE9BSEM7SUFBQTVMLE1BQUEsQ0FJQXdZLHFCQUFxQixHQUFyQixTQUFBQSxxQkFBcUJBLENBQUEsRUFBUztNQUM3QixNQUFNQyxhQUFhLEdBQUdDLFNBQVMsQ0FBQ0MsZUFBZSxDQUFDLENBQUMsQ0FDL0NDLE9BQU8sQ0FBQyxDQUFDLENBQ1RyUixNQUFNLENBQUVxQixLQUFjLElBQUtBLEtBQUssQ0FBQ2lRLFVBQVUsQ0FBQyxDQUFDLENBQUM7TUFDaERILFNBQVMsQ0FBQ0ksY0FBYyxDQUFDTCxhQUFhLENBQUM7SUFDeEM7O0lBRUE7QUFDRDtBQUNBO0FBQ0E7QUFDQSxPQUpDO0lBQUF6WSxNQUFBLENBS0ErWSxjQUFjLEdBQWQsU0FBQUEsY0FBY0EsQ0FBQ0MsUUFBMkIsRUFBVztNQUNwRCxPQUFPLElBQUlDLE9BQU8sQ0FBQ0QsUUFBUSxDQUFDO0lBQzdCOztJQUVBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FQQztJQUFBaFosTUFBQSxDQVFNOFQsZUFBZSxHQUFyQixlQUFNQSxlQUFlQSxDQUFDQyxZQUFvQixFQUFFbUYsVUFBbUIsRUFBRXRSLGFBQTRCLEVBQWlCO01BQzdHO01BQ0EsSUFBSSxDQUFDc1IsVUFBVSxFQUFFO1FBQ2hCLElBQUksQ0FBQ1YscUJBQXFCLENBQUMsQ0FBQztRQUM1QixPQUFPaFcsT0FBTyxDQUFDQyxPQUFPLENBQUMsQ0FBQztNQUN6QjtNQUVBc1IsWUFBWSxDQUFDb0YsVUFBVSxDQUFDLEtBQUssQ0FBQztNQUM5QixPQUFPLElBQUkzVyxPQUFPLENBQU8sQ0FBQ0MsT0FBTyxFQUFFaUwsTUFBTSxLQUFLO1FBQzdDLE1BQU0wTCxtQkFBbUIsR0FBRyxJQUFJLENBQUNMLGNBQWMsQ0FBQztVQUMvQ00sVUFBVSxFQUFFLEtBQUs7VUFDakJDLFNBQVMsRUFBRTtRQUNaLENBQUMsQ0FBQztRQUNGRixtQkFBbUIsQ0FBQ3ZJLGFBQWEsQ0FBQyxxQkFBcUIsQ0FBQzs7UUFFeEQ7UUFDQSxNQUFNaEMsS0FBSyxHQUFHLElBQUkwSyxJQUFJLENBQUM7VUFDdEJuSyxJQUFJLEVBQUV4SCxhQUFhLENBQUNnSCxPQUFPLENBQUMsNENBQTRDO1FBQ3pFLENBQUMsQ0FBQztRQUNGLE1BQU00SyxhQUFhLEdBQUcsSUFBSTdILE1BQU0sQ0FBQztVQUNoQ3ZDLElBQUksRUFBRXhILGFBQWEsQ0FBQ2dILE9BQU8sQ0FBQywyQ0FBMkMsQ0FBQztVQUN4RTZLLEtBQUssRUFBRSxNQUFNO1VBQ2I3SCxLQUFLLEVBQUVBLENBQUEsS0FBWTtZQUNsQixJQUFJLENBQUM0RyxxQkFBcUIsQ0FBQyxDQUFDO1lBQzVCWSxtQkFBbUIsQ0FBQy9XLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxJQUFJLENBQUM7WUFDakQrVyxtQkFBbUIsQ0FBQ3ZILEtBQUssQ0FBQyxDQUFDO1VBQzVCO1FBQ0QsQ0FBQyxDQUFDO1FBQ0Z1SCxtQkFBbUIsQ0FBQ00sVUFBVSxDQUFDLElBQUl4SSxJQUFJLENBQUM7VUFBRXRELEtBQUssRUFBRSxDQUFDaUIsS0FBSyxFQUFFMkssYUFBYTtRQUFFLENBQUMsQ0FBQyxDQUFDOztRQUUzRTtRQUNBSixtQkFBbUIsQ0FBQ08sZ0JBQWdCLENBQUMsTUFBTTtVQUMxQ1AsbUJBQW1CLENBQUNRLGVBQWUsQ0FBQ0osYUFBYSxDQUFDO1FBQ25ELENBQUMsQ0FBQztRQUNGSixtQkFBbUIsQ0FBQ1MsZ0JBQWdCLENBQUMsTUFBTTtVQUMxQzlGLFlBQVksQ0FBQ29GLFVBQVUsQ0FBQyxJQUFJLENBQUM7VUFDN0IsSUFBSUMsbUJBQW1CLENBQUMvVyxJQUFJLENBQUMsaUJBQWlCLENBQUMsRUFBRTtZQUNoREksT0FBTyxDQUFDLENBQUM7VUFDVixDQUFDLE1BQU07WUFDTmlMLE1BQU0sQ0FBQyxDQUFDO1VBQ1Q7UUFDRCxDQUFDLENBQUM7UUFFRjBMLG1CQUFtQixDQUFDVSxNQUFNLENBQUMvRixZQUFZLEVBQUUsS0FBSyxDQUFDO01BQ2hELENBQUMsQ0FBQztJQUNIOztJQUVBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUxDO0lBQUEvVCxNQUFBLENBTU0rWixrQkFBa0IsR0FBeEIsZUFBTUEsa0JBQWtCQSxDQUFDcFgsV0FBNkIsRUFBRXhDLFlBQTBCLEVBQWlCO01BQ2xHLElBQUk7UUFDSCxJQUFJd0MsV0FBVyxDQUFDcVgsTUFBTSxDQUFDLENBQUMsRUFBRTtVQUN6QixJQUFJLElBQUksQ0FBQzdVLHlCQUF5QixDQUFDeEMsV0FBVyxDQUFDLEVBQUU7WUFDaEQ7WUFDQSxNQUFNeEMsWUFBWSxDQUNoQnNWLHFCQUFxQixDQUFDLENBQUMsQ0FDdkJ3RSxrQkFBa0IsQ0FBQyxDQUFDO2NBQUVDLHVCQUF1QixFQUFFO1lBQUcsQ0FBQyxDQUFDLEVBQUV2WCxXQUFXLENBQUM2QixnQkFBZ0IsQ0FBQyxDQUFFLENBQUM7VUFDekYsQ0FBQyxNQUFNO1lBQ04sTUFBTTdCLFdBQVcsQ0FBQ3dYLGNBQWMsQ0FBQyxDQUFDO1VBQ25DO1FBQ0QsQ0FBQyxNQUFNO1VBQ04sTUFBTWhhLFlBQVksQ0FDaEJzVixxQkFBcUIsQ0FBQyxDQUFDLENBQ3ZCd0Usa0JBQWtCLENBQUMsQ0FBQztZQUFFQyx1QkFBdUIsRUFBRXZYLFdBQVcsQ0FBQzdCLE9BQU8sQ0FBQztVQUFFLENBQUMsQ0FBQyxFQUFFNkIsV0FBVyxDQUFDcUIsVUFBVSxDQUFDLENBQUMsQ0FBQztRQUNyRztNQUNELENBQUMsQ0FBQyxPQUFPNEUsS0FBSyxFQUFFO1FBQ2ZnQixHQUFHLENBQUNoQixLQUFLLENBQUMsdUNBQXVDakcsV0FBVyxDQUFDN0IsT0FBTyxDQUFDLENBQUMsRUFBRSxFQUFFOEgsS0FBZSxDQUFDO01BQzNGO0lBQ0QsQ0FBQztJQUFBNUksTUFBQSxDQUVLMk0sZ0JBQWdCLEdBQXRCLGVBQU1BLGdCQUFnQkEsQ0FDckJoSyxXQUE2QixFQUM3QnlYLFVBQW9CLEVBQ3BCcFMsVUFZQyxFQUNEN0gsWUFBMEIsRUFDMUJ5SCxhQUE0QixFQUM1QkMsY0FBOEIsRUFDSjtNQUMxQixNQUFNakYsS0FBSyxHQUFHRCxXQUFXLENBQUNwQyxRQUFRLENBQUMsQ0FBZTtNQUNsRCxNQUFNVSxTQUFTLEdBQUcyQixLQUFLLENBQUMxQixZQUFZLENBQUMsQ0FBQztNQUN0QyxNQUFNbVosWUFBWSxHQUFHcFosU0FBUyxDQUFDeUQsV0FBVyxDQUFDL0IsV0FBVyxDQUFDM0IsZUFBZSxDQUFDLENBQUUsQ0FBQzs7TUFFMUU7TUFDQSxNQUFNc1osb0JBQW9CLEdBQUcxWCxLQUFLLENBQUNzRCxRQUFRLENBQUN2RCxXQUFXLENBQUM3QixPQUFPLENBQUMsQ0FBQyxFQUFFNkIsV0FBVyxDQUFDcUIsVUFBVSxDQUFDLENBQUMsRUFBRU4sU0FBUyxFQUFFQSxTQUFTLEVBQUU7UUFDbEgyQyxlQUFlLEVBQUU7TUFDbEIsQ0FBQyxDQUFDO01BQ0ZpVSxvQkFBb0IsQ0FBQ0MsZUFBZSxHQUFHLFlBQWtCO1FBQ3hEO01BQUEsQ0FDQTtNQUNELE1BQU1DLGdCQUFnQixHQUFHRixvQkFBb0IsQ0FBQ3ZULE1BQU0sQ0FBQ2lCLFVBQVUsQ0FBQzNGLElBQUksRUFBRSxJQUFJLENBQUM7TUFDM0UsTUFBTW9ZLGlCQUFpQixHQUFHTCxVQUFVLENBQUM3USxHQUFHLENBQUVvTyxJQUFJLElBQUs7UUFDbEQsT0FBTzFXLFNBQVMsQ0FBQ2tWLG9CQUFvQixDQUFDLEdBQUdrRSxZQUFZLElBQUkxQyxJQUFJLEVBQUUsQ0FBQztNQUNqRSxDQUFDLENBQUM7TUFFRixNQUFNK0MsWUFBWSxHQUFHQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUNDLGVBQWUsQ0FDdERKLGdCQUFnQixFQUNoQkosVUFBVSxFQUNWamEsWUFBWSxFQUNaNkgsVUFBVSxDQUFDcUUsWUFBWSxLQUFLaE4sWUFBWSxDQUFDb04sY0FBYyxHQUFHLFlBQVksR0FBRyxnQkFBZ0IsRUFDekZ6RSxVQUFVLENBQUNVLGFBQ1osQ0FBQztNQUVELElBQUk7UUFDSCxNQUFNd0IsV0FBVyxDQUFDMlEsZUFBZSxDQUNoQzFhLFlBQVksRUFDWnNhLGlCQUFpQixFQUNqQkQsZ0JBQWdCLEVBQ2hCLEtBQUssRUFDTHhTLFVBQVUsQ0FBQzhTLFlBQVksRUFDdkI5UyxVQUFVLENBQUMzRixJQUNaLENBQUM7UUFDRHFZLFlBQVksQ0FBQ0ssVUFBVSxDQUFDLENBQUM7TUFDMUIsQ0FBQyxDQUFDLE9BQU9DLENBQUMsRUFBRTtRQUNYLE1BQU1uVCxjQUFjLENBQUMrSyxZQUFZLENBQUMsQ0FBQztRQUNuQyxNQUFNb0ksQ0FBQztNQUNSO01BRUEsTUFBTUMsbUJBQW1CLEdBQUcsSUFBSUMsYUFBYSxDQUFpQixDQUFDO01BRS9ELE1BQU1DLFlBQVksR0FBRyxNQUFPQyxLQUFzQixJQUFvQjtRQUNyRSxJQUFJLENBQUNBLEtBQUssQ0FBQ0MsWUFBWSxDQUFDLFFBQVEsQ0FBQyxFQUFFO1VBQ2xDO1VBQ0FmLG9CQUFvQixDQUFDdEksT0FBTyxDQUFDLENBQUM7VUFDOUIwSSxZQUFZLENBQUNZLFdBQVcsQ0FBQyxDQUFDO1VBQzFCTCxtQkFBbUIsQ0FBQ3ZOLE1BQU0sQ0FBQ3BPLFNBQVMsQ0FBQ3VKLFNBQVMsQ0FBQ0Usa0JBQWtCLENBQUM7VUFDbEU7UUFDRDtRQUVBMlIsWUFBWSxDQUFDYSxPQUFPLENBQUMsSUFBSSxDQUFDO1FBQzFCdlQsVUFBVSxDQUFDd1QsZUFBZSxHQUFHLElBQUk7UUFDakMsSUFBSTtVQUNILE1BQU1DLGFBQWEsR0FBR2pCLGdCQUFnQixDQUFDdFYsU0FBUyxDQUFDLENBQUM7VUFDbEQsSUFBSWlDLFVBQW1DLEdBQUcsQ0FBQyxDQUFDO1VBQzVDbkIsTUFBTSxDQUFDMFYsSUFBSSxDQUFDRCxhQUFhLENBQUMsQ0FBQy9PLE9BQU8sQ0FBRWlQLFlBQVksSUFBSztZQUNwRCxNQUFNQyxTQUFTLEdBQUczYSxTQUFTLENBQUNpRSxTQUFTLENBQUMsR0FBR21WLFlBQVksSUFBSXNCLFlBQVksRUFBRSxDQUFDO1lBQ3hFO1lBQ0E7WUFDQSxJQUFJQyxTQUFTLElBQUlBLFNBQVMsQ0FBQ0MsS0FBSyxLQUFLLG9CQUFvQixJQUFJLENBQUNGLFlBQVksRUFBRTFYLFVBQVUsQ0FBQyxPQUFPLENBQUMsRUFBRTtjQUNoR2tELFVBQVUsQ0FBQ3dVLFlBQVksQ0FBQyxHQUFHRixhQUFhLENBQUNFLFlBQVksQ0FBQztZQUN2RDtVQUNELENBQUMsQ0FBQztVQUVGLElBQUkzVCxVQUFVLENBQUNHLG9CQUFvQixFQUFFO1lBQ3BDO1lBQ0EsTUFBTTJULGlCQUFpQixHQUFHOVYsTUFBTSxDQUFDc0QsT0FBTyxDQUFDbkMsVUFBVSxDQUFDLENBQUNvQyxHQUFHLENBQUN3UyxLQUFBO2NBQUEsSUFBQyxDQUFDdFMsR0FBRyxFQUFFN0MsS0FBSyxDQUFDLEdBQUFtVixLQUFBO2NBQUEsT0FBTTtnQkFBRSxDQUFDdFMsR0FBRyxHQUFHN0M7Y0FBTSxDQUFDO1lBQUEsQ0FBQyxDQUFDO1lBQzlGLElBQUk7Y0FDSCxNQUFNOEMsWUFBWSxDQUNqQjFCLFVBQVUsQ0FBQ0csb0JBQW9CLENBQUM7Z0JBQy9Cd0IsV0FBVyxFQUFFaEgsV0FBVyxDQUFDN0IsT0FBTyxDQUFDLENBQUM7Z0JBQ2xDdUksZ0JBQWdCLEVBQUV5UztjQUNuQixDQUFDLENBQ0YsQ0FBQztZQUNGLENBQUMsQ0FBQyxPQUFPbFQsS0FBSyxFQUFFO2NBQ2ZnQixHQUFHLENBQUNoQixLQUFLLENBQUMsdUNBQXVDLEVBQUVBLEtBQWUsQ0FBQztjQUNuRSxNQUFNdEosU0FBUyxDQUFDdUosU0FBUyxDQUFDZ0Isb0JBQW9CO1lBQy9DO1lBQ0ExQyxVQUFVLEdBQUcyVSxpQkFBaUIsQ0FBQ2hTLE1BQU0sQ0FBQyxDQUFDQyxNQUFNLEVBQUVDLGFBQWEsS0FBSztjQUNoRSxPQUFPO2dCQUFFLEdBQUdELE1BQU07Z0JBQUUsR0FBR0M7Y0FBYyxDQUFDO1lBQ3ZDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztVQUNQO1VBQ0EsSUFBSWhFLE1BQU0sQ0FBQzBWLElBQUksQ0FBQ3ZVLFVBQVUsQ0FBQyxDQUFDaEYsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUN2Q2hDLFlBQVksQ0FBQ0ksUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDK1gsV0FBVyxDQUFDMEQsZ0JBQWdCLENBQUNDLGdCQUFnQixFQUFFLElBQUksQ0FBQztVQUNqRjtVQUNBLE1BQU1DLFVBQVUsR0FBRyxNQUFNLElBQUksQ0FBQzFXLGFBQWEsQ0FBQzdDLFdBQVcsRUFBRXdFLFVBQVUsRUFBRTtZQUNwRUgsV0FBVyxFQUFFZ0IsVUFBVSxDQUFDaEIsV0FBVztZQUNuQ0MsY0FBYyxFQUFFZSxVQUFVLENBQUNJLFFBQVE7WUFDbkN2QyxhQUFhLEVBQUVtQyxVQUFVLENBQUNuQztVQUMzQixDQUFDLENBQUM7VUFFRixNQUFNc1csZUFBZSxHQUFHLE1BQU0sSUFBSSxDQUFDdlAsdUJBQXVCLENBQUNzUCxVQUFVLEVBQUVsVSxVQUFVLENBQUM2RSw0QkFBNEIsS0FBSyxJQUFJLENBQUM7VUFDeEgsSUFBSXNQLGVBQWUsRUFBRTtZQUNwQixJQUFJO2NBQ0gsTUFBTW5VLFVBQVUsQ0FBQ29VLG1CQUFtQixHQUFHRixVQUFVLENBQUM7WUFDbkQsQ0FBQyxDQUFDLE9BQU90VCxLQUFLLEVBQUU7Y0FDZjhSLFlBQVksQ0FBQzJCLG9CQUFvQixDQUFDM0QsU0FBUyxDQUFDQyxlQUFlLENBQUMsQ0FBQyxDQUFDQyxPQUFPLENBQUMsQ0FBQyxDQUFDO2NBQ3hFLE1BQU0vUSxjQUFjLENBQUNXLGlCQUFpQixDQUFDO2dCQUFFOFQsc0JBQXNCLEVBQUU7Y0FBSyxDQUFDLENBQUM7O2NBRXhFO2NBQ0EsTUFBTSxJQUFJLENBQUNsUCxjQUFjLENBQUM4TyxVQUFVLEVBQUU7Z0JBQUV0TCxVQUFVLEVBQUU7Y0FBSyxDQUFDLEVBQUV6USxZQUFZLEVBQUV5SCxhQUFhLEVBQUVDLGNBQWMsQ0FBQztjQUN4RyxNQUFNLElBQUksQ0FBQ2tTLGtCQUFrQixDQUFDcFgsV0FBVyxFQUFFeEMsWUFBWSxDQUFDO2NBRXhEeUosR0FBRyxDQUFDaEIsS0FBSyxDQUFDLDhDQUE4QyxFQUFFQSxLQUFlLENBQUM7Y0FDMUUsTUFBTXRKLFNBQVMsQ0FBQ3VKLFNBQVMsQ0FBQzBULGNBQWM7WUFDekM7WUFFQWpDLG9CQUFvQixDQUFDdEksT0FBTyxDQUFDLENBQUM7WUFDOUIwSSxZQUFZLENBQUNZLFdBQVcsQ0FBQyxDQUFDO1lBQzFCTCxtQkFBbUIsQ0FBQ3hZLE9BQU8sQ0FBQ3laLFVBQVUsQ0FBQztVQUN4QztRQUNELENBQUMsQ0FBQyxPQUFPdFQsS0FBYyxFQUFFO1VBQ3hCO1VBQ0EsSUFBSSxDQUFDLENBQUN0SixTQUFTLENBQUN1SixTQUFTLENBQUNnQixvQkFBb0IsRUFBRXZLLFNBQVMsQ0FBQ3VKLFNBQVMsQ0FBQzBULGNBQWMsQ0FBQyxDQUFDclksUUFBUSxDQUFDMEUsS0FBSyxDQUFDLEVBQUU7WUFDcEc7WUFDQTBSLG9CQUFvQixDQUFDdEksT0FBTyxDQUFDLENBQUM7WUFDOUIwSSxZQUFZLENBQUNZLFdBQVcsQ0FBQyxDQUFDO1lBQzFCTCxtQkFBbUIsQ0FBQ3ZOLE1BQU0sQ0FBQzlFLEtBQXVCLENBQUM7VUFDcEQ7UUFDRCxDQUFDLFNBQVM7VUFDVDhSLFlBQVksQ0FBQ2EsT0FBTyxDQUFDLEtBQUssQ0FBQztVQUMzQjFULGNBQWMsQ0FBQytLLFlBQVksQ0FBQztZQUFFNEoscUJBQXFCLEVBQUU5QixZQUFZLENBQUMrQixNQUFNLENBQUM7VUFBRSxDQUFDLENBQUM7UUFDOUU7TUFDRCxDQUFDO01BRUQvQixZQUFZLENBQUNnQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsRUFBRXZCLFlBQVksQ0FBQztNQUUvQyxPQUFPRixtQkFBbUIsQ0FBQzBCLE9BQU87SUFDbkM7O0lBRUE7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BTEM7SUFBQTNjLE1BQUEsQ0FNTTRNLHVCQUF1QixHQUE3QixlQUFNQSx1QkFBdUJBLENBQUNzUCxVQUEwQixFQUFFclAsNEJBQXFDLEVBQW9CO01BQ2xILE1BQU0rUCxhQUFhLEdBQUcsSUFBSTFCLGFBQWEsQ0FBVSxDQUFDO01BQ2xELE1BQU0yQixpQkFBaUIsR0FBR1gsVUFBVSxDQUFDak0sVUFBVSxDQUFDLENBQXFCO01BRXJFLE1BQU02TSxpQkFBaUIsR0FBSTFCLEtBQTRDLElBQVc7UUFDakYsTUFBTTJCLGNBQWMsR0FBRzNCLEtBQUssQ0FBQ0MsWUFBWSxDQUFDLFNBQVMsQ0FBQztRQUNwRCxNQUFNMkIsT0FBTyxHQUFHNUIsS0FBSyxDQUFDQyxZQUFZLENBQUMsU0FBUyxDQUFDO1FBQzdDLElBQUkwQixjQUFjLEtBQUtiLFVBQVUsRUFBRTtVQUNsQ1csaUJBQWlCLENBQUNJLHFCQUFxQixDQUFDSCxpQkFBaUIsQ0FBQztVQUMxREYsYUFBYSxDQUFDbmEsT0FBTyxDQUFDdWEsT0FBTyxLQUFLLElBQUksQ0FBQztRQUN4QztNQUNELENBQUM7TUFFREgsaUJBQWlCLENBQUNLLHFCQUFxQixDQUFDSixpQkFBaUIsQ0FBQztNQUUxRCxNQUFNSyxrQkFBa0IsR0FBRyxNQUFNUCxhQUFhLENBQUNELE9BQU87TUFDdEQsSUFBSSxDQUFDUSxrQkFBa0IsRUFBRTtRQUN4QixJQUFJLENBQUN0USw0QkFBNEIsRUFBRTtVQUNsQztVQUNBLENBQUNxUCxVQUFVLENBQUNrQixPQUFPLENBQUMsQ0FBQyxJQUFJNWEsT0FBTyxDQUFDQyxPQUFPLENBQUMsQ0FBQyxFQUFFNGEsS0FBSyxDQUFDLFVBQVVDLFlBQXFCLEVBQUU7WUFDbEYxVCxHQUFHLENBQUMyVCxLQUFLLENBQUMsMkNBQTJDLEVBQUVELFlBQXNCLENBQUM7VUFDL0UsQ0FBQyxDQUFDO1VBQ0ZULGlCQUFpQixDQUFDekksWUFBWSxDQUFDLENBQUM7VUFDaEN5SSxpQkFBaUIsQ0FBQ3RjLFFBQVEsQ0FBQyxDQUFDLENBQUM2VCxZQUFZLENBQUN5SSxpQkFBaUIsQ0FBQ3ZXLGdCQUFnQixDQUFDLENBQUMsQ0FBQztVQUMvRSxNQUFNaEgsU0FBUyxDQUFDdUosU0FBUyxDQUFDMFQsY0FBYztRQUN6QztRQUNBLE9BQU8sS0FBSztNQUNiLENBQUMsTUFBTTtRQUNOLE1BQU1MLFVBQVUsQ0FBQ2tCLE9BQU8sQ0FBQyxDQUFDO1FBQzFCLE9BQU8sSUFBSTtNQUNaO0lBQ0Q7O0lBRUE7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FUQztJQUFBcGQsTUFBQSxDQVVBNEssYUFBYSxHQUFiLFNBQUFBLGFBQWFBLENBQ1o0UyxrQkFFQyxFQUNEQyxXQUFtQixFQUNuQkMsVUFBMEIsRUFDMUJDLFNBQWlCLEVBQ1I7TUFDVCxJQUFJQyxVQUFVO01BRWQsSUFBSUosa0JBQWtCLElBQUlBLGtCQUFrQixDQUFDSyxhQUFhLElBQUlKLFdBQVcsQ0FBQ0ssV0FBVyxDQUFDLENBQUMsQ0FBQzVaLFFBQVEsQ0FBQyxxQkFBcUIsQ0FBQyxFQUFFO1FBQ3hILE1BQU02WixjQUFjLEdBQUdQLGtCQUFrQixDQUFDSyxhQUFhLENBQUMsQ0FBQyxDQUFDO1FBQzFERCxVQUFVLEdBQUdHLGNBQWMsQ0FBQ0QsV0FBVyxDQUFDLENBQUMsQ0FBQzVaLFFBQVEsQ0FBQyxhQUFhLENBQUMsR0FDOUQ2WixjQUFjLENBQUNoYyxTQUFTLENBQUNnYyxjQUFjLENBQUMvYixXQUFXLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQzdEMEIsU0FBUztNQUNiLENBQUMsTUFBTSxJQUNOOFosa0JBQWtCLElBQ2xCQSxrQkFBa0IsQ0FBQ0ssYUFBYSxJQUNoQ0osV0FBVyxDQUFDSyxXQUFXLENBQUMsQ0FBQyxDQUFDNVosUUFBUSxDQUFDLHlCQUF5QixDQUFDLEVBQzVEO1FBQ0QsTUFBTTZaLGNBQWMsR0FBR1Asa0JBQWtCLENBQUNLLGFBQWEsQ0FBQyxDQUFDLENBQUM7UUFDMURELFVBQVUsR0FBR0csY0FBYyxDQUFDRCxXQUFXLENBQUMsQ0FBQyxDQUFDNVosUUFBUSxDQUFDLGlCQUFpQixDQUFDLEdBQ2xFNlosY0FBYyxDQUFDaGMsU0FBUyxDQUFDZ2MsY0FBYyxDQUFDL2IsV0FBVyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUM3RDBCLFNBQVM7TUFDYixDQUFDLE1BQU07UUFDTmthLFVBQVUsR0FDVEYsVUFBVSxJQUFJQSxVQUFVLENBQUN4WSxTQUFTLEtBQUt4QixTQUFTLEdBQzdDZ2EsVUFBVSxDQUFDeFksU0FBUyxDQUFDLEdBQUd5WSxTQUFTLG1FQUFtRSxDQUFDLElBQ3JHRCxVQUFVLENBQUN4WSxTQUFTLENBQUMsR0FBR3lZLFNBQVMscURBQXFELENBQUMsR0FDdkZqYSxTQUFTO01BQ2Q7TUFDQSxPQUFPa2EsVUFBVTtJQUNsQjs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BYkM7SUFBQTVkLE1BQUEsQ0FjQStMLG1DQUFtQyxHQUFuQyxTQUFBQSxtQ0FBbUNBLENBQ2xDMlIsVUFBc0MsRUFDdENDLFNBQWlCLEVBQ2pCQyxVQUFrQixFQUNsQmhXLGFBQXdDLEVBQ25CO01BQ3JCLE1BQU1vVyxTQUFTLEdBQUdOLFVBQVUsRUFBRXhZLFNBQVMsQ0FBQyxHQUFHeVksU0FBUyx1Q0FBdUMsQ0FBeUI7TUFFcEgsTUFBTTdSLEtBQUssR0FBR2tTLFNBQVMsRUFBRTlQLElBQUksQ0FBRStQLFFBQVEsSUFBS0Msb0JBQW9CLENBQUNELFFBQVEsQ0FBQyxJQUFJQSxRQUFRLENBQUNFLE1BQU0sQ0FBQy9aLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUt3WixVQUFVLENBQUMsRUFDM0hRLEtBQUs7TUFFUixPQUNDdFMsS0FBSyxJQUNMNFIsVUFBVSxFQUFFeFksU0FBUyxDQUFDLEdBQUd5WSxTQUFTLElBQUlDLFVBQVUsdUNBQXVDLENBQUMsSUFDeEZoVyxhQUFhLEVBQUVnSCxPQUFPLENBQUMsMENBQTBDLENBQUM7SUFFcEUsQ0FBQztJQUFBLE9BQUE3TyxpQkFBQTtFQUFBO0VBR0YsTUFBTXNlLFNBQVMsR0FBRyxJQUFJdGUsaUJBQWlCLENBQUMsQ0FBQztFQUFDLE9BQzNCc2UsU0FBUztBQUFBIiwiaWdub3JlTGlzdCI6W119
|
|
1323
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJDcmVhdGlvbk1vZGUiLCJGRUxpYnJhcnkiLCJQcm9ncmFtbWluZ01vZGVsIiwiRGVsZXRlT3B0aW9uVHlwZXMiLCJkZWxldGVIZWxwZXIiLCJEZWxldGVEaWFsb2dDb250ZW50Q29udHJvbCIsImdldFBhcmFtZXRlcnMiLCJtUGFyYW1ldGVycyIsImdldE1ldGFkYXRhIiwiZ2V0TmFtZSIsIlRyYW5zYWN0aW9uSGVscGVyIiwiX3Byb3RvIiwicHJvdG90eXBlIiwiYnVzeUxvY2siLCJhcHBDb21wb25lbnQiLCJidXN5UGF0aCIsIkJ1c3lMb2NrZXIiLCJsb2NrIiwiZ2V0TW9kZWwiLCJidXN5VW5sb2NrIiwidW5sb2NrIiwiZ2V0UHJvZ3JhbW1pbmdNb2RlbCIsInNvdXJjZSIsInBhdGgiLCJpc0EiLCJnZXRQYXRoIiwiaXNSZWxhdGl2ZSIsImdldFJlc29sdmVkUGF0aCIsIm1ldGFNb2RlbCIsImdldE1ldGFNb2RlbCIsIk1vZGVsSGVscGVyIiwiaXNEcmFmdFN1cHBvcnRlZCIsIkRyYWZ0IiwiaXNTdGlja3lTZXNzaW9uU3VwcG9ydGVkIiwiU3RpY2t5IiwiTm9uRHJhZnQiLCJ2YWxpZGF0ZURvY3VtZW50Iiwib0NvbnRleHQiLCJvVmlldyIsInNDdXN0b21WYWxpZGF0aW9uRnVuY3Rpb24iLCJjdXN0b21WYWxpZGF0aW9uRnVuY3Rpb24iLCJzTW9kdWxlIiwic3Vic3RyaW5nIiwibGFzdEluZGV4T2YiLCJyZXBsYWNlIiwic0Z1bmN0aW9uTmFtZSIsImxlbmd0aCIsIm1EYXRhIiwiZGF0YSIsIkZQTUhlbHBlciIsInZhbGlkYXRpb25XcmFwcGVyIiwiUHJvbWlzZSIsInJlc29sdmUiLCJnZXREYXRhRnJvbURlZmF1bHRWYWx1ZUZ1bmN0aW9uIiwibGlzdEJpbmRpbmciLCJtb2RlbCIsIm1ldGFDb250ZXh0IiwiZ2V0TWV0YUNvbnRleHQiLCJsaXN0QmluZGluZ09iamVjdFBhdGgiLCJNZXRhTW9kZWxDb252ZXJ0ZXIiLCJnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMiLCJkZWZhdWx0RnVuY09uVGFyZ2V0T2JqZWN0IiwidGFyZ2V0T2JqZWN0IiwiYW5ub3RhdGlvbnMiLCJDb21tb24iLCJEZWZhdWx0VmFsdWVzRnVuY3Rpb24iLCJkZWZhdWx0RnVuY09uVGFyZ2V0RW50aXR5U2V0IiwidGFyZ2V0RW50aXR5U2V0IiwiZGVmYXVsdEZ1bmN0aW9uTmFtZSIsInVuZGVmaW5lZCIsImZ1bmN0aW9uT25OYXZQcm9wIiwiaXNOYXZpZ2F0aW9uUHJvcGVydHkiLCJkZWZhdWx0RnVuY3Rpb25Db250ZXh0IiwiYmluZGluZ1BhdGgiLCJjb250ZXh0IiwiZ2V0Q29udGV4dCIsInN0YXJ0c1dpdGgiLCJpbmNsdWRlcyIsImZpcnN0TmF2Iiwic3BsaXQiLCJwYXJlbnRQYXRoIiwiYmluZENvbnRleHQiLCJnZXRCb3VuZENvbnRleHQiLCJnZXRIZWFkZXJDb250ZXh0IiwiZGVmYXVsdEZ1bmN0aW9uUGF0aCIsImdldE1ldGFQYXRoIiwiZGVmYXVsdEZ1bmN0aW9uT2JqZWN0UGF0aCIsImRlZmF1bHRGdW5jdGlvblJlc3VsdCIsImlzQm91bmQiLCJvcGVyYXRpb25zIiwiY2FsbEJvdW5kRnVuY3Rpb24iLCJ0b1N0cmluZyIsImNhbGxGdW5jdGlvbkltcG9ydCIsImdldE9iamVjdCIsImlzTGlzdEJpbmRpbmdIaWVyYXJjaGljYWwiLCJnZXRBZ2dyZWdhdGlvbiIsImhpZXJhcmNoeVF1YWxpZmllciIsImlzTGlzdEJpbmRpbmdBbmFseXRpY2FsIiwiYWdncmVnYXRpb24iLCJjcmVhdGVDb250ZXh0IiwiaW5pdGlhbERhdGEiLCJvcHRpb25zIiwiZGF0YUZvckNyZWF0aW9uIiwibGlzdEJpbmRpbmdGb3JDcmVhdGlvbiIsInBhcmVudENvbnRleHQiLCJpc0V4cGFuZGVkIiwiZXhwYW5kIiwiT2JqZWN0IiwiYXNzaWduIiwiYmluZExpc3QiLCIkJGdyb3VwSWQiLCJnZXRHcm91cElkIiwiJCR1cGRhdGVHcm91cElkIiwiZ2V0VXBkYXRlR3JvdXBJZCIsIm9iamVjdFBhdGgiLCJwYXJlbnROYXZpZ2F0aW9uIiwidGFyZ2V0RW50aXR5VHlwZSIsIkFnZ3JlZ2F0aW9uIiwiUGFyZW50TmF2aWdhdGlvblByb3BlcnR5IiwidmFsdWUiLCJFcnJvciIsInBhcmVudEJpbmRpbmdEYXRhIiwiY3JlYXRlIiwiY3JlYXRlQXRFbmQiLCJjcmVhdGVJbmFjdGl2ZSIsImdldENyZWF0aW9uUGFyYW1ldGVycyIsImNyZWF0ZURhdGEiLCJtZXRhUGF0aCIsIm5vbkNvbXB1dGVkVmlzaWJsZUZpZWxkcyIsImdldENyZWF0ZVBvcHVwRmllbGRzIiwiZmlsdGVyIiwiZmllbGROYW1lIiwiY3JlYXRlRG9jdW1lbnQiLCJtYWluTGlzdEJpbmRpbmciLCJpblBhcmFtZXRlcnMiLCJyZXNvdXJjZU1vZGVsIiwibWVzc2FnZUhhbmRsZXIiLCJmcm9tQ29weVBhc3RlIiwibmV3RG9jdW1lbnRDb250ZXh0IiwicGFyYW1ldGVycyIsInByb2dyYW1taW5nTW9kZWwiLCJnZXRCdXN5UGF0aCIsImJlZm9yZUNyZWF0ZUNhbGxCYWNrIiwiaW5hY3RpdmUiLCJtZXNzYWdlSGFuZGxpbmdLZXkiLCJyZWdpc3RlclRvSG9sZE1lc3NhZ2VzIiwicGVyZm9ybUNyZWF0aW9uIiwiZ2V0QmluZGluZyIsInJlcXVlc3RBdExlYXN0IiwicmVxdWVzdFByb3BlcnR5Iiwic2hvd01lc3NhZ2VEaWFsb2ciLCJjb250cm9sIiwicGFyZW50Q29udHJvbCIsInVuSG9sZEtleSIsImVycm9yIiwiQ29uc3RhbnRzIiwiQWN0aW9uRXhlY3V0aW9uRmFpbGVkIiwiQ2FuY2VsQWN0aW9uRGlhbG9nIiwiaXNUcmFuc2llbnQiLCJkZWxldGUiLCJidXN5TW9kZSIsImJ1c3lJZCIsImNyZWF0ZURvY3VtZW50Q29udGV4dCIsImNyZWF0ZVBhcmFtZXRlcnMiLCJlbnRyaWVzIiwibWFwIiwiX3JlZiIsImtleSIsInRvRVM2UHJvbWlzZSIsImNvbnRleHRQYXRoIiwiTG9nIiwiT25CZWZvcmVDcmVhdGVGYWlsZWQiLCJyZWR1Y2UiLCJyZXN1bHQiLCJjdXJyZW50T2JqZWN0IiwiY3JlYXRlUHJvbWlzZSIsIkNvbW1vblV0aWxzIiwiSU5MSU5FRURJVF9VUERBVEVHUk9VUElEIiwic3VibWl0QmF0Y2giLCJjcmVhdGVIYXNoIiwiZ2V0Um91dGVyUHJveHkiLCJnZXRIYXNoIiwiY29tcG9uZW50RGF0YSIsImdldENvbXBvbmVudERhdGEiLCJzdGFydHVwUGFyYW1ldGVycyIsIm5ld0FjdGlvbiIsIl9nZXROZXdBY3Rpb24iLCJwZXJmb3JtQ3JlYXRpb25XaXRoQWN0aW9uIiwic3RhdHVzIiwicmVhc29uIiwicmV0dXJuZWRDb250ZXh0IiwicGVyZm9ybUNyZWF0aW9uV2l0aFBPU1QiLCJhY3Rpb25OYW1lIiwiaGVhZGVyQ29udGV4dFBhdGgiLCJtZXNzYWdlc1BhdGgiLCJnZXRNZXNzYWdlc1BhdGgiLCJiaW5kaW5nUGFyYW1ldGVycyIsIiQkcGF0Y2hXaXRob3V0U2lkZUVmZmVjdHMiLCJzZWxlY3RlZFByb3BlcnRpZXMiLCJwdXNoIiwiam9pbiIsImNhbGxBY3Rpb24iLCJjb250ZXh0cyIsInNob3dBY3Rpb25QYXJhbWV0ZXJEaWFsb2ciLCJsYWJlbCIsIl9nZXRTcGVjaWZpY0NyZWF0ZUFjdGlvbkRpYWxvZ0xhYmVsIiwidmlldyIsImlzQ3JlYXRlQWN0aW9uIiwic2tpcFBhcmFtZXRlckRpYWxvZyIsImRlZmF1bHRWYWx1ZUZ1bmN0aW9uRGF0YSIsImNhbkhhdmVEaWFsb2ciLCJjcmVhdGlvbk1vZGUiLCJDcmVhdGlvblJvdyIsIklubGluZSIsImNyZWF0aW9uRGlhbG9nRmllbGRzIiwiQ3JlYXRpb25EaWFsb2ciLCJmb3JFYWNoIiwiY3JlYXRlV2l0aERpYWxvZyIsIndhaXRGb3JDcmVhdGVDb21wbGV0aW9uIiwia2VlcFRyYW5zaWVudENvbnRleHRPbkZhaWxlZCIsIm1zZyIsIm1lc3NhZ2UiLCJfaXNEcmFmdEVuYWJsZWQiLCJ2Q29udGV4dHMiLCJjb250ZXh0Rm9yRHJhZnRNb2RlbCIsInNQcm9ncmFtbWluZ01vZGVsIiwiZGVsZXRlRG9jdW1lbnQiLCJjb250ZXh0c1RvRGVsZXRlIiwiQXJyYXkiLCJpc0FycmF5IiwiZmlyc3RDb250ZXh0Iiwic2VsZWN0ZWRDb250ZXh0cyIsInJlamVjdCIsImRyYWZ0RW5hYmxlZCIsIml0ZW1zIiwidW5TYXZlZENvbnRleHQiLCJlbnRpdHlTZXROYW1lIiwiZ2V0Q29sbGVjdGlvbk5hbWVGcm9tQ29udGV4dCIsIm51bWJlck9mU2VsZWN0ZWRDb250ZXh0cyIsImxvY2tlZENvbnRleHQiLCJmaW5kIiwiY29udGV4dERhdGEiLCJJc0FjdGl2ZUVudGl0eSIsIkhhc0RyYWZ0RW50aXR5IiwiRHJhZnRBZG1pbmlzdHJhdGl2ZURhdGEiLCJJblByb2Nlc3NCeVVzZXIiLCJEcmFmdElzQ3JlYXRlZEJ5TWUiLCJsb2NraW5nVXNlck5hbWUiLCJNZXNzYWdlQm94Iiwic2hvdyIsImdldFRleHQiLCJ0aXRsZSIsIm9uQ2xvc2UiLCJub25UYWJsZVR4dCIsInVuU2F2ZWRDb250ZXh0VXNlciIsImRlc2NyaXB0aW9uIiwidHlwZSIsImRlbGV0YWJsZUNvbnRleHRzIiwidGV4dCIsInNlbGVjdGVkIiwiVEVYVCIsInRvdGFsRGVsZXRhYmxlIiwiZHJhZnRzV2l0aE5vbkRlbGV0YWJsZUFjdGl2ZSIsImRyYWZ0c1dpdGhEZWxldGFibGVBY3RpdmUiLCJ1blNhdmVkQ29udGV4dHMiLCJ1cGRhdGVEcmFmdE9wdGlvbnNGb3JEZWxldGFibGVUZXh0cyIsIm5vbkRlbGV0YWJsZVRleHQiLCJnZXROb25EZWxldGFibGVUZXh0Iiwib3B0aW9uc0RlbGV0YWJsZVRleHRzIiwiZ2V0T3B0aW9uc0ZvckRlbGV0YWJsZVRleHRzIiwiY29tbW9uQmluZGluZyIsImJpbmRpbmdUeXBlIiwidXBkYXRlQ29udGVudEZvckRlbGV0ZURpYWxvZyIsImZuQ29uZmlybSIsIm1lc3NhZ2VIYW5kbGluZyIsInJlbW92ZUJvdW5kVHJhbnNpdGlvbk1lc3NhZ2VzIiwiZGVsZXRlQ29uZmlybUhhbmRsZXIiLCJvRXJyb3IiLCJkaWFsb2ciLCJjcmVhdGVEZWxldGVEaWFsb2ciLCJub0RpYWxvZyIsInNpbGVudE1vZGUiLCJhZGRTdHlsZUNsYXNzIiwib3BlbiIsImZuUmVqZWN0IiwiZGlhbG9nQ29uZmlybWVkIiwidkJveCIsIlZCb3giLCJyZXNvdXJjZUJ1bmRsZUNvcmUiLCJMaWJyYXJ5IiwiZ2V0UmVzb3VyY2VCdW5kbGVGb3IiLCJEaWFsb2ciLCJzdGF0ZSIsImNvbnRlbnQiLCJhcmlhTGFiZWxsZWRCeSIsImJlZ2luQnV0dG9uIiwiQnV0dG9uIiwicHJlc3MiLCJjbG9zZSIsImVuZEJ1dHRvbiIsImFmdGVyQ2xvc2UiLCJkZXN0cm95IiwiZWRpdERvY3VtZW50IiwiZ3JvdXBJZCIsInRyYW5zYWN0aW9uRGV0YWlscyIsInJlbW92ZVRyYW5zaXRpb25NZXNzYWdlcyIsIm9OZXdDb250ZXh0IiwiZHJhZnQiLCJjcmVhdGVEcmFmdEZyb21BY3RpdmVEb2N1bWVudCIsImJQcmVzZXJ2ZUNoYW5nZXMiLCJzdGlja3kiLCJlZGl0RG9jdW1lbnRJblN0aWNreVNlc3Npb24iLCJlcnIiLCJzaG93TWVzc2FnZXMiLCJjb25jdXJyZW50RWRpdEZsYWciLCJjYW5jZWxEb2N1bWVudCIsIm1JblBhcmFtZXRlcnMiLCJpc05ld09iamVjdCIsImlzT2JqZWN0TW9kaWZpZWQiLCJvTW9kZWwiLCJyZXR1cm5lZFZhbHVlIiwic2libGluZ0NvbnRleHRDYW5vbmljYWxQYXRoIiwiZHJhZnRBZG1pbkRhdGEiLCJzaWJsaW5nQ29udGV4dCIsImRyYWZ0RGF0YUNvbnRleHQiLCJhbGwiLCJyZXF1ZXN0Q2Fub25pY2FsUGF0aCIsInJlcXVlc3RPYmplY3QiLCJDcmVhdGlvbkRhdGVUaW1lIiwiTGFzdENoYW5nZURhdGVUaW1lIiwic2tpcERpc2NhcmRQb3BvdmVyIiwiX2NvbmZpcm1EaXNjYXJkIiwiY2FuY2VsQnV0dG9uIiwiaXNLZWVwQWxpdmUiLCJzZXRLZWVwQWxpdmUiLCJiZWZvcmVDYW5jZWxDYWxsQmFjayIsImhhc1BlbmRpbmdDaGFuZ2VzIiwicmVzZXRDaGFuZ2VzIiwiZGVsZXRlRHJhZnQiLCJkaXNjYXJkZWRDb250ZXh0IiwiZGlzY2FyZERvY3VtZW50IiwicmVmcmVzaCIsInNhdmVEb2N1bWVudCIsImV4ZWN1dGVTaWRlRWZmZWN0c09uRXJyb3IiLCJiaW5kaW5nc0ZvclNpZGVFZmZlY3RzIiwic2tpcENvbmZpcm1hdGlvbk1zZyIsImFyZ3VtZW50cyIsImlzU3RhbmRhcmRTYXZlIiwib0FjdGl2ZURvY3VtZW50IiwiYWN0aXZhdGVEb2N1bWVudCIsIm1lc3NhZ2VzUmVjZWl2ZWQiLCJnZXRNZXNzYWdlcyIsImNvbmNhdCIsImdldFR5cGUiLCJNZXNzYWdlVHlwZSIsIlN1Y2Nlc3MiLCJNZXNzYWdlVG9hc3QiLCJoYXNUcmFuc2llbnRDb250ZXh0IiwiZ2V0U2lkZUVmZmVjdHNTZXJ2aWNlIiwicmVxdWVzdFNpZGVFZmZlY3RzRm9yTmF2aWdhdGlvblByb3BlcnR5Iiwic0FjdGlvbk5hbWUiLCJjb250ZXh0VG9Qcm9jZXNzIiwic05hbWUiLCJjb250cm9sSWQiLCJieUlkIiwib1Jlc3VsdCIsImFjdGlvblBhdGgiLCJib3VuZEFjdGlvbiIsImNyZWF0ZUJpbmRpbmdDb250ZXh0IiwiY29udmVydGVkVHlwZXMiLCJjb252ZXJ0VHlwZXMiLCJjb252ZXJ0ZWRBY3Rpb24iLCJyZXNvbHZlUGF0aCIsInRhcmdldCIsIk9wZXJhdGlvbiIsInBhcmFtZXRlclZhbHVlcyIsImludm9jYXRpb25Hcm91cGluZyIsIm9EYXRhUHJvcGVydGllcyIsImdob3N0Q29udGV4dEJpbmRpbmdQcm90ZWN0aW9uIiwiZW5oYW5jZSRzZWxlY3QiLCJpZ25vcmVFVGFnIiwib0RhdGFFdmVudHMiLCJvbk9EYXRhU3VibWl0Iiwib25PRGF0YVJlc3BvbnNlIiwib25SZXF1ZXN0U2lkZUVmZmVjdHMiLCJoYW5kbGVBY3Rpb25FbmFibGVtZW50T25PcGVyYXRpb24iLCJpbnRlcm5hbE1vZGVsQ29udGV4dCIsIm9wZXJhdGlvbkF2YWlsYWJsZU1hcCIsImRlZmF1bHRWYWx1ZXNFeHRlbnNpb25GdW5jdGlvbiIsImV4ZWN1dGUiLCJjYWxsQWN0aW9uSW1wb3J0IiwiX2hhbmRsZUFjdGlvblJlc3BvbnNlIiwibmFtZSIsImFjdGlvbkhlbHBlciIsImlzU3RhdGljQWN0aW9uIiwiZ2V0UHJvcGVydHkiLCJBY3Rpb25SdW50aW1lIiwic2V0QWN0aW9uRW5hYmxlbWVudCIsIkpTT04iLCJwYXJzZSIsImdldFNlbGVjdGVkQ29udGV4dHMiLCJ1cGRhdGVEZWxldGVJbmZvRm9yU2VsZWN0ZWRDb250ZXh0cyIsImFUcmFuc2llbnRNZXNzYWdlcyIsInNldFByb3BlcnR5IiwiYVNlbGVjdGVkQ29udGV4dHMiLCJoYW5kbGVWYWxpZGF0aW9uRXJyb3IiLCJlcnJvclRvUmVtb3ZlIiwiTWVzc2FnaW5nIiwiZ2V0TWVzc2FnZU1vZGVsIiwiZ2V0RGF0YSIsInZhbGlkYXRpb24iLCJyZW1vdmVNZXNzYWdlcyIsIl9jcmVhdGVQb3BvdmVyIiwic2V0dGluZ3MiLCJQb3BvdmVyIiwiaXNNb2RpZmllZCIsInNldEVuYWJsZWQiLCJjb25maXJtYXRpb25Qb3BvdmVyIiwic2hvd0hlYWRlciIsInBsYWNlbWVudCIsIlRleHQiLCJjb25maXJtQnV0dG9uIiwid2lkdGgiLCJhZGRDb250ZW50IiwiYXR0YWNoQmVmb3JlT3BlbiIsInNldEluaXRpYWxGb2N1cyIsImF0dGFjaEFmdGVyQ2xvc2UiLCJvcGVuQnkiLCJyZWZyZXNoTGlzdEJpbmRpbmciLCJpc1Jvb3QiLCJyZXF1ZXN0U2lkZUVmZmVjdHMiLCIkTmF2aWdhdGlvblByb3BlcnR5UGF0aCIsInJlcXVlc3RSZWZyZXNoIiwiZmllbGROYW1lcyIsImxpc3RNZXRhUGF0aCIsInRyYW5zaWVudExpc3RCaW5kaW5nIiwicmVmcmVzaEludGVybmFsIiwidHJhbnNpZW50Q29udGV4dCIsImZpZWxkTWV0YUNvbnRleHRzIiwiY3JlYXRlRGlhbG9nIiwiZ2V0Q29yZVVJRmFjdG9yeSIsIm5ld0NyZWF0ZURpYWxvZyIsInNldFVzZXJEZWZhdWx0cyIsImNyZWF0ZUFjdGlvbiIsIm9wZW5EaWFsb2ciLCJlIiwicmVzdWx0UHJvbWlzZUtlZXBlciIsIlByb21pc2VLZWVwZXIiLCJvbkV4aXREaWFsb2ciLCJldmVudCIsImdldFBhcmFtZXRlciIsImNsb3NlRGlhbG9nIiwic2V0QnVzeSIsImJJc0NyZWF0ZURpYWxvZyIsInRyYW5zaWVudERhdGEiLCJrZXlzIiwicHJvcGVydHlQYXRoIiwib1Byb3BlcnR5IiwiJGtpbmQiLCJjcmVhdGVEYXRhQXNBcnJheSIsIl9yZWYyIiwiVWlNb2RlbENvbnN0YW50cyIsIkRvY3VtZW50TW9kaWZpZWQiLCJuZXdDb250ZXh0IiwiY3JlYXRpb25TdWNjZXNzIiwiYWZ0ZXJDcmVhdGVDYWxsQmFjayIsImRpc3BsYXlFcnJvck1lc3NhZ2VzIiwic2hvd0JvdW5kU3RhdGVNZXNzYWdlcyIsIkNyZWF0aW9uRmFpbGVkIiwiaXNPcGVyYXRpb25EaWFsb2dPcGVuIiwiaXNPcGVuIiwiYXR0YWNoRXhpdERpYWxvZyIsInByb21pc2UiLCJwcm9taXNlS2VlcGVyIiwicGFyZW50TGlzdEJpbmRpbmciLCJvbkNyZWF0ZUNvbXBsZXRlZCIsImNyZWF0ZWRDb250ZXh0Iiwic3VjY2VzcyIsImRldGFjaENyZWF0ZUNvbXBsZXRlZCIsImF0dGFjaENyZWF0ZUNvbXBsZXRlZCIsImNyZWF0aW9uU3VjY2Vzc2Z1bCIsImNyZWF0ZWQiLCJjYXRjaCIsImNvbnRleHRFcnJvciIsInRyYWNlIiwib1N0YXJ0dXBQYXJhbWV0ZXJzIiwic0NyZWF0ZUhhc2giLCJvTWV0YU1vZGVsIiwic01ldGFQYXRoIiwic05ld0FjdGlvbiIsInByZWZlcnJlZE1vZGUiLCJ0b1VwcGVyQ2FzZSIsInNQcmVmZXJyZWRNb2RlIiwibGluZUl0ZW1zIiwibGluZUl0ZW0iLCJpc0RhdGFGaWVsZEZvckFjdGlvbiIsIkFjdGlvbiIsIkxhYmVsIiwic2luZ2xldG9uIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJUcmFuc2FjdGlvbkhlbHBlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEFjdGlvbiwgQWN0aW9uIGFzIEVkbUFjdGlvbiwgRW50aXR5U2V0LCBOYXZpZ2F0aW9uUHJvcGVydHkgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCB0eXBlIHsgTGluZUl0ZW0gfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1VJXCI7XG5pbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCB0eXBlIEFwcENvbXBvbmVudCBmcm9tIFwic2FwL2ZlL2NvcmUvQXBwQ29tcG9uZW50XCI7XG5pbXBvcnQgdHlwZSB7IEZFVmlldyB9IGZyb20gXCJzYXAvZmUvY29yZS9CYXNlQ29udHJvbGxlclwiO1xuaW1wb3J0IENvbW1vblV0aWxzIGZyb20gXCJzYXAvZmUvY29yZS9Db21tb25VdGlsc1wiO1xuaW1wb3J0IHR5cGUgUmVzb3VyY2VNb2RlbCBmcm9tIFwic2FwL2ZlL2NvcmUvUmVzb3VyY2VNb2RlbFwiO1xuaW1wb3J0IHR5cGUgeyBFeGl0RGlhbG9nRXZlbnQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvVUlQcm92aWRlclwiO1xuaW1wb3J0IHsgZ2V0Q29yZVVJRmFjdG9yeSB9IGZyb20gXCJzYXAvZmUvY29yZS9VSVByb3ZpZGVyXCI7XG5pbXBvcnQgQnVzeUxvY2tlciBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvQnVzeUxvY2tlclwiO1xuaW1wb3J0IHR5cGUgTWVzc2FnZUhhbmRsZXIgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL01lc3NhZ2VIYW5kbGVyXCI7XG5pbXBvcnQgdHlwZSB7IEJpbmRDb250ZXh0UGFyYW1ldGVycyB9IGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9lZGl0Rmxvdy9kcmFmdFwiO1xuaW1wb3J0IGRyYWZ0IGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9lZGl0Rmxvdy9kcmFmdFwiO1xuaW1wb3J0IFVpTW9kZWxDb25zdGFudHMgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL2VkaXRGbG93L2VkaXRGbG93Q29uc3RhbnRzXCI7XG5pbXBvcnQgb3BlcmF0aW9ucyBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvZWRpdEZsb3cvb3BlcmF0aW9uc1wiO1xuaW1wb3J0IHN0aWNreSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvZWRpdEZsb3cvc3RpY2t5XCI7XG5pbXBvcnQgbWVzc2FnZUhhbmRsaW5nIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9tZXNzYWdlSGFuZGxlci9tZXNzYWdlSGFuZGxpbmdcIjtcbmltcG9ydCAqIGFzIE1ldGFNb2RlbENvbnZlcnRlciBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NZXRhTW9kZWxDb252ZXJ0ZXJcIjtcbmltcG9ydCB7IGNvbnZlcnRUeXBlcyB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01ldGFNb2RlbENvbnZlcnRlclwiO1xuaW1wb3J0IHsgaXNEYXRhRmllbGRGb3JBY3Rpb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9hbm5vdGF0aW9ucy9EYXRhRmllbGRcIjtcbmltcG9ydCB0eXBlIHsgRGVsZXRlT3B0aW9uLCBEZWxldGVQYXJhbWV0ZXJzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvRGVsZXRlSGVscGVyXCI7XG5pbXBvcnQgZGVsZXRlSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0RlbGV0ZUhlbHBlclwiO1xuaW1wb3J0IEZQTUhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9GUE1IZWxwZXJcIjtcbmltcG9ydCB7IGdldENyZWF0ZVBvcHVwRmllbGRzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvTWV0YU1vZGVsRnVuY3Rpb25cIjtcbmltcG9ydCB0eXBlIHsgSW50ZXJuYWxNb2RlbENvbnRleHQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Nb2RlbEhlbHBlclwiO1xuaW1wb3J0IE1vZGVsSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgUHJvbWlzZUtlZXBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Qcm9taXNlS2VlcGVyXCI7XG5pbXBvcnQgdG9FUzZQcm9taXNlIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1RvRVM2UHJvbWlzZVwiO1xuaW1wb3J0IHsgaXNOYXZpZ2F0aW9uUHJvcGVydHkgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9UeXBlR3VhcmRzXCI7XG5pbXBvcnQgRkVMaWJyYXJ5IGZyb20gXCJzYXAvZmUvY29yZS9saWJyYXJ5XCI7XG5pbXBvcnQgQnV0dG9uIGZyb20gXCJzYXAvbS9CdXR0b25cIjtcbmltcG9ydCBEaWFsb2cgZnJvbSBcInNhcC9tL0RpYWxvZ1wiO1xuaW1wb3J0IE1lc3NhZ2VCb3ggZnJvbSBcInNhcC9tL01lc3NhZ2VCb3hcIjtcbmltcG9ydCBNZXNzYWdlVG9hc3QgZnJvbSBcInNhcC9tL01lc3NhZ2VUb2FzdFwiO1xuaW1wb3J0IHR5cGUgeyAkUG9wb3ZlclNldHRpbmdzIH0gZnJvbSBcInNhcC9tL1BvcG92ZXJcIjtcbmltcG9ydCBQb3BvdmVyIGZyb20gXCJzYXAvbS9Qb3BvdmVyXCI7XG5pbXBvcnQgVGV4dCBmcm9tIFwic2FwL20vVGV4dFwiO1xuaW1wb3J0IFZCb3ggZnJvbSBcInNhcC9tL1ZCb3hcIjtcbmltcG9ydCB0eXBlIEV2ZW50IGZyb20gXCJzYXAvdWkvYmFzZS9FdmVudFwiO1xuaW1wb3J0IHR5cGUgQ29udHJvbCBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IExpYnJhcnkgZnJvbSBcInNhcC91aS9jb3JlL0xpYlwiO1xuaW1wb3J0IE1lc3NhZ2luZyBmcm9tIFwic2FwL3VpL2NvcmUvTWVzc2FnaW5nXCI7XG5pbXBvcnQgdHlwZSBNZXNzYWdlIGZyb20gXCJzYXAvdWkvY29yZS9tZXNzYWdlL01lc3NhZ2VcIjtcbmltcG9ydCBNZXNzYWdlVHlwZSBmcm9tIFwic2FwL3VpL2NvcmUvbWVzc2FnZS9NZXNzYWdlVHlwZVwiO1xuaW1wb3J0IHR5cGUgVmlldyBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL1ZpZXdcIjtcbmltcG9ydCB0eXBlIFRhYmxlIGZyb20gXCJzYXAvdWkvbWRjL1RhYmxlXCI7XG5pbXBvcnQgdHlwZSBNdWx0aVZhbHVlRmllbGRJdGVtIGZyb20gXCJzYXAvdWkvbWRjL2ZpZWxkL011bHRpVmFsdWVGaWVsZEl0ZW1cIjtcbmltcG9ydCB0eXBlIEJpbmRpbmcgZnJvbSBcInNhcC91aS9tb2RlbC9CaW5kaW5nXCI7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFWNENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSBPRGF0YUxpc3RCaW5kaW5nIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFMaXN0QmluZGluZ1wiO1xuaW1wb3J0IHR5cGUgeyBPRGF0YUxpc3RCaW5kaW5nJENyZWF0ZUNvbXBsZXRlZEV2ZW50IH0gZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YUxpc3RCaW5kaW5nXCI7XG5pbXBvcnQgdHlwZSBPRGF0YU1ldGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTWV0YU1vZGVsXCI7XG5pbXBvcnQgdHlwZSBPRGF0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNb2RlbFwiO1xuaW1wb3J0IEFjdGlvblJ1bnRpbWUgZnJvbSBcIi4uLy4uL0FjdGlvblJ1bnRpbWVcIjtcbmltcG9ydCB0eXBlIHsgT3BlcmF0aW9uUmVzdWx0IH0gZnJvbSBcIi4vb3BlcmF0aW9ucy9PRGF0YU9wZXJhdGlvblwiO1xuaW1wb3J0IE9wZXJhdGlvbiBmcm9tIFwiLi9vcGVyYXRpb25zL09wZXJhdGlvblwiO1xuaW1wb3J0IGFjdGlvbkhlbHBlciBmcm9tIFwiLi9vcGVyYXRpb25zL2FjdGlvbkhlbHBlclwiO1xuXG5jb25zdCBDcmVhdGlvbk1vZGUgPSBGRUxpYnJhcnkuQ3JlYXRpb25Nb2RlO1xuY29uc3QgUHJvZ3JhbW1pbmdNb2RlbCA9IEZFTGlicmFyeS5Qcm9ncmFtbWluZ01vZGVsO1xuXG4vL0VudW1zIGZvciBkZWxldGUgdGV4dCBjYWxjdWxhdGlvbnMgZm9yIGRlbGV0ZSBjb25maXJtIGRpYWxvZy5cbmNvbnN0IERlbGV0ZU9wdGlvblR5cGVzID0gZGVsZXRlSGVscGVyLkRlbGV0ZU9wdGlvblR5cGVzO1xuY29uc3QgRGVsZXRlRGlhbG9nQ29udGVudENvbnRyb2wgPSBkZWxldGVIZWxwZXIuRGVsZXRlRGlhbG9nQ29udGVudENvbnRyb2w7XG5cbi8qIE1ha2Ugc3VyZSB0aGF0IHRoZSBtUGFyYW1ldGVycyBpcyBub3QgdGhlIG9FdmVudCAqL1xuZnVuY3Rpb24gZ2V0UGFyYW1ldGVyczxUPihtUGFyYW1ldGVycz86IEV2ZW50IHwgVCk6IFQge1xuXHRpZiAobVBhcmFtZXRlcnMgJiYgKG1QYXJhbWV0ZXJzIGFzIEV2ZW50KS5nZXRNZXRhZGF0YSAmJiAobVBhcmFtZXRlcnMgYXMgRXZlbnQpLmdldE1ldGFkYXRhKCkuZ2V0TmFtZSgpID09PSBcInNhcC51aS5iYXNlLkV2ZW50XCIpIHtcblx0XHRtUGFyYW1ldGVycyA9IHt9IGFzIFQ7XG5cdH1cblx0cmV0dXJuIChtUGFyYW1ldGVycyBhcyBUKSB8fCAoe30gYXMgVCk7XG59XG5cbmV4cG9ydCB0eXBlIENyZWF0ZVBhcmFtZXRlcnMgPSB7XG5cdGRhdGE/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblx0YnVzeU1vZGU/OiBzdHJpbmc7XG5cdGJ1c3lJZD86IHN0cmluZztcblx0a2VlcFRyYW5zaWVudENvbnRleHRPbkZhaWxlZD86IGJvb2xlYW47XG5cdHBhcmVudENvbnRyb2w6IFZpZXc7XG5cdGluYWN0aXZlPzogYm9vbGVhbjtcblx0YmVmb3JlQ3JlYXRlQ2FsbEJhY2s/OiBGdW5jdGlvbjtcblx0YWZ0ZXJDcmVhdGVDYWxsQmFjaz86IChjb250ZXh0OiBPRGF0YVY0Q29udGV4dCkgPT4gUHJvbWlzZTx2b2lkPjtcblx0c2tpcFBhcmFtZXRlckRpYWxvZz86IGJvb2xlYW47XG5cdGNyZWF0aW9uTW9kZT86IHN0cmluZztcblx0Y3JlYXRlQXRFbmQ/OiBib29sZWFuO1xuXHRwYXJlbnRDb250ZXh0PzogT0RhdGFWNENvbnRleHQ7XG5cdGNyZWF0aW9uRGlhbG9nRmllbGRzPzogc3RyaW5nW107XG5cdHJlcXVlc3RBdExlYXN0Pzogc3RyaW5nW107XG59O1xuXG5leHBvcnQgdHlwZSBDYW5jZWxQYXJhbWV0ZXJzID0geyBjYW5jZWxCdXR0b246IEJ1dHRvbjsgc2tpcERpc2NhcmRQb3BvdmVyOiBib29sZWFuOyBiZWZvcmVDYW5jZWxDYWxsQmFjaz86IEZ1bmN0aW9uIH07XG5leHBvcnQgdHlwZSBUcmFuc2FjdGlvbkRlbGV0ZVBhcmFtZXRlcnMgPSBEZWxldGVQYXJhbWV0ZXJzICYge1xuXHRzZWxlY3RlZENvbnRleHRzPzogT0RhdGFWNENvbnRleHRbXTtcblx0dGl0bGU/OiBzdHJpbmc7XG5cdG5vRGlhbG9nPzogYm9vbGVhbjtcbn07XG5leHBvcnQgdHlwZSBFZGl0VHJhbnNhY3Rpb25FeGVjdXRpb25EZXRhaWxzID0ge1xuXHRleGlzdGluZ0RyYWZ0UmV1c2VkPzogYm9vbGVhbjsgLy8gdHJ1ZSBpZiBhbiBleGlzdGluZyBkcmFmdCB3YXMgcmV0dXJuZWQsIGluc3RlYWQgb2YgcmV0dXJuaW5nIGEgbmV3IG9uZVxufTtcblxuY2xhc3MgVHJhbnNhY3Rpb25IZWxwZXIge1xuXHRidXN5TG9jayhhcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudCwgYnVzeVBhdGg/OiBzdHJpbmcpOiB2b2lkIHtcblx0XHRCdXN5TG9ja2VyLmxvY2soYXBwQ29tcG9uZW50LmdldE1vZGVsKFwidWlcIiksIGJ1c3lQYXRoKTtcblx0fVxuXG5cdGJ1c3lVbmxvY2soYXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQsIGJ1c3lQYXRoPzogc3RyaW5nKTogdm9pZCB7XG5cdFx0QnVzeUxvY2tlci51bmxvY2soYXBwQ29tcG9uZW50LmdldE1vZGVsKFwidWlcIiksIGJ1c3lQYXRoKTtcblx0fVxuXG5cdGdldFByb2dyYW1taW5nTW9kZWwoc291cmNlOiBPRGF0YVY0Q29udGV4dCB8IEJpbmRpbmcpOiB0eXBlb2YgUHJvZ3JhbW1pbmdNb2RlbCB7XG5cdFx0bGV0IHBhdGg6IHN0cmluZztcblx0XHRpZiAoc291cmNlLmlzQTxPRGF0YVY0Q29udGV4dD4oXCJzYXAudWkubW9kZWwub2RhdGEudjQuQ29udGV4dFwiKSkge1xuXHRcdFx0cGF0aCA9IHNvdXJjZS5nZXRQYXRoKCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHBhdGggPSAoc291cmNlLmlzUmVsYXRpdmUoKSA/IHNvdXJjZS5nZXRSZXNvbHZlZFBhdGgoKSA6IHNvdXJjZS5nZXRQYXRoKCkpID8/IFwiXCI7XG5cdFx0fVxuXG5cdFx0Y29uc3QgbWV0YU1vZGVsID0gc291cmNlLmdldE1vZGVsKCk/LmdldE1ldGFNb2RlbCgpIGFzIE9EYXRhTWV0YU1vZGVsIHwgdW5kZWZpbmVkO1xuXHRcdGlmIChtZXRhTW9kZWwgJiYgTW9kZWxIZWxwZXIuaXNEcmFmdFN1cHBvcnRlZChtZXRhTW9kZWwsIHBhdGgpKSB7XG5cdFx0XHRyZXR1cm4gUHJvZ3JhbW1pbmdNb2RlbC5EcmFmdDtcblx0XHR9IGVsc2UgaWYgKG1ldGFNb2RlbCAmJiBNb2RlbEhlbHBlci5pc1N0aWNreVNlc3Npb25TdXBwb3J0ZWQobWV0YU1vZGVsKSkge1xuXHRcdFx0cmV0dXJuIFByb2dyYW1taW5nTW9kZWwuU3RpY2t5O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gUHJvZ3JhbW1pbmdNb2RlbC5Ob25EcmFmdDtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogVmFsaWRhdGVzIGEgZG9jdW1lbnQuXG5cdCAqIEBwYXJhbSBvQ29udGV4dCBDb250ZXh0IG9mIHRoZSBkb2N1bWVudCB0byBiZSB2YWxpZGF0ZWRcblx0ICogQHBhcmFtIFttUGFyYW1ldGVyc10gQ2FuIGNvbnRhaW4gdGhlIGZvbGxvd2luZyBhdHRyaWJ1dGVzOlxuXHQgKiBAcGFyYW0gW21QYXJhbWV0ZXJzLmRhdGFdIEEgbWFwIG9mIGRhdGEgdGhhdCBzaG91bGQgYmUgdmFsaWRhdGVkXG5cdCAqIEBwYXJhbSBbbVBhcmFtZXRlcnMuY3VzdG9tVmFsaWRhdGlvbkZ1bmN0aW9uXSBBIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIHBhdGggdG8gdGhlIHZhbGlkYXRpb24gZnVuY3Rpb25cblx0ICogQHBhcmFtIG9WaWV3IENvbnRhaW5zIHRoZSBvYmplY3Qgb2YgdGhlIGN1cnJlbnQgdmlld1xuXHQgKiBAcmV0dXJucyBQcm9taXNlIHJlc29sdmVzIHdpdGggcmVzdWx0IG9mIHRoZSBjdXN0b20gdmFsaWRhdGlvbiBmdW5jdGlvblxuXHQgKiBAZmluYWxcblx0ICovXG5cdGFzeW5jIHZhbGlkYXRlRG9jdW1lbnQoXG5cdFx0b0NvbnRleHQ6IE9EYXRhVjRDb250ZXh0LFxuXHRcdG1QYXJhbWV0ZXJzOiB7IGN1c3RvbVZhbGlkYXRpb25GdW5jdGlvbj86IHN0cmluZzsgZGF0YTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfSxcblx0XHRvVmlldzogVmlld1xuXHQpOiBQcm9taXNlPHsgbWVzc2FnZVRhcmdldD86IHN0cmluZzsgbWVzc2FnZVRleHQ6IHN0cmluZyB9W10+IHtcblx0XHRjb25zdCBzQ3VzdG9tVmFsaWRhdGlvbkZ1bmN0aW9uID0gbVBhcmFtZXRlcnMgJiYgbVBhcmFtZXRlcnMuY3VzdG9tVmFsaWRhdGlvbkZ1bmN0aW9uO1xuXHRcdGlmIChzQ3VzdG9tVmFsaWRhdGlvbkZ1bmN0aW9uKSB7XG5cdFx0XHRjb25zdCBzTW9kdWxlID0gc0N1c3RvbVZhbGlkYXRpb25GdW5jdGlvbi5zdWJzdHJpbmcoMCwgc0N1c3RvbVZhbGlkYXRpb25GdW5jdGlvbi5sYXN0SW5kZXhPZihcIi5cIikgfHwgLTEpLnJlcGxhY2UoL1xcLi9naSwgXCIvXCIpLFxuXHRcdFx0XHRzRnVuY3Rpb25OYW1lID0gc0N1c3RvbVZhbGlkYXRpb25GdW5jdGlvbi5zdWJzdHJpbmcoXG5cdFx0XHRcdFx0c0N1c3RvbVZhbGlkYXRpb25GdW5jdGlvbi5sYXN0SW5kZXhPZihcIi5cIikgKyAxLFxuXHRcdFx0XHRcdHNDdXN0b21WYWxpZGF0aW9uRnVuY3Rpb24ubGVuZ3RoXG5cdFx0XHRcdCksXG5cdFx0XHRcdG1EYXRhID0gbVBhcmFtZXRlcnMuZGF0YTtcblx0XHRcdGRlbGV0ZSBtRGF0YVtcIkAkdWk1LmNvbnRleHQuaXNUcmFuc2llbnRcIl07XG5cdFx0XHRyZXR1cm4gRlBNSGVscGVyLnZhbGlkYXRpb25XcmFwcGVyKHNNb2R1bGUsIHNGdW5jdGlvbk5hbWUsIG1EYXRhLCBvVmlldywgb0NvbnRleHQpO1xuXHRcdH1cblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFtdKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXRyaWV2ZXMgZGVmYXR1bCB2YWx1ZXMgZnJvbSB0aGUgRGVmYXVsdFZhbHVlIGZ1bmN0aW9uLlxuXHQgKiBAcGFyYW0gbGlzdEJpbmRpbmcgVGhlIGxpc3QgYmluZGluZyB0byBiZSB1c2VkIGZvciBjcmVhdGlvblxuXHQgKiBAcmV0dXJucyBBIHByb21pc2Ugd2l0aCBhbiBvYmplY3QgY29udGFpbmluZyB0aGUgZGVmYXVsdCB2YWx1ZXMgKG9yIHVuZGVmaW5lZCBpZiB0aGVyZSdzIG5vIGRlZmF1bHQgdmFsdWUgZnVuY3Rpb24pXG5cdCAqL1xuXHRwcml2YXRlIGFzeW5jIGdldERhdGFGcm9tRGVmYXVsdFZhbHVlRnVuY3Rpb24obGlzdEJpbmRpbmc6IE9EYXRhTGlzdEJpbmRpbmcpOiBQcm9taXNlPG9iamVjdCB8IHVuZGVmaW5lZD4ge1xuXHRcdGNvbnN0IG1vZGVsID0gbGlzdEJpbmRpbmcuZ2V0TW9kZWwoKTtcblx0XHRjb25zdCBtZXRhTW9kZWwgPSBtb2RlbC5nZXRNZXRhTW9kZWwoKTtcblx0XHRjb25zdCBtZXRhQ29udGV4dCA9IG1ldGFNb2RlbC5nZXRNZXRhQ29udGV4dChsaXN0QmluZGluZy5nZXRSZXNvbHZlZFBhdGgoKSBhcyBzdHJpbmcpO1xuXHRcdGNvbnN0IGxpc3RCaW5kaW5nT2JqZWN0UGF0aCA9IE1ldGFNb2RlbENvbnZlcnRlci5nZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMobWV0YUNvbnRleHQpO1xuXG5cdFx0Y29uc3QgZGVmYXVsdEZ1bmNPblRhcmdldE9iamVjdCA9IChsaXN0QmluZGluZ09iamVjdFBhdGgudGFyZ2V0T2JqZWN0IGFzIE5hdmlnYXRpb25Qcm9wZXJ0eSB8IEVudGl0eVNldCkuYW5ub3RhdGlvbnMuQ29tbW9uXG5cdFx0XHQ/LkRlZmF1bHRWYWx1ZXNGdW5jdGlvbjtcblx0XHRjb25zdCBkZWZhdWx0RnVuY09uVGFyZ2V0RW50aXR5U2V0ID0gKGxpc3RCaW5kaW5nT2JqZWN0UGF0aC50YXJnZXRFbnRpdHlTZXQgYXMgRW50aXR5U2V0IHwgdW5kZWZpbmVkKT8uYW5ub3RhdGlvbnMuQ29tbW9uXG5cdFx0XHQ/LkRlZmF1bHRWYWx1ZXNGdW5jdGlvbjtcblx0XHRjb25zdCBkZWZhdWx0RnVuY3Rpb25OYW1lID0gZGVmYXVsdEZ1bmNPblRhcmdldE9iamVjdCA/PyBkZWZhdWx0RnVuY09uVGFyZ2V0RW50aXR5U2V0O1xuXG5cdFx0aWYgKCFkZWZhdWx0RnVuY3Rpb25OYW1lKSB7XG5cdFx0XHQvLyBObyBkZWZhdWx0IHZhbHVlIGZ1bmN0aW9uXG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdH1cblxuXHRcdGNvbnN0IGZ1bmN0aW9uT25OYXZQcm9wID0gaXNOYXZpZ2F0aW9uUHJvcGVydHkobGlzdEJpbmRpbmdPYmplY3RQYXRoLnRhcmdldE9iamVjdCkgJiYgZGVmYXVsdEZ1bmNPblRhcmdldE9iamVjdCAhPT0gdW5kZWZpbmVkO1xuXHRcdGxldCBkZWZhdWx0RnVuY3Rpb25Db250ZXh0O1xuXHRcdGlmIChmdW5jdGlvbk9uTmF2UHJvcCkge1xuXHRcdFx0Ly8gSWYgdGhlIHBhdGggaXMgYSBkZWVwIG5hdmlnYXRpb24sIGRlcml2ZSB0aGUgY29ycmVjdCBwYXJlbnQgY29udGV4dFxuXHRcdFx0Y29uc3QgYmluZGluZ1BhdGggPSBsaXN0QmluZGluZy5nZXRQYXRoKCk7XG5cdFx0XHRjb25zdCBjb250ZXh0ID0gbGlzdEJpbmRpbmcuZ2V0Q29udGV4dCgpO1xuXHRcdFx0aWYgKGJpbmRpbmdQYXRoPy5zdGFydHNXaXRoKFwiL1wiKSkge1xuXHRcdFx0XHRkZWZhdWx0RnVuY3Rpb25Db250ZXh0ID0gY29udGV4dDtcblx0XHRcdH0gZWxzZSBpZiAoYmluZGluZ1BhdGggJiYgY29udGV4dCAmJiBiaW5kaW5nUGF0aC5pbmNsdWRlcyhcIi9cIikpIHtcblx0XHRcdFx0Ly8gRXh0cmFjdCB0aGUgZmlyc3QgcGFydCBvZiB0aGUgbmF2aWdhdGlvbiBwYXRoIChlLmcuLCBfVG9IZWFkZXIvX1RvSXRlbXMg4oaSIF9Ub0hlYWRlcilcblx0XHRcdFx0Y29uc3QgZmlyc3ROYXYgPSBiaW5kaW5nUGF0aC5zcGxpdChcIi9cIilbMF07XG5cblx0XHRcdFx0Ly8gQnVpbGQgdGhlIGZ1bGwgcGF0aCB0byB0aGUgY29ycmVjdCBjb250ZXh0IGZvciB0aGUgZnVuY3Rpb24gY2FsbFxuXHRcdFx0XHRjb25zdCBwYXJlbnRQYXRoID0gYCR7Y29udGV4dC5nZXRQYXRoKCl9LyR7Zmlyc3ROYXZ9YDtcblxuXHRcdFx0XHQvLyBDcmVhdGUgYSBuZXcgYmluZGluZyBjb250ZXh0IGZvciB0aGlzIHBhdGhcblx0XHRcdFx0ZGVmYXVsdEZ1bmN0aW9uQ29udGV4dCA9IG1vZGVsLmJpbmRDb250ZXh0KHBhcmVudFBhdGgpLmdldEJvdW5kQ29udGV4dCgpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Ly8gRmFsbGJhY2sgdG8gdGhlIGN1cnJlbnQgY29udGV4dCBpZiBubyBuYXZpZ2F0aW9uIGZvdW5kXG5cdFx0XHRcdGRlZmF1bHRGdW5jdGlvbkNvbnRleHQgPSBjb250ZXh0O1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBJZiBub3QgYSBuYXZpZ2F0aW9uIHByb3BlcnR5LCB1c2UgdGhlIGhlYWRlciBjb250ZXh0IChyb290IG9iamVjdCBwYWdlIGNvbnRleHQpXG5cdFx0XHRkZWZhdWx0RnVuY3Rpb25Db250ZXh0ID0gbGlzdEJpbmRpbmcuZ2V0SGVhZGVyQ29udGV4dCgpO1xuXHRcdH1cblx0XHRpZiAoIWRlZmF1bHRGdW5jdGlvbkNvbnRleHQpIHtcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0fVxuXHRcdGNvbnN0IGRlZmF1bHRGdW5jdGlvblBhdGggPSBgJHttZXRhTW9kZWwuZ2V0TWV0YVBhdGgoZGVmYXVsdEZ1bmN0aW9uQ29udGV4dC5nZXRQYXRoKCkpfS8ke2RlZmF1bHRGdW5jdGlvbk5hbWV9YDtcblxuXHRcdGNvbnN0IGRlZmF1bHRGdW5jdGlvbk9iamVjdFBhdGggPSBNZXRhTW9kZWxDb252ZXJ0ZXIuZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzKG1ldGFNb2RlbC5nZXRNZXRhQ29udGV4dChkZWZhdWx0RnVuY3Rpb25QYXRoKSk7XG5cdFx0Y29uc3QgZGVmYXVsdEZ1bmN0aW9uUmVzdWx0ID0gKGRlZmF1bHRGdW5jdGlvbk9iamVjdFBhdGgudGFyZ2V0T2JqZWN0IGFzIEFjdGlvbik/LmlzQm91bmRcblx0XHRcdD8gYXdhaXQgb3BlcmF0aW9ucy5jYWxsQm91bmRGdW5jdGlvbihkZWZhdWx0RnVuY3Rpb25OYW1lLnRvU3RyaW5nKCksIGRlZmF1bHRGdW5jdGlvbkNvbnRleHQsIG1vZGVsKVxuXHRcdFx0OiAoKGF3YWl0IG9wZXJhdGlvbnMuY2FsbEZ1bmN0aW9uSW1wb3J0KGRlZmF1bHRGdW5jdGlvbk5hbWUudG9TdHJpbmcoKSwgbW9kZWwpKSBhcyBPRGF0YVY0Q29udGV4dCk7XG5cblx0XHRyZXR1cm4gZGVmYXVsdEZ1bmN0aW9uUmVzdWx0LmdldE9iamVjdCgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENoZWNrcyBpZiBhIGxpc3QgYmluZGluZyBjb3JyZXNwb25kcyB0byBhIGhpZXJhcmNoeS5cblx0ICogQHBhcmFtIGxpc3RCaW5kaW5nXG5cdCAqIEByZXR1cm5zIFRydWUgaWYgdGhlIGxpc3QgYmluZGluZyBpcyBoaWVyYXJjaGljYWwuXG5cdCAqL1xuXHRpc0xpc3RCaW5kaW5nSGllcmFyY2hpY2FsKGxpc3RCaW5kaW5nOiBPRGF0YUxpc3RCaW5kaW5nKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIChsaXN0QmluZGluZy5nZXRBZ2dyZWdhdGlvbigpIGFzIHsgaGllcmFyY2h5UXVhbGlmaWVyPzogc3RyaW5nIH0gfCB1bmRlZmluZWQpPy5oaWVyYXJjaHlRdWFsaWZpZXIgPyB0cnVlIDogZmFsc2U7XG5cdH1cblxuXHQvKipcblx0ICogQ2hlY2tzIGlmIHRoZSBnaXZlbiBsaXN0IGJpbmRpbmcgaXMgYW5hbHl0aWNhbC5cblx0ICogQHBhcmFtIGxpc3RCaW5kaW5nIFRoZSBsaXN0IGJpbmRpbmcgdG8gY2hlY2tcblx0ICogQHJldHVybnMgVFJVRSBpZiB0aGUgbGlzdCBiaW5kaW5nIGlzIGFuYWx5dGljYWwsIGBmYWxzZWAgb3RoZXJ3aXNlLlxuXHQgKi9cblx0aXNMaXN0QmluZGluZ0FuYWx5dGljYWwobGlzdEJpbmRpbmc6IE9EYXRhTGlzdEJpbmRpbmcpOiBib29sZWFuIHtcblx0XHRjb25zdCBhZ2dyZWdhdGlvbiA9IGxpc3RCaW5kaW5nLmdldEFnZ3JlZ2F0aW9uKCkgYXMgeyBoaWVyYXJjaHlRdWFsaWZpZXI/OiBzdHJpbmcgfSB8IHVuZGVmaW5lZDtcblx0XHRyZXR1cm4gYWdncmVnYXRpb24gIT09IHVuZGVmaW5lZCAmJiAhYWdncmVnYXRpb24uaGllcmFyY2h5UXVhbGlmaWVyO1xuXHR9XG5cblx0LyoqXG5cdCAqIENyZWF0ZXMgYSBuZXcgY29udGV4dCBpbiBhIGxpc3QgYmluZGluZy4gSGFuZGxlcyBib3RoIGZsYXQgYW5kIGhpZXJhcmNoaWNhbCBjYXNlcy5cblx0ICogQHBhcmFtIGxpc3RCaW5kaW5nXG5cdCAqIEBwYXJhbSBpbml0aWFsRGF0YSBJbml0aWFsIGRhdGEgdG8gY3JlYXRlIHRoZSBjb250ZXh0LlxuXHQgKiBAcGFyYW0gb3B0aW9ucyBDcmVhdGlvbiBvcHRpb25zLlxuXHQgKiBAcGFyYW0gb3B0aW9ucy5jcmVhdGVBdEVuZCBDcmVhdGUgdGhlIGNvbnRleHQgYXQgdGhlIGVuZCBvZiB0aGUgbGlzdCAoaWdub3JlZCBpbiBjYXNlIG9mIGEgaGllcmFyY2h5KS5cblx0ICogQHBhcmFtIG9wdGlvbnMuY3JlYXRlSW5hY3RpdmUgQ3JlYXRlIHRoZSBjb250ZXh0IGFzIGluYWN0aXZlIChpZ25vcmVkIGluIGNhc2Ugb2YgYSBoaWVyYXJjaHkpLlxuXHQgKiBAcGFyYW0gb3B0aW9ucy5wYXJlbnRDb250ZXh0IENyZWF0ZSB0aGUgY29udGV4dCBhcyBhXHQgY2hpbGQgb2YgdGhpcyBjb250ZXh0IChvbnkgdXNlZCBpbiBjYXNlIG9mIGEgaGllcmFyY2h5KS5cblx0ICogQHJldHVybnMgVGhlIGNyZWF0ZWQgY29udGV4dC5cblx0ICovXG5cdHByaXZhdGUgYXN5bmMgY3JlYXRlQ29udGV4dChcblx0XHRsaXN0QmluZGluZzogT0RhdGFMaXN0QmluZGluZyxcblx0XHRpbml0aWFsRGF0YTogb2JqZWN0IHwgdW5kZWZpbmVkLFxuXHRcdG9wdGlvbnM6IHsgY3JlYXRlQXRFbmQ/OiBib29sZWFuOyBjcmVhdGVJbmFjdGl2ZT86IGJvb2xlYW47IHBhcmVudENvbnRleHQ/OiBPRGF0YVY0Q29udGV4dCB9XG5cdCk6IFByb21pc2U8T0RhdGFWNENvbnRleHQ+IHtcblx0XHRjb25zdCBkYXRhRm9yQ3JlYXRpb24gPSBpbml0aWFsRGF0YSA/PyB7fTtcblxuXHRcdGlmICh0aGlzLmlzTGlzdEJpbmRpbmdIaWVyYXJjaGljYWwobGlzdEJpbmRpbmcpKSB7XG5cdFx0XHRsZXQgbGlzdEJpbmRpbmdGb3JDcmVhdGlvbjogT0RhdGFMaXN0QmluZGluZztcblx0XHRcdGlmIChvcHRpb25zLnBhcmVudENvbnRleHQ/LmlzRXhwYW5kZWQoKSA9PT0gZmFsc2UpIHtcblx0XHRcdFx0Ly8gSWYgdGhlIHBhcmVudCBjb250ZXh0IGFscmVhZHkgaGFzIGNoaWxkcmVuIGFuZCBpcyBjb2xsYXBzZWQsIHdlIGV4cGFuZCBpdCBmaXJzdFxuXHRcdFx0XHRhd2FpdCBsaXN0QmluZGluZy5leHBhbmQob3B0aW9ucy5wYXJlbnRDb250ZXh0KTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKGxpc3RCaW5kaW5nLmlzUmVsYXRpdmUoKSkge1xuXHRcdFx0XHRPYmplY3QuYXNzaWduKGRhdGFGb3JDcmVhdGlvbiwgeyBcIkAkdWk1Lm5vZGUucGFyZW50XCI6IG9wdGlvbnMucGFyZW50Q29udGV4dCB9KTtcblx0XHRcdFx0bGlzdEJpbmRpbmdGb3JDcmVhdGlvbiA9IGxpc3RCaW5kaW5nO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Ly8gQWJzb2x1dGUgYmluZGluZzogY3JlYXRpb24gZnJvbSB0aGUgTGlzdFJlcG9ydFxuXHRcdFx0XHQvLyBXZSB1c2UgYSB0ZW1wb3JhcnkgZmxhdCBsaXN0QmluZGluZyBmb3IgdGhlIGNyZWF0aW9uLCB0byBhdm9pZCBhZGRpbmcgdGhlIG5ldyBjb250ZXh0IGluIHRoZSB0YWJsZSAod2UgZG9uJ3Qgd2FudCB0byBkaXNwbGF5IGl0IHVudGlsIGl0J3Mgc2F2ZWQpXG5cdFx0XHRcdGNvbnN0IG1vZGVsID0gbGlzdEJpbmRpbmcuZ2V0TW9kZWwoKTtcblx0XHRcdFx0Y29uc3QgbWV0YU1vZGVsID0gbW9kZWwuZ2V0TWV0YU1vZGVsKCk7XG5cdFx0XHRcdGxpc3RCaW5kaW5nRm9yQ3JlYXRpb24gPSBtb2RlbC5iaW5kTGlzdChsaXN0QmluZGluZy5nZXRQYXRoKCksIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHtcblx0XHRcdFx0XHQkJGdyb3VwSWQ6IGxpc3RCaW5kaW5nLmdldEdyb3VwSWQoKSxcblx0XHRcdFx0XHQkJHVwZGF0ZUdyb3VwSWQ6IGxpc3RCaW5kaW5nLmdldFVwZGF0ZUdyb3VwSWQoKVxuXHRcdFx0XHR9KTtcblxuXHRcdFx0XHQvLyBBZGQgdGhlIHBhcmVudCBwYXRoIGluIHRoZSBpbml0aWFsIGRhdGEgaWYgYSBwYXJlbnQgaXMgcHJvdmlkZWRcblx0XHRcdFx0aWYgKG9wdGlvbnMucGFyZW50Q29udGV4dCkge1xuXHRcdFx0XHRcdGNvbnN0IG9iamVjdFBhdGggPSBNZXRhTW9kZWxDb252ZXJ0ZXIuZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzKG1ldGFNb2RlbC5nZXRNZXRhQ29udGV4dChsaXN0QmluZGluZy5nZXRQYXRoKCkpKTtcblx0XHRcdFx0XHRjb25zdCBoaWVyYXJjaHlRdWFsaWZpZXIgPSAobGlzdEJpbmRpbmcuZ2V0QWdncmVnYXRpb24oKSBhcyB7IGhpZXJhcmNoeVF1YWxpZmllcjogc3RyaW5nIH0pLmhpZXJhcmNoeVF1YWxpZmllcjtcblx0XHRcdFx0XHRjb25zdCBwYXJlbnROYXZpZ2F0aW9uID1cblx0XHRcdFx0XHRcdG9iamVjdFBhdGgudGFyZ2V0RW50aXR5VHlwZS5hbm5vdGF0aW9ucy5BZ2dyZWdhdGlvbj8uW2BSZWN1cnNpdmVIaWVyYXJjaHkjJHtoaWVyYXJjaHlRdWFsaWZpZXJ9YF1cblx0XHRcdFx0XHRcdFx0Py5QYXJlbnROYXZpZ2F0aW9uUHJvcGVydHkudmFsdWU7XG5cdFx0XHRcdFx0aWYgKCFwYXJlbnROYXZpZ2F0aW9uKSB7XG5cdFx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBmaW5kIHBhcmVudCBuYXZpZ2F0aW9uIHByb3BlcnR5IGZvciAke2xpc3RCaW5kaW5nLmdldFBhdGgoKX1gKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Y29uc3QgcGFyZW50QmluZGluZ0RhdGE6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcblx0XHRcdFx0XHRwYXJlbnRCaW5kaW5nRGF0YVtgJHtwYXJlbnROYXZpZ2F0aW9ufUBvZGF0YS5iaW5kYF0gPSBvcHRpb25zLnBhcmVudENvbnRleHQuZ2V0UGF0aCgpLnJlcGxhY2UoL15cXC8vLCBcIlwiKTsgLy8gUmVtb3ZlIGxlYWRpbmcgXCIvXCIgZnJvbSB0aGUgcGF0aFxuXHRcdFx0XHRcdE9iamVjdC5hc3NpZ24oZGF0YUZvckNyZWF0aW9uLCBwYXJlbnRCaW5kaW5nRGF0YSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGxpc3RCaW5kaW5nRm9yQ3JlYXRpb24uY3JlYXRlKGRhdGFGb3JDcmVhdGlvbiwgdHJ1ZSk7XG5cdFx0fSBlbHNlIGlmICh0aGlzLmlzTGlzdEJpbmRpbmdBbmFseXRpY2FsKGxpc3RCaW5kaW5nKSkge1xuXHRcdFx0aWYgKGxpc3RCaW5kaW5nLmlzUmVsYXRpdmUoKSkge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJDcmVhdGluZyBhIG5ldyBkb2N1bWVudCBpbiBhIGFuYWx5dGljYWwgdGFibGUgaXMgc3VwcG9ydGVkIG9ubHkgaW4gYSBMaXN0UmVwb3J0XCIpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Ly8gV2UgdXNlIGEgdGVtcG9yYXJ5IGZsYXQgbGlzdEJpbmRpbmcgZm9yIHRoZSBjcmVhdGlvbiwgdG8gYXZvaWQgYWRkaW5nIHRoZSBuZXcgY29udGV4dCBpbiB0aGUgdGFibGUgKHdlIGRvbid0IHdhbnQgdG8gZGlzcGxheSBpdCB1bnRpbCBpdCdzIHNhdmVkKVxuXHRcdFx0XHRjb25zdCBtb2RlbCA9IGxpc3RCaW5kaW5nLmdldE1vZGVsKCk7XG5cdFx0XHRcdGNvbnN0IGxpc3RCaW5kaW5nRm9yQ3JlYXRpb24gPSBtb2RlbC5iaW5kTGlzdChsaXN0QmluZGluZy5nZXRQYXRoKCksIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHtcblx0XHRcdFx0XHQkJGdyb3VwSWQ6IGxpc3RCaW5kaW5nLmdldEdyb3VwSWQoKSxcblx0XHRcdFx0XHQkJHVwZGF0ZUdyb3VwSWQ6IGxpc3RCaW5kaW5nLmdldFVwZGF0ZUdyb3VwSWQoKVxuXHRcdFx0XHR9KTtcblx0XHRcdFx0cmV0dXJuIGxpc3RCaW5kaW5nRm9yQ3JlYXRpb24uY3JlYXRlKGRhdGFGb3JDcmVhdGlvbiwgdHJ1ZSk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBsaXN0QmluZGluZy5jcmVhdGUoZGF0YUZvckNyZWF0aW9uLCB0cnVlLCBvcHRpb25zLmNyZWF0ZUF0RW5kLCBvcHRpb25zLmNyZWF0ZUluYWN0aXZlKTtcblx0XHR9XG5cdH1cblxuXHRnZXRDcmVhdGlvblBhcmFtZXRlcnMobGlzdEJpbmRpbmc6IE9EYXRhTGlzdEJpbmRpbmcsIGNyZWF0ZURhdGE6IG9iamVjdCB8IHVuZGVmaW5lZCwgYXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQpOiBzdHJpbmdbXSB7XG5cdFx0Y29uc3QgbWV0YU1vZGVsID0gbGlzdEJpbmRpbmcuZ2V0TW9kZWwoKS5nZXRNZXRhTW9kZWwoKTtcblx0XHRjb25zdCBtZXRhUGF0aCA9IG1ldGFNb2RlbC5nZXRNZXRhUGF0aChsaXN0QmluZGluZy5nZXRIZWFkZXJDb250ZXh0KCkhLmdldFBhdGgoKSk7XG5cblx0XHRjb25zdCBub25Db21wdXRlZFZpc2libGVGaWVsZHMgPSBnZXRDcmVhdGVQb3B1cEZpZWxkcyhtZXRhTW9kZWwsIG1ldGFQYXRoLCBhcHBDb21wb25lbnQpO1xuXHRcdC8vIERvIG5vdCBjb25zaWRlciBmaWVsZHMgZm9yIHdoaWNoIHdlIHByb3ZpZGUgc29tZSBpbml0aWFsIGRhdGFcblx0XHRyZXR1cm4gbm9uQ29tcHV0ZWRWaXNpYmxlRmllbGRzLmZpbHRlcigoZmllbGROYW1lOiBzdHJpbmcpID0+IHtcblx0XHRcdHJldHVybiAhKGZpZWxkTmFtZSBpbiAoY3JlYXRlRGF0YSA/PyB7fSkpO1xuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIENyZWF0ZXMgYSBuZXcgZG9jdW1lbnQuXG5cdCAqIEBwYXJhbSBtYWluTGlzdEJpbmRpbmcgT0RhdGEgVjQgTGlzdEJpbmRpbmcgb2JqZWN0XG5cdCAqIEBwYXJhbSBbaW5QYXJhbWV0ZXJzXSBPcHRpb25hbCwgY2FuIGNvbnRhaW4gdGhlIGZvbGxvd2luZyBhdHRyaWJ1dGVzOlxuXHQgKiBAcGFyYW0gW2luUGFyYW1ldGVycy5kYXRhXSBBIG1hcCBvZiBkYXRhIHRoYXQgc2hvdWxkIGJlIHNlbnQgd2l0aGluIHRoZSBQT1NUXG5cdCAqIEBwYXJhbSBbaW5QYXJhbWV0ZXJzLmJ1c3lNb2RlXSBHbG9iYWwgKGRlZmF1bHQpLCBMb2NhbCwgTm9uZSBUT0RPOiB0byBiZSByZWZhY3RvcmVkXG5cdCAqIEBwYXJhbSBbaW5QYXJhbWV0ZXJzLmJ1c3lJZF0gSUQgb2YgdGhlIGxvY2FsIGJ1c3kgaW5kaWNhdG9yXG5cdCAqIEBwYXJhbSBbaW5QYXJhbWV0ZXJzLmtlZXBUcmFuc2llbnRDb250ZXh0T25GYWlsZWRdIElmIHNldCwgdGhlIGNvbnRleHQgc3RheXMgaW4gdGhlIGxpc3QgaWYgdGhlIFBPU1QgZmFpbGVkIGFuZCBQT1NUIHdpbGwgYmUgcmVwZWF0ZWQgd2l0aCB0aGUgbmV4dCBjaGFuZ2Vcblx0ICogQHBhcmFtIFtpblBhcmFtZXRlcnMuaW5hY3RpdmVdIElmIHNldCwgdGhlIGNvbnRleHQgaXMgc2V0IGFzIGluYWN0aXZlIGZvciBlbXB0eSByb3dzXG5cdCAqIEBwYXJhbSBbaW5QYXJhbWV0ZXJzLnNraXBQYXJhbWV0ZXJEaWFsb2ddIFNraXBzIHRoZSBhY3Rpb24gcGFyYW1ldGVyIGRpYWxvZ1xuXHQgKiBAcGFyYW0gW2luUGFyYW1ldGVycy5yZXF1ZXN0QXRMZWFzdF0gVGhlIHBhcmVudCBjb250cm9sICh2aWV3KSBmb3IgdGhlIGNyZWF0aW9uXG5cdCAqIEBwYXJhbSBhcHBDb21wb25lbnQgVGhlIGFwcCBjb21wb25lbnRcblx0ICogQHBhcmFtIHJlc291cmNlTW9kZWwgVGhlIHJlc291cmNlIG1vZGVsXG5cdCAqIEBwYXJhbSBtZXNzYWdlSGFuZGxlciBUaGUgbWVzc2FnZSBoYW5kbGVyIGV4dGVuc2lvblxuXHQgKiBAcGFyYW0gZnJvbUNvcHlQYXN0ZSBUcnVlIGlmIHRoZSBjcmVhdGlvbiBoYXMgYmVlbiB0cmlnZ2VyZWQgYnkgYSBwYXN0ZSBhY3Rpb25cblx0ICogQHJldHVybnMgUHJvbWlzZSByZXNvbHZlcyB3aXRoIG5ldyBiaW5kaW5nIGNvbnRleHRcblx0ICogQGZpbmFsXG5cdCAqL1xuXHRhc3luYyBjcmVhdGVEb2N1bWVudChcblx0XHRtYWluTGlzdEJpbmRpbmc6IE9EYXRhTGlzdEJpbmRpbmcsXG5cdFx0aW5QYXJhbWV0ZXJzOiBDcmVhdGVQYXJhbWV0ZXJzIHwgdW5kZWZpbmVkLFxuXHRcdGFwcENvbXBvbmVudDogQXBwQ29tcG9uZW50LFxuXHRcdHJlc291cmNlTW9kZWw6IFJlc291cmNlTW9kZWwsXG5cdFx0bWVzc2FnZUhhbmRsZXI6IE1lc3NhZ2VIYW5kbGVyLFxuXHRcdGZyb21Db3B5UGFzdGU6IGJvb2xlYW5cblx0KTogUHJvbWlzZTxPRGF0YVY0Q29udGV4dD4ge1xuXHRcdGxldCBuZXdEb2N1bWVudENvbnRleHQ6IE9EYXRhVjRDb250ZXh0IHwgdW5kZWZpbmVkO1xuXHRcdGNvbnN0IHBhcmFtZXRlcnMgPSBnZXRQYXJhbWV0ZXJzKGluUGFyYW1ldGVycyk7XG5cdFx0aWYgKCFtYWluTGlzdEJpbmRpbmcpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIkJpbmRpbmcgcmVxdWlyZWQgZm9yIG5ldyBkb2N1bWVudCBjcmVhdGlvblwiKTtcblx0XHR9XG5cdFx0Y29uc3QgcHJvZ3JhbW1pbmdNb2RlbCA9IHRoaXMuZ2V0UHJvZ3JhbW1pbmdNb2RlbChtYWluTGlzdEJpbmRpbmcpO1xuXHRcdGlmIChwcm9ncmFtbWluZ01vZGVsICE9PSBQcm9ncmFtbWluZ01vZGVsLkRyYWZ0ICYmIHByb2dyYW1taW5nTW9kZWwgIT09IFByb2dyYW1taW5nTW9kZWwuU3RpY2t5KSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJDcmVhdGUgZG9jdW1lbnQgb25seSBhbGxvd2VkIGZvciBkcmFmdCBvciBzdGlja3kgc2Vzc2lvbiBzdXBwb3J0ZWQgc2VydmljZXNcIik7XG5cdFx0fVxuXHRcdGNvbnN0IGJ1c3lQYXRoID0gdGhpcy5nZXRCdXN5UGF0aChwYXJhbWV0ZXJzKTtcblx0XHRwYXJhbWV0ZXJzLmJlZm9yZUNyZWF0ZUNhbGxCYWNrID0gZnJvbUNvcHlQYXN0ZSA/IHVuZGVmaW5lZCA6IHBhcmFtZXRlcnMuYmVmb3JlQ3JlYXRlQ2FsbEJhY2s7XG5cdFx0aWYgKCFpblBhcmFtZXRlcnM/LmluYWN0aXZlKSB7XG5cdFx0XHR0aGlzLmJ1c3lMb2NrKGFwcENvbXBvbmVudCwgYnVzeVBhdGgpO1xuXHRcdH1cblx0XHRjb25zdCBtZXNzYWdlSGFuZGxpbmdLZXkgPSBtZXNzYWdlSGFuZGxlci5yZWdpc3RlclRvSG9sZE1lc3NhZ2VzKCk7XG5cdFx0dHJ5IHtcblx0XHRcdG5ld0RvY3VtZW50Q29udGV4dCA9IGF3YWl0IHRoaXMucGVyZm9ybUNyZWF0aW9uKFxuXHRcdFx0XHRtYWluTGlzdEJpbmRpbmcsXG5cdFx0XHRcdHBhcmFtZXRlcnMsXG5cdFx0XHRcdGFwcENvbXBvbmVudCxcblx0XHRcdFx0bWVzc2FnZUhhbmRsZXIsXG5cdFx0XHRcdHJlc291cmNlTW9kZWwsXG5cdFx0XHRcdGZyb21Db3B5UGFzdGVcblx0XHRcdCk7XG5cdFx0XHQvLyBMb2FkIHRoZSBwcm9wZXJ0aWVzIHRoYXQgYXJlIHBhcnQgb2YgdGhlICdyZXF1ZXN0QXRMZWFzdCcgYW5ub3RhdGlvbiBmcm9tIHRoZSB0YWJsZSAoaWYgYW55KVxuXHRcdFx0Ly8gSW4gY2FzZSBvZiBjcmVhdGVJblBsYWNlIGZvciBhIFRyZWVUYWJsZSwgdGhlIG5ldyBjb250ZXh0IG1pZ2h0IG5vdCBiZSBwYXJ0IG9mIHRoZSBsaXN0QmluZGluZyAoYmVjYXVzZSBvZiBmaWx0ZXJzKSAtLT4gd2UgZG9uJ3QgcmVxdWVzdCB0aGUgcHJvcGVydGllc1xuXHRcdFx0aWYgKG5ld0RvY3VtZW50Q29udGV4dD8uZ2V0QmluZGluZygpICE9PSB1bmRlZmluZWQgJiYgcGFyYW1ldGVycy5yZXF1ZXN0QXRMZWFzdCAmJiBwYXJhbWV0ZXJzLnJlcXVlc3RBdExlYXN0Lmxlbmd0aCA+IDApIHtcblx0XHRcdFx0YXdhaXQgbmV3RG9jdW1lbnRDb250ZXh0LnJlcXVlc3RQcm9wZXJ0eShwYXJhbWV0ZXJzLnJlcXVlc3RBdExlYXN0KTtcblx0XHRcdH1cblx0XHRcdGF3YWl0IG1lc3NhZ2VIYW5kbGVyLnNob3dNZXNzYWdlRGlhbG9nKHsgY29udHJvbDogcGFyYW1ldGVycy5wYXJlbnRDb250cm9sLCB1bkhvbGRLZXk6IG1lc3NhZ2VIYW5kbGluZ0tleSB9KTtcblx0XHRcdHJldHVybiBuZXdEb2N1bWVudENvbnRleHQhO1xuXHRcdH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG5cdFx0XHQvLyBUT0RPOiBjdXJyZW50bHksIHRoZSBvbmx5IGVycm9ycyBoYW5kbGVkIGhlcmUgYXJlIHJhaXNlZCBhcyBzdHJpbmcgLSBzaG91bGQgYmUgY2hhbmdlZCB0byBFcnJvciBvYmplY3RzXG5cdFx0XHRhd2FpdCBtZXNzYWdlSGFuZGxlci5zaG93TWVzc2FnZURpYWxvZyh7IGNvbnRyb2w6IHBhcmFtZXRlcnMucGFyZW50Q29udHJvbCwgdW5Ib2xkS2V5OiBtZXNzYWdlSGFuZGxpbmdLZXkgfSk7XG5cdFx0XHRpZiAoXG5cdFx0XHRcdChlcnJvciA9PT0gRkVMaWJyYXJ5LkNvbnN0YW50cy5BY3Rpb25FeGVjdXRpb25GYWlsZWQgfHwgZXJyb3IgPT09IEZFTGlicmFyeS5Db25zdGFudHMuQ2FuY2VsQWN0aW9uRGlhbG9nKSAmJlxuXHRcdFx0XHRuZXdEb2N1bWVudENvbnRleHQ/LmlzVHJhbnNpZW50KClcblx0XHRcdCkge1xuXHRcdFx0XHQvLyBUaGlzIGlzIGEgd29ya2Fyb3VuZCBzdWdnZXN0ZWQgYnkgbW9kZWwgYXMgQ29udGV4dC5kZWxldGUgcmVzdWx0cyBpbiBhbiBlcnJvclxuXHRcdFx0XHQvLyBUT0RPOiByZW1vdmUgdGhlICRkaXJlY3Qgb25jZSBtb2RlbCByZXNvbHZlcyB0aGlzIGlzc3VlXG5cdFx0XHRcdC8vIHRoaXMgbGluZSBzaG93cyB0aGUgZXhwZWN0ZWQgY29uc29sZSBlcnJvciBVbmNhdWdodCAoaW4gcHJvbWlzZSkgRXJyb3I6IFJlcXVlc3QgY2FuY2VsZWQ6IFBPU1QgVHJhdmVsOyBncm91cDogc3VibWl0TGF0ZXJcblx0XHRcdFx0bmV3RG9jdW1lbnRDb250ZXh0LmRlbGV0ZShcIiRkaXJlY3RcIik7XG5cdFx0XHR9XG5cdFx0XHR0aHJvdyBlcnJvcjtcblx0XHR9IGZpbmFsbHkge1xuXHRcdFx0aWYgKCFpblBhcmFtZXRlcnM/LmluYWN0aXZlKSB7XG5cdFx0XHRcdHRoaXMuYnVzeVVubG9jayhhcHBDb21wb25lbnQsIGJ1c3lQYXRoKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRwcml2YXRlIGdldEJ1c3lQYXRoKG1QYXJhbWV0ZXJzOiBDcmVhdGVQYXJhbWV0ZXJzKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gbVBhcmFtZXRlcnMuYnVzeU1vZGUgPT09IFwiTG9jYWxcIiA/IGAvYnVzeUxvY2FsLyR7bVBhcmFtZXRlcnMuYnVzeUlkfWAgOiBcIi9idXN5XCI7XG5cdH1cblxuXHQvKipcblx0ICogQ3JlYXRlcyBhIG5ldyBkb2N1bWVudC5cblx0ICogQHBhcmFtIG1haW5MaXN0QmluZGluZyBPRGF0YSBWNCBMaXN0QmluZGluZyBvYmplY3QuXG5cdCAqIEBwYXJhbSBwYXJhbWV0ZXJzIENvbnRhaW5zIHRoZSBmb2xsb3dpbmcgYXR0cmlidXRlc1xuXHQgKiBAcGFyYW0gcGFyYW1ldGVycy5kYXRhIEEgbWFwIG9mIGRhdGEgdGhhdCBzaG91bGQgYmUgc2VudCB3aXRoaW4gdGhlIFBPU1Rcblx0ICogQHBhcmFtIHBhcmFtZXRlcnMuYnVzeU1vZGUgR2xvYmFsIChkZWZhdWx0KSwgTG9jYWwsIE5vbmVcblx0ICogQHBhcmFtIHBhcmFtZXRlcnMuYnVzeUlkIElEIG9mIHRoZSBsb2NhbCBidXN5IGluZGljYXRvclxuXHQgKiBAcGFyYW0gcGFyYW1ldGVycy5rZWVwVHJhbnNpZW50Q29udGV4dE9uRmFpbGVkIElmIHNldCwgdGhlIGNvbnRleHQgc3RheXMgaW4gdGhlIGxpc3QgaWYgdGhlIFBPU1QgZmFpbGVkIGFuZCBQT1NUIHdpbGwgYmUgcmVwZWF0ZWQgd2l0aCB0aGUgbmV4dCBjaGFuZ2Vcblx0ICogQHBhcmFtIHBhcmFtZXRlcnMucGFyZW50Q29udHJvbFxuXHQgKiBAcGFyYW0gcGFyYW1ldGVycy5pbmFjdGl2ZSBJZiBzZXQsIHRoZSBjb250ZXh0IGlzIHNldCBhcyBpbmFjdGl2ZSBmb3IgZW1wdHkgcm93c1xuXHQgKiBAcGFyYW0gcGFyYW1ldGVycy5iZWZvcmVDcmVhdGVDYWxsQmFjayBDYWxsYmFjayB0byBiZSBjYWxsZWQgYmVmb3JlIHRoZSBjcmVhdGlvblxuXHQgKiBAcGFyYW0gcGFyYW1ldGVycy5za2lwUGFyYW1ldGVyRGlhbG9nIFNraXBzIHRoZSBhY3Rpb24gcGFyYW1ldGVyIGRpYWxvZ1xuXHQgKiBAcGFyYW0gcGFyYW1ldGVycy5jcmVhdGVBdEVuZCBDcmVhdGUgdGhlIGNvbnRleHQgYXQgdGhlIGVuZCBvZiB0aGUgbGlzdCAoaWdub3JlZCBpbiBjYXNlIG9mIGEgaGllcmFyY2h5KS5cblx0ICogQHBhcmFtIHBhcmFtZXRlcnMuY3JlYXRlSW5hY3RpdmUgQ3JlYXRlIHRoZSBjb250ZXh0IGFzIGluYWN0aXZlIChpZ25vcmVkIGluIGNhc2Ugb2YgYSBoaWVyYXJjaHkpLlxuXHQgKiBAcGFyYW0gcGFyYW1ldGVycy5wYXJlbnRDb250ZXh0IENyZWF0ZSB0aGUgY29udGV4dCBhcyBhIGNoaWxkIG9mIHRoaXMgY29udGV4dCAob25seSB1c2VkIGluIGNhc2Ugb2YgYSBoaWVyYXJjaHkpLlxuXHQgKiBAcmV0dXJucyBQcm9taXNlIHJlc29sdmVzIHdpdGggbmV3IGJpbmRpbmcgY29udGV4dFxuXHQgKi9cblx0cHJpdmF0ZSBhc3luYyBjcmVhdGVEb2N1bWVudENvbnRleHQobWFpbkxpc3RCaW5kaW5nOiBPRGF0YUxpc3RCaW5kaW5nLCBwYXJhbWV0ZXJzOiBDcmVhdGVQYXJhbWV0ZXJzKTogUHJvbWlzZTxPRGF0YVY0Q29udGV4dD4ge1xuXHRcdGlmIChwYXJhbWV0ZXJzLmJlZm9yZUNyZWF0ZUNhbGxCYWNrKSB7XG5cdFx0XHQvL2JlZm9yZUNyZWF0ZUNhbGxCYWNrIGV4cGVjdHMgY3JlYXRlUGFyYW1ldGVycyBvZiB0eXBlIGFueVtdXG5cdFx0XHRjb25zdCBjcmVhdGVQYXJhbWV0ZXJzID0gcGFyYW1ldGVycy5kYXRhID8gT2JqZWN0LmVudHJpZXMocGFyYW1ldGVycy5kYXRhKS5tYXAoKFtrZXksIHZhbHVlXSkgPT4gKHsgW2tleV06IHZhbHVlIH0pKSA6IFtdO1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0YXdhaXQgdG9FUzZQcm9taXNlKFxuXHRcdFx0XHRcdHBhcmFtZXRlcnMuYmVmb3JlQ3JlYXRlQ2FsbEJhY2soe1xuXHRcdFx0XHRcdFx0Y29udGV4dFBhdGg6IG1haW5MaXN0QmluZGluZyAmJiBtYWluTGlzdEJpbmRpbmcuZ2V0UGF0aCgpLFxuXHRcdFx0XHRcdFx0Y3JlYXRlUGFyYW1ldGVyczogY3JlYXRlUGFyYW1ldGVyc1xuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdCk7XG5cdFx0XHR9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuXHRcdFx0XHRMb2cuZXJyb3IoZXJyb3IgYXMgc3RyaW5nKTtcblx0XHRcdFx0dGhyb3cgRkVMaWJyYXJ5LkNvbnN0YW50cy5PbkJlZm9yZUNyZWF0ZUZhaWxlZDtcblx0XHRcdH1cblx0XHRcdHBhcmFtZXRlcnMuZGF0YSA9IGNyZWF0ZVBhcmFtZXRlcnMucmVkdWNlKChyZXN1bHQsIGN1cnJlbnRPYmplY3QpID0+IHtcblx0XHRcdFx0cmV0dXJuIHsgLi4ucmVzdWx0LCAuLi5jdXJyZW50T2JqZWN0IH07XG5cdFx0XHR9LCB7fSk7XG5cdFx0fVxuXHRcdGNvbnN0IGNyZWF0ZVByb21pc2UgPSB0aGlzLmNyZWF0ZUNvbnRleHQobWFpbkxpc3RCaW5kaW5nLCBwYXJhbWV0ZXJzLmRhdGEsIHtcblx0XHRcdGNyZWF0ZUF0RW5kOiAhIXBhcmFtZXRlcnMuY3JlYXRlQXRFbmQsXG5cdFx0XHRjcmVhdGVJbmFjdGl2ZTogISFwYXJhbWV0ZXJzLmluYWN0aXZlLFxuXHRcdFx0cGFyZW50Q29udGV4dDogcGFyYW1ldGVycy5wYXJlbnRDb250ZXh0XG5cdFx0fSk7XG5cdFx0aWYgKG1haW5MaXN0QmluZGluZy5nZXRVcGRhdGVHcm91cElkKCkgPT09IENvbW1vblV0aWxzLklOTElORUVESVRfVVBEQVRFR1JPVVBJRCkge1xuXHRcdFx0bWFpbkxpc3RCaW5kaW5nLmdldE1vZGVsKCkuc3VibWl0QmF0Y2goQ29tbW9uVXRpbHMuSU5MSU5FRURJVF9VUERBVEVHUk9VUElEKTtcblx0XHR9XG5cdFx0cmV0dXJuIGNyZWF0ZVByb21pc2U7XG5cdH1cblxuXHQvKipcblx0ICogQ3JlYXRlcyBhIG5ldyBkb2N1bWVudCBlaXRoZXIgdmlhIG5ldyBBY3Rpb24gb3Igc3RhbmRhcmQgUE9TVCBjcmVhdGUuXG5cdCAqIEBwYXJhbSBtYWluTGlzdEJpbmRpbmcgT0RhdGEgVjQgTGlzdEJpbmRpbmcgb2JqZWN0XG5cdCAqIEBwYXJhbSBwYXJhbWV0ZXJzIENvbnRhaW5zIHRoZSBmb2xsb3dpbmcgYXR0cmlidXRlc1xuXHQgKiBAcGFyYW0gcGFyYW1ldGVycy5kYXRhIEEgbWFwIG9mIGRhdGEgdGhhdCBzaG91bGQgYmUgc2VudCB3aXRoaW4gdGhlIFBPU1Rcblx0ICogQHBhcmFtIHBhcmFtZXRlcnMuYnVzeU1vZGUgR2xvYmFsIChkZWZhdWx0KSwgTG9jYWwsIE5vbmVcblx0ICogQHBhcmFtIHBhcmFtZXRlcnMuYnVzeUlkIElEIG9mIHRoZSBsb2NhbCBidXN5IGluZGljYXRvclxuXHQgKiBAcGFyYW0gcGFyYW1ldGVycy5rZWVwVHJhbnNpZW50Q29udGV4dE9uRmFpbGVkIElmIHNldCwgdGhlIGNvbnRleHQgc3RheXMgaW4gdGhlIGxpc3QgaWYgdGhlIFBPU1QgZmFpbGVkIGFuZCBQT1NUIHdpbGwgYmUgcmVwZWF0ZWQgd2l0aCB0aGUgbmV4dCBjaGFuZ2Vcblx0ICogQHBhcmFtIHBhcmFtZXRlcnMucGFyZW50Q29udHJvbFxuXHQgKiBAcGFyYW0gcGFyYW1ldGVycy5pbmFjdGl2ZSBJZiBzZXQsIHRoZSBjb250ZXh0IGlzIHNldCBhcyBpbmFjdGl2ZSBmb3IgZW1wdHkgcm93c1xuXHQgKiBAcGFyYW0gcGFyYW1ldGVycy5iZWZvcmVDcmVhdGVDYWxsQmFjayBDYWxsYmFjayB0byBiZSBjYWxsZWQgYmVmb3JlIHRoZSBjcmVhdGlvblxuXHQgKiBAcGFyYW0gcGFyYW1ldGVycy5za2lwUGFyYW1ldGVyRGlhbG9nIFNraXBzIHRoZSBhY3Rpb24gcGFyYW1ldGVyIGRpYWxvZ1xuXHQgKiBAcGFyYW0gcGFyYW1ldGVycy5jcmVhdGVBdEVuZCBDcmVhdGUgdGhlIGNvbnRleHQgYXQgdGhlIGVuZCBvZiB0aGUgbGlzdCAoaWdub3JlZCBpbiBjYXNlIG9mIGEgaGllcmFyY2h5KS5cblx0ICogQHBhcmFtIHBhcmFtZXRlcnMuY3JlYXRlSW5hY3RpdmUgQ3JlYXRlIHRoZSBjb250ZXh0IGFzIGluYWN0aXZlIChpZ25vcmVkIGluIGNhc2Ugb2YgYSBoaWVyYXJjaHkpLlxuXHQgKiBAcGFyYW0gcGFyYW1ldGVycy5wYXJlbnRDb250ZXh0IENyZWF0ZSB0aGUgY29udGV4dCBhcyBhIGNoaWxkIG9mIHRoaXMgY29udGV4dCAob25seSB1c2VkIGluIGNhc2Ugb2YgYSBoaWVyYXJjaHkpLlxuXHQgKiBAcGFyYW0gYXBwQ29tcG9uZW50IFRoZSBhcHAgY29tcG9uZW50XG5cdCAqIEBwYXJhbSBtZXNzYWdlSGFuZGxlciBUaGUgbWVzc2FnZSBoYW5kbGVyIGV4dGVuc2lvblxuXHQgKiBAcGFyYW0gcmVzb3VyY2VNb2RlbFxuXHQgKiBAcGFyYW0gZnJvbUNvcHlQYXN0ZSBUcnVlIGlmIHRoZSBjcmVhdGlvbiBoYXMgYmVlbiB0cmlnZ2VyZWQgYnkgYSBwYXN0ZSBhY3Rpb25cblx0ICogQHJldHVybnMgUHJvbWlzZSByZXNvbHZlcyB3aXRoIG5ldyBiaW5kaW5nIGNvbnRleHRcblx0ICovXG5cdHByaXZhdGUgYXN5bmMgcGVyZm9ybUNyZWF0aW9uKFxuXHRcdG1haW5MaXN0QmluZGluZzogT0RhdGFMaXN0QmluZGluZyxcblx0XHRwYXJhbWV0ZXJzOiBDcmVhdGVQYXJhbWV0ZXJzLFxuXHRcdGFwcENvbXBvbmVudDogQXBwQ29tcG9uZW50LFxuXHRcdG1lc3NhZ2VIYW5kbGVyOiBNZXNzYWdlSGFuZGxlcixcblx0XHRyZXNvdXJjZU1vZGVsOiBSZXNvdXJjZU1vZGVsLFxuXHRcdGZyb21Db3B5UGFzdGU6IGJvb2xlYW5cblx0KTogUHJvbWlzZTxPRGF0YVY0Q29udGV4dCB8IHVuZGVmaW5lZD4ge1xuXHRcdGNvbnN0IG1ldGFNb2RlbCA9IG1haW5MaXN0QmluZGluZy5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpO1xuXHRcdGNvbnN0IG1ldGFQYXRoID0gbWV0YU1vZGVsLmdldE1ldGFQYXRoKG1haW5MaXN0QmluZGluZy5nZXRIZWFkZXJDb250ZXh0KCkhLmdldFBhdGgoKSk7XG5cdFx0Y29uc3QgY3JlYXRlSGFzaCA9IGFwcENvbXBvbmVudC5nZXRSb3V0ZXJQcm94eSgpLmdldEhhc2goKTtcblx0XHRjb25zdCBjb21wb25lbnREYXRhID0gYXBwQ29tcG9uZW50LmdldENvbXBvbmVudERhdGEoKTtcblx0XHRjb25zdCBzdGFydHVwUGFyYW1ldGVycyA9IGNvbXBvbmVudERhdGE/LnN0YXJ0dXBQYXJhbWV0ZXJzID8/IHt9O1xuXHRcdGNvbnN0IG5ld0FjdGlvbiA9ICFtYWluTGlzdEJpbmRpbmcuaXNSZWxhdGl2ZSgpXG5cdFx0XHQ/IHRoaXMuX2dldE5ld0FjdGlvbihzdGFydHVwUGFyYW1ldGVycywgY3JlYXRlSGFzaCwgbWV0YU1vZGVsLCBtZXRhUGF0aClcblx0XHRcdDogdW5kZWZpbmVkO1xuXG5cdFx0aWYgKG5ld0FjdGlvbikge1xuXHRcdFx0Y29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5wZXJmb3JtQ3JlYXRpb25XaXRoQWN0aW9uKFxuXHRcdFx0XHRuZXdBY3Rpb24sXG5cdFx0XHRcdG1haW5MaXN0QmluZGluZyxcblx0XHRcdFx0cGFyYW1ldGVycyxcblx0XHRcdFx0YXBwQ29tcG9uZW50LFxuXHRcdFx0XHRyZXNvdXJjZU1vZGVsLFxuXHRcdFx0XHRtZXNzYWdlSGFuZGxlclxuXHRcdFx0KTtcblx0XHRcdGlmIChyZXN1bHQuc3RhdHVzID09PSBcInJlamVjdGVkXCIpIHtcblx0XHRcdFx0dGhyb3cgcmVzdWx0LnJlYXNvbjtcblx0XHRcdH1cblx0XHRcdHJldHVybiByZXN1bHQudmFsdWUucmV0dXJuZWRDb250ZXh0O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5wZXJmb3JtQ3JlYXRpb25XaXRoUE9TVChtYWluTGlzdEJpbmRpbmcsIHBhcmFtZXRlcnMsIGFwcENvbXBvbmVudCwgcmVzb3VyY2VNb2RlbCwgbWVzc2FnZUhhbmRsZXIsIGZyb21Db3B5UGFzdGUpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIGEgZG9jdW1lbnQgd2l0aCBhbiBhY3Rpb24uXG5cdCAqIEBwYXJhbSBhY3Rpb25OYW1lXG5cdCAqIEBwYXJhbSBtYWluTGlzdEJpbmRpbmdcblx0ICogQHBhcmFtIHBhcmFtZXRlcnNcblx0ICogQHBhcmFtIGFwcENvbXBvbmVudFxuXHQgKiBAcGFyYW0gcmVzb3VyY2VNb2RlbFxuXHQgKiBAcGFyYW0gbWVzc2FnZUhhbmRsZXJcblx0ICogQHJldHVybnMgVGhlIGNyZWF0ZWQgY29udGV4dC5cblx0ICovXG5cdHByaXZhdGUgYXN5bmMgcGVyZm9ybUNyZWF0aW9uV2l0aEFjdGlvbihcblx0XHRhY3Rpb25OYW1lOiBzdHJpbmcsXG5cdFx0bWFpbkxpc3RCaW5kaW5nOiBPRGF0YUxpc3RCaW5kaW5nLFxuXHRcdHBhcmFtZXRlcnM6IENyZWF0ZVBhcmFtZXRlcnMsXG5cdFx0YXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQsXG5cdFx0cmVzb3VyY2VNb2RlbDogUmVzb3VyY2VNb2RlbCxcblx0XHRtZXNzYWdlSGFuZGxlcjogTWVzc2FnZUhhbmRsZXJcblx0KTogUHJvbWlzZTxQcm9taXNlU2V0dGxlZFJlc3VsdDxPcGVyYXRpb25SZXN1bHQ+PiB7XG5cdFx0Y29uc3QgaGVhZGVyQ29udGV4dFBhdGggPSBtYWluTGlzdEJpbmRpbmcuZ2V0SGVhZGVyQ29udGV4dCgpIS5nZXRQYXRoKCk7XG5cdFx0Y29uc3QgbWV0YU1vZGVsID0gbWFpbkxpc3RCaW5kaW5nLmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCk7XG5cdFx0Y29uc3QgbWV0YVBhdGggPSBtZXRhTW9kZWwuZ2V0TWV0YVBhdGgoaGVhZGVyQ29udGV4dFBhdGgpO1xuXHRcdGNvbnN0IG1lc3NhZ2VzUGF0aCA9IE1vZGVsSGVscGVyLmdldE1lc3NhZ2VzUGF0aChtZXRhTW9kZWwsIG1ldGFQYXRoKTtcblx0XHRjb25zdCBiaW5kaW5nUGFyYW1ldGVyczogQmluZENvbnRleHRQYXJhbWV0ZXJzID0geyAkJHBhdGNoV2l0aG91dFNpZGVFZmZlY3RzOiB0cnVlLCAkJHVwZGF0ZUdyb3VwSWQ6IFwiJGF1dG9cIiB9O1xuXG5cdFx0Y29uc3Qgc2VsZWN0ZWRQcm9wZXJ0aWVzOiBzdHJpbmdbXSA9IFtdO1xuXHRcdGlmIChtZXNzYWdlc1BhdGgpIHtcblx0XHRcdHNlbGVjdGVkUHJvcGVydGllcy5wdXNoKG1lc3NhZ2VzUGF0aCk7XG5cdFx0fVxuXHRcdGlmICh0aGlzLmdldFByb2dyYW1taW5nTW9kZWwobWFpbkxpc3RCaW5kaW5nKSA9PT0gUHJvZ3JhbW1pbmdNb2RlbC5EcmFmdCkge1xuXHRcdFx0c2VsZWN0ZWRQcm9wZXJ0aWVzLnB1c2goXCJJc0FjdGl2ZUVudGl0eVwiLCBcIkhhc0RyYWZ0RW50aXR5XCIsIFwiSGFzQWN0aXZlRW50aXR5XCIpOyAvLyBOZWVkZWQgZm9yIG91ciBpbnRlcm5hbCBsb2dpYyAoZS5nLiBuYXZpZ2F0aW9uKVxuXHRcdH1cblx0XHRpZiAoc2VsZWN0ZWRQcm9wZXJ0aWVzLmxlbmd0aCA+IDApIHtcblx0XHRcdGJpbmRpbmdQYXJhbWV0ZXJzW1wiJHNlbGVjdFwiXSA9IHNlbGVjdGVkUHJvcGVydGllcy5qb2luKFwiLFwiKTtcblx0XHR9XG5cdFx0Y29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5jYWxsQWN0aW9uKFxuXHRcdFx0YWN0aW9uTmFtZSxcblx0XHRcdHtcblx0XHRcdFx0Y29udGV4dHM6IG1haW5MaXN0QmluZGluZy5nZXRIZWFkZXJDb250ZXh0KCksXG5cdFx0XHRcdHNob3dBY3Rpb25QYXJhbWV0ZXJEaWFsb2c6IHRydWUsXG5cdFx0XHRcdGxhYmVsOiB0aGlzLl9nZXRTcGVjaWZpY0NyZWF0ZUFjdGlvbkRpYWxvZ0xhYmVsKG1ldGFNb2RlbCwgbWV0YVBhdGgsIGFjdGlvbk5hbWUsIHJlc291cmNlTW9kZWwpLFxuXHRcdFx0XHRiaW5kaW5nUGFyYW1ldGVyczogYmluZGluZ1BhcmFtZXRlcnMsXG5cdFx0XHRcdHZpZXc6IHBhcmFtZXRlcnMucGFyZW50Q29udHJvbCxcblx0XHRcdFx0aXNDcmVhdGVBY3Rpb246IHRydWUsXG5cdFx0XHRcdHNraXBQYXJhbWV0ZXJEaWFsb2c6IHBhcmFtZXRlcnMuc2tpcFBhcmFtZXRlckRpYWxvZ1xuXHRcdFx0fSxcblx0XHRcdGFwcENvbXBvbmVudCxcblx0XHRcdG1lc3NhZ2VIYW5kbGVyXG5cdFx0KTtcblx0XHRyZXR1cm4gcmVzdWx0WzBdO1xuXHR9XG5cblx0LyoqXG5cdCAqIENyZWF0ZXMgYSBkb2N1ZW1udCB3aXRoIGEgc3RhbmRhcmQgUE9TVCByZXF1ZXN0LlxuXHQgKiBAcGFyYW0gbWFpbkxpc3RCaW5kaW5nXG5cdCAqIEBwYXJhbSBwYXJhbWV0ZXJzXG5cdCAqIEBwYXJhbSBhcHBDb21wb25lbnRcblx0ICogQHBhcmFtIHJlc291cmNlTW9kZWxcblx0ICogQHBhcmFtIG1lc3NhZ2VIYW5kbGVyXG5cdCAqIEBwYXJhbSBmcm9tQ29weVBhc3RlXG5cdCAqIEByZXR1cm5zIFRoZSBjcmVhdGVkIGNvbnRleHQuXG5cdCAqL1xuXHRwcml2YXRlIGFzeW5jIHBlcmZvcm1DcmVhdGlvbldpdGhQT1NUKFxuXHRcdG1haW5MaXN0QmluZGluZzogT0RhdGFMaXN0QmluZGluZyxcblx0XHRwYXJhbWV0ZXJzOiBDcmVhdGVQYXJhbWV0ZXJzLFxuXHRcdGFwcENvbXBvbmVudDogQXBwQ29tcG9uZW50LFxuXHRcdHJlc291cmNlTW9kZWw6IFJlc291cmNlTW9kZWwsXG5cdFx0bWVzc2FnZUhhbmRsZXI6IE1lc3NhZ2VIYW5kbGVyLFxuXHRcdGZyb21Db3B5UGFzdGU6IGJvb2xlYW5cblx0KTogUHJvbWlzZTxPRGF0YVY0Q29udGV4dCB8IHVuZGVmaW5lZD4ge1xuXHRcdHRyeSB7XG5cdFx0XHRsZXQgbmV3RG9jdW1lbnRDb250ZXh0OiBPRGF0YVY0Q29udGV4dCB8IHVuZGVmaW5lZDtcblx0XHRcdGNvbnN0IGluaXRpYWxEYXRhID0gcGFyYW1ldGVycy5kYXRhO1xuXHRcdFx0aWYgKCFmcm9tQ29weVBhc3RlKSB7XG5cdFx0XHRcdGNvbnN0IGRlZmF1bHRWYWx1ZUZ1bmN0aW9uRGF0YSA9IGF3YWl0IHRoaXMuZ2V0RGF0YUZyb21EZWZhdWx0VmFsdWVGdW5jdGlvbihtYWluTGlzdEJpbmRpbmcpO1xuXHRcdFx0XHRwYXJhbWV0ZXJzLmRhdGEgPSBPYmplY3QuYXNzaWduKHt9LCBkZWZhdWx0VmFsdWVGdW5jdGlvbkRhdGEsIHBhcmFtZXRlcnMuZGF0YSk7XG5cdFx0XHR9XG5cdFx0XHRpZiAocGFyYW1ldGVycy5kYXRhKSB7XG5cdFx0XHRcdGRlbGV0ZSBwYXJhbWV0ZXJzLmRhdGFbXCJAb2RhdGEuY29udGV4dFwiXTtcblx0XHRcdH1cblxuXHRcdFx0Y29uc3QgY2FuSGF2ZURpYWxvZyA9IHBhcmFtZXRlcnMuY3JlYXRpb25Nb2RlICE9PSBDcmVhdGlvbk1vZGUuQ3JlYXRpb25Sb3cgJiYgcGFyYW1ldGVycy5jcmVhdGlvbk1vZGUgIT09IENyZWF0aW9uTW9kZS5JbmxpbmU7XG5cdFx0XHRjb25zdCBjcmVhdGlvbkRpYWxvZ0ZpZWxkcyA9IGNhbkhhdmVEaWFsb2cgPyB0aGlzLmdldENyZWF0aW9uUGFyYW1ldGVycyhtYWluTGlzdEJpbmRpbmcsIGluaXRpYWxEYXRhLCBhcHBDb21wb25lbnQpIDogW107XG5cdFx0XHRpZiAocGFyYW1ldGVycy5jcmVhdGlvbk1vZGUgPT09IENyZWF0aW9uTW9kZS5DcmVhdGlvbkRpYWxvZykge1xuXHRcdFx0XHRwYXJhbWV0ZXJzLmNyZWF0aW9uRGlhbG9nRmllbGRzPy5mb3JFYWNoKChmaWVsZE5hbWUpID0+IHtcblx0XHRcdFx0XHRpZiAoIWNyZWF0aW9uRGlhbG9nRmllbGRzLmluY2x1ZGVzKGZpZWxkTmFtZSkpIHtcblx0XHRcdFx0XHRcdGNyZWF0aW9uRGlhbG9nRmllbGRzLnB1c2goZmllbGROYW1lKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXG5cdFx0XHRcdGlmIChjcmVhdGlvbkRpYWxvZ0ZpZWxkcy5sZW5ndGggPT09IDApIHtcblx0XHRcdFx0XHQvLyBJbiBDcmVhdGlvbkRpYWxvZyBtb2RlLCB0aGUgZGlhbG9nIGlzIG1hbmRhdG9yeVxuXHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcihcIk5vIGZpZWxkcyBhdmFpbGFibGUgZm9yIHRoZSBjcmVhdGlvbiBkaWFsb2dcIik7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0aWYgKGNyZWF0aW9uRGlhbG9nRmllbGRzLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0bmV3RG9jdW1lbnRDb250ZXh0ID0gYXdhaXQgdGhpcy5jcmVhdGVXaXRoRGlhbG9nKFxuXHRcdFx0XHRcdG1haW5MaXN0QmluZGluZyxcblx0XHRcdFx0XHRjcmVhdGlvbkRpYWxvZ0ZpZWxkcyxcblx0XHRcdFx0XHRwYXJhbWV0ZXJzLFxuXHRcdFx0XHRcdGFwcENvbXBvbmVudCxcblx0XHRcdFx0XHRyZXNvdXJjZU1vZGVsLFxuXHRcdFx0XHRcdG1lc3NhZ2VIYW5kbGVyXG5cdFx0XHRcdCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRuZXdEb2N1bWVudENvbnRleHQgPSBhd2FpdCB0aGlzLmNyZWF0ZURvY3VtZW50Q29udGV4dChtYWluTGlzdEJpbmRpbmcsIHBhcmFtZXRlcnMpO1xuXHRcdFx0XHRpZiAoIXBhcmFtZXRlcnMuaW5hY3RpdmUpIHtcblx0XHRcdFx0XHRhd2FpdCB0aGlzLndhaXRGb3JDcmVhdGVDb21wbGV0aW9uKG5ld0RvY3VtZW50Q29udGV4dCwgcGFyYW1ldGVycy5rZWVwVHJhbnNpZW50Q29udGV4dE9uRmFpbGVkID09PSB0cnVlKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIG5ld0RvY3VtZW50Q29udGV4dDtcblx0XHR9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuXHRcdFx0Y29uc3QgbXNnID0gKGVycm9yIGFzIEVycm9yKS5tZXNzYWdlID8/IGVycm9yO1xuXHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgY3JlYXRpbmcgdGhlIG5ldyBkb2N1bWVudFwiLCBtc2cpO1xuXHRcdFx0dGhyb3cgbXNnO1xuXHRcdH1cblx0fVxuXG5cdF9pc0RyYWZ0RW5hYmxlZCh2Q29udGV4dHM6IE9EYXRhVjRDb250ZXh0W10pOiBib29sZWFuIHtcblx0XHRjb25zdCBjb250ZXh0Rm9yRHJhZnRNb2RlbCA9IHZDb250ZXh0c1swXTtcblx0XHRjb25zdCBzUHJvZ3JhbW1pbmdNb2RlbCA9IHRoaXMuZ2V0UHJvZ3JhbW1pbmdNb2RlbChjb250ZXh0Rm9yRHJhZnRNb2RlbCk7XG5cdFx0cmV0dXJuIHNQcm9ncmFtbWluZ01vZGVsID09PSBQcm9ncmFtbWluZ01vZGVsLkRyYWZ0O1xuXHR9XG5cblx0LyoqXG5cdCAqIERlbGV0ZSBvbmUgb3IgbXVsdGlwbGUgZG9jdW1lbnQocykuXG5cdCAqIEBwYXJhbSBjb250ZXh0cyBDb250ZXh0cyBFaXRoZXIgb25lIGNvbnRleHQgb3IgYW4gYXJyYXkgd2l0aCBjb250ZXh0cyB0byBiZSBkZWxldGVkXG5cdCAqIEBwYXJhbSBtUGFyYW1ldGVycyBPcHRpb25hbCwgY2FuIGNvbnRhaW4gdGhlIGZvbGxvd2luZyBhdHRyaWJ1dGVzOlxuXHQgKiBAcGFyYW0gbVBhcmFtZXRlcnMudGl0bGUgVGl0bGUgb2YgdGhlIG9iamVjdCB0byBiZSBkZWxldGVkXG5cdCAqIEBwYXJhbSBtUGFyYW1ldGVycy5kZXNjcmlwdGlvbiBEZXNjcmlwdGlvbiBvZiB0aGUgb2JqZWN0IHRvIGJlIGRlbGV0ZWRcblx0ICogQHBhcmFtIG1QYXJhbWV0ZXJzLm51bWJlck9mU2VsZWN0ZWRDb250ZXh0cyBOdW1iZXIgb2Ygb2JqZWN0cyBzZWxlY3RlZFxuXHQgKiBAcGFyYW0gbVBhcmFtZXRlcnMubm9EaWFsb2cgVG8gZGlzYWJsZSB0aGUgY29uZmlybWF0aW9uIGRpYWxvZ1xuXHQgKiBAcGFyYW0gYXBwQ29tcG9uZW50IFRoZSBhcHBDb21wb25lbnRcblx0ICogQHBhcmFtIHJlc291cmNlTW9kZWwgVGhlIHJlc291cmNlIG1vZGVsIHRvIGxvYWQgdGV4dCByZXNvdXJjZXNcblx0ICogQHBhcmFtIG1lc3NhZ2VIYW5kbGVyIFRoZSBtZXNzYWdlIGhhbmRsZXIgZXh0ZW5zaW9uXG5cdCAqIEByZXR1cm5zIEEgUHJvbWlzZSByZXNvbHZlZCBvbmNlIHRoZSBkb2N1bWVudHMgYXJlIGRlbGV0ZWRcblx0ICovXG5cdGFzeW5jIGRlbGV0ZURvY3VtZW50KFxuXHRcdGNvbnRleHRzOiBPRGF0YVY0Q29udGV4dCB8IE9EYXRhVjRDb250ZXh0W10sXG5cdFx0bVBhcmFtZXRlcnM6IFRyYW5zYWN0aW9uRGVsZXRlUGFyYW1ldGVycyxcblx0XHRhcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudCxcblx0XHRyZXNvdXJjZU1vZGVsOiBSZXNvdXJjZU1vZGVsLFxuXHRcdG1lc3NhZ2VIYW5kbGVyOiBNZXNzYWdlSGFuZGxlclxuXHQpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHQvLyBkZWxldGUgZG9jdW1lbnQgbG9ja1xuXHRcdHRoaXMuYnVzeUxvY2soYXBwQ29tcG9uZW50KTtcblxuXHRcdGNvbnN0IGNvbnRleHRzVG9EZWxldGUgPSBBcnJheS5pc0FycmF5KGNvbnRleHRzKSA/IFsuLi5jb250ZXh0c10gOiBbY29udGV4dHNdO1xuXHRcdGNvbnN0IGZpcnN0Q29udGV4dCA9IChtUGFyYW1ldGVycy5zZWxlY3RlZENvbnRleHRzID8/IGNvbnRleHRzVG9EZWxldGUpWzBdO1xuXG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdGNvbnN0IGRyYWZ0RW5hYmxlZCA9IHRoaXMuX2lzRHJhZnRFbmFibGVkKG1QYXJhbWV0ZXJzLnNlbGVjdGVkQ29udGV4dHMgfHwgY29udGV4dHNUb0RlbGV0ZSk7XG5cdFx0XHRcdGNvbnN0IGl0ZW1zOiBDb250cm9sW10gPSBbXTtcblx0XHRcdFx0bGV0IG9wdGlvbnM6IERlbGV0ZU9wdGlvbltdID0gW107XG5cdFx0XHRcdGxldCB1blNhdmVkQ29udGV4dDogQ29udGV4dCB8IHVuZGVmaW5lZDtcblx0XHRcdFx0Ly8gaXRlbXModGV4dHMpIGFuZCBvcHRpb25zKGNoZWNrQm94ZXMgYW5kIHNpbmdsZSBkZWZhdWx0IG9wdGlvbikgZm9yIGNvbmZpcm0gZGlhbG9nLlxuXHRcdFx0XHRpZiAobVBhcmFtZXRlcnMpIHtcblx0XHRcdFx0XHRtUGFyYW1ldGVycyA9IGdldFBhcmFtZXRlcnMobVBhcmFtZXRlcnMpO1xuXHRcdFx0XHRcdG1QYXJhbWV0ZXJzLmVudGl0eVNldE5hbWUgPSB0aGlzLmdldENvbGxlY3Rpb25OYW1lRnJvbUNvbnRleHQoZmlyc3RDb250ZXh0KTtcblx0XHRcdFx0XHRpZiAoIW1QYXJhbWV0ZXJzLm51bWJlck9mU2VsZWN0ZWRDb250ZXh0cykge1xuXHRcdFx0XHRcdFx0Ly8gbm9uLVRhYmxlXG5cdFx0XHRcdFx0XHRpZiAoZHJhZnRFbmFibGVkKSB7XG5cdFx0XHRcdFx0XHRcdC8vIENoZWNrIGlmIDEgb2YgdGhlIGRyYWZ0cyBpcyBsb2NrZWQgYnkgYW5vdGhlciB1c2VyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IGxvY2tlZENvbnRleHQgPSBjb250ZXh0c1RvRGVsZXRlLmZpbmQoKGNvbnRleHQpID0+IHtcblx0XHRcdFx0XHRcdFx0XHRjb25zdCBjb250ZXh0RGF0YSA9IGNvbnRleHQuZ2V0T2JqZWN0KCk7XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdFx0XHRcdGNvbnRleHREYXRhLklzQWN0aXZlRW50aXR5ID09PSB0cnVlICYmXG5cdFx0XHRcdFx0XHRcdFx0XHRjb250ZXh0RGF0YS5IYXNEcmFmdEVudGl0eSA9PT0gdHJ1ZSAmJlxuXHRcdFx0XHRcdFx0XHRcdFx0Y29udGV4dERhdGEuRHJhZnRBZG1pbmlzdHJhdGl2ZURhdGEgJiZcblx0XHRcdFx0XHRcdFx0XHRcdGNvbnRleHREYXRhLkRyYWZ0QWRtaW5pc3RyYXRpdmVEYXRhLkluUHJvY2Vzc0J5VXNlciAmJlxuXHRcdFx0XHRcdFx0XHRcdFx0IWNvbnRleHREYXRhLkRyYWZ0QWRtaW5pc3RyYXRpdmVEYXRhLkRyYWZ0SXNDcmVhdGVkQnlNZVxuXHRcdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHRpZiAobG9ja2VkQ29udGV4dCkge1xuXHRcdFx0XHRcdFx0XHRcdC8vIFNob3cgbWVzc2FnZSBib3ggd2l0aCB0aGUgbmFtZSBvZiB0aGUgbG9ja2luZyB1c2VyIGFuZCByZXR1cm5cblx0XHRcdFx0XHRcdFx0XHRjb25zdCBsb2NraW5nVXNlck5hbWUgPSBsb2NrZWRDb250ZXh0LmdldE9iamVjdCgpLkRyYWZ0QWRtaW5pc3RyYXRpdmVEYXRhLkluUHJvY2Vzc0J5VXNlcjtcblx0XHRcdFx0XHRcdFx0XHRNZXNzYWdlQm94LnNob3coXG5cdFx0XHRcdFx0XHRcdFx0XHRyZXNvdXJjZU1vZGVsLmdldFRleHQoXCJDX1RSQU5TQUNUSU9OX0hFTFBFUl9DT05GSVJNX0RFTEVURV9XSVRIX1NJTkdMRV9PQkpFQ1RfTE9DS0VEXCIsIFtcblx0XHRcdFx0XHRcdFx0XHRcdFx0bG9ja2luZ1VzZXJOYW1lXG5cdFx0XHRcdFx0XHRcdFx0XHRdKSxcblx0XHRcdFx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dGl0bGU6IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfQ09NTU9OX0RFTEVURVwiKSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0b25DbG9zZTogcmVqZWN0XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0dW5TYXZlZENvbnRleHQgPSBjb250ZXh0c1RvRGVsZXRlLmZpbmQoKGNvbnRleHQpID0+IHtcblx0XHRcdFx0XHRcdFx0XHRcdGNvbnN0IHsgSXNBY3RpdmVFbnRpdHksIEhhc0RyYWZ0RW50aXR5LCBEcmFmdEFkbWluaXN0cmF0aXZlRGF0YSB9ID0gY29udGV4dC5nZXRPYmplY3QoKSB8fCB7fTtcblx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiBJc0FjdGl2ZUVudGl0eSA9PT0gdHJ1ZSAmJiBIYXNEcmFmdEVudGl0eSA9PT0gdHJ1ZSAmJiAhIURyYWZ0QWRtaW5pc3RyYXRpdmVEYXRhPy5JblByb2Nlc3NCeVVzZXI7XG5cdFx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGxldCBub25UYWJsZVR4dCA9IFwiXCI7XG5cdFx0XHRcdFx0XHRpZiAodW5TYXZlZENvbnRleHQpIHtcblx0XHRcdFx0XHRcdFx0Y29uc3QgdW5TYXZlZENvbnRleHRVc2VyID0gdW5TYXZlZENvbnRleHQuZ2V0T2JqZWN0KCkuRHJhZnRBZG1pbmlzdHJhdGl2ZURhdGEuSW5Qcm9jZXNzQnlVc2VyO1xuXHRcdFx0XHRcdFx0XHRub25UYWJsZVR4dCA9IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcblx0XHRcdFx0XHRcdFx0XHRcIkNfVFJBTlNBQ1RJT05fSEVMUEVSX0NPTkZJUk1fREVMRVRFX1dJVEhfVU5TQVZFRF9DSEFOR0VTXCIsXG5cdFx0XHRcdFx0XHRcdFx0W3VuU2F2ZWRDb250ZXh0VXNlcl0sXG5cdFx0XHRcdFx0XHRcdFx0bVBhcmFtZXRlcnMuZW50aXR5U2V0TmFtZVxuXHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0fSBlbHNlIGlmIChtUGFyYW1ldGVycy50aXRsZSkge1xuXHRcdFx0XHRcdFx0XHRpZiAobVBhcmFtZXRlcnMuZGVzY3JpcHRpb24pIHtcblx0XHRcdFx0XHRcdFx0XHRub25UYWJsZVR4dCA9IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcblx0XHRcdFx0XHRcdFx0XHRcdFwiQ19UUkFOU0FDVElPTl9IRUxQRVJfQ09ORklSTV9ERUxFVEVfV0lUSF9PQkpFQ1RJTkZPXCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRbbVBhcmFtZXRlcnMudGl0bGUsIG1QYXJhbWV0ZXJzLmRlc2NyaXB0aW9uXSxcblx0XHRcdFx0XHRcdFx0XHRcdG1QYXJhbWV0ZXJzLmVudGl0eVNldE5hbWVcblx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdG5vblRhYmxlVHh0ID0gcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFxuXHRcdFx0XHRcdFx0XHRcdFx0XCJDX1RSQU5TQUNUSU9OX0hFTFBFUl9DT05GSVJNX0RFTEVURV9XSVRIX09CSkVDVFRJVExFX09OTFlcIixcblx0XHRcdFx0XHRcdFx0XHRcdFttUGFyYW1ldGVycy50aXRsZV0sXG5cdFx0XHRcdFx0XHRcdFx0XHRtUGFyYW1ldGVycy5lbnRpdHlTZXROYW1lXG5cdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0bm9uVGFibGVUeHQgPSByZXNvdXJjZU1vZGVsLmdldFRleHQoXG5cdFx0XHRcdFx0XHRcdFx0XCJDX1RSQU5TQUNUSU9OX0hFTFBFUl9DT05GSVJNX0RFTEVURV9XSVRIX09CSkVDVFRJVExFX1NJTkdVTEFSXCIsXG5cdFx0XHRcdFx0XHRcdFx0dW5kZWZpbmVkLFxuXHRcdFx0XHRcdFx0XHRcdG1QYXJhbWV0ZXJzLmVudGl0eVNldE5hbWVcblx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdG9wdGlvbnMucHVzaCh7XG5cdFx0XHRcdFx0XHRcdHR5cGU6IERlbGV0ZU9wdGlvblR5cGVzLmRlbGV0YWJsZUNvbnRleHRzLFxuXHRcdFx0XHRcdFx0XHRjb250ZXh0czogY29udGV4dHNUb0RlbGV0ZSxcblx0XHRcdFx0XHRcdFx0dGV4dDogbm9uVGFibGVUeHQsXG5cdFx0XHRcdFx0XHRcdHNlbGVjdGVkOiB0cnVlLFxuXHRcdFx0XHRcdFx0XHRjb250cm9sOiBEZWxldGVEaWFsb2dDb250ZW50Q29udHJvbC5URVhUXG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0Ly8gVGFibGVcblx0XHRcdFx0XHRcdGxldCB0b3RhbERlbGV0YWJsZSA9IGNvbnRleHRzVG9EZWxldGUubGVuZ3RoO1xuXG5cdFx0XHRcdFx0XHRpZiAoZHJhZnRFbmFibGVkKSB7XG5cdFx0XHRcdFx0XHRcdHRvdGFsRGVsZXRhYmxlICs9XG5cdFx0XHRcdFx0XHRcdFx0KG1QYXJhbWV0ZXJzLmRyYWZ0c1dpdGhOb25EZWxldGFibGVBY3RpdmU/Lmxlbmd0aCA/PyAwKSArXG5cdFx0XHRcdFx0XHRcdFx0KG1QYXJhbWV0ZXJzLmRyYWZ0c1dpdGhEZWxldGFibGVBY3RpdmU/Lmxlbmd0aCA/PyAwKSArXG5cdFx0XHRcdFx0XHRcdFx0KG1QYXJhbWV0ZXJzLnVuU2F2ZWRDb250ZXh0cz8ubGVuZ3RoID8/IDApO1xuXHRcdFx0XHRcdFx0XHRkZWxldGVIZWxwZXIudXBkYXRlRHJhZnRPcHRpb25zRm9yRGVsZXRhYmxlVGV4dHMoXG5cdFx0XHRcdFx0XHRcdFx0bVBhcmFtZXRlcnMsXG5cdFx0XHRcdFx0XHRcdFx0Y29udGV4dHNUb0RlbGV0ZSxcblx0XHRcdFx0XHRcdFx0XHR0b3RhbERlbGV0YWJsZSxcblx0XHRcdFx0XHRcdFx0XHRyZXNvdXJjZU1vZGVsLFxuXHRcdFx0XHRcdFx0XHRcdGl0ZW1zLFxuXHRcdFx0XHRcdFx0XHRcdG9wdGlvbnNcblx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5vbkRlbGV0YWJsZVRleHQgPSBkZWxldGVIZWxwZXIuZ2V0Tm9uRGVsZXRhYmxlVGV4dChtUGFyYW1ldGVycywgdG90YWxEZWxldGFibGUsIHJlc291cmNlTW9kZWwpO1xuXHRcdFx0XHRcdFx0XHRpZiAobm9uRGVsZXRhYmxlVGV4dCkge1xuXHRcdFx0XHRcdFx0XHRcdGl0ZW1zLnB1c2gobm9uRGVsZXRhYmxlVGV4dCk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0Y29uc3Qgb3B0aW9uc0RlbGV0YWJsZVRleHRzID0gZGVsZXRlSGVscGVyLmdldE9wdGlvbnNGb3JEZWxldGFibGVUZXh0cyhcblx0XHRcdFx0XHRcdFx0bVBhcmFtZXRlcnMsXG5cdFx0XHRcdFx0XHRcdGNvbnRleHRzVG9EZWxldGUsXG5cdFx0XHRcdFx0XHRcdHJlc291cmNlTW9kZWxcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRvcHRpb25zID0gWy4uLm9wdGlvbnMsIC4uLm9wdGlvbnNEZWxldGFibGVUZXh0c107XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Y29uc3QgY29tbW9uQmluZGluZyA9IGZpcnN0Q29udGV4dC5nZXRCaW5kaW5nKCkgYXMgQmluZGluZztcblx0XHRcdFx0bGV0IGJpbmRpbmdUeXBlOiBcIlRyZWVcIiB8IFwiQW5hbHl0aWNhbFwiIHwgdW5kZWZpbmVkO1xuXHRcdFx0XHRpZiAoY29tbW9uQmluZGluZy5pc0E8T0RhdGFMaXN0QmluZGluZz4oXCJzYXAudWkubW9kZWwub2RhdGEudjQuT0RhdGFMaXN0QmluZGluZ1wiKSkge1xuXHRcdFx0XHRcdGlmICh0aGlzLmlzTGlzdEJpbmRpbmdIaWVyYXJjaGljYWwoY29tbW9uQmluZGluZykpIHtcblx0XHRcdFx0XHRcdGJpbmRpbmdUeXBlID0gXCJUcmVlXCI7XG5cdFx0XHRcdFx0fSBlbHNlIGlmICh0aGlzLmlzTGlzdEJpbmRpbmdBbmFseXRpY2FsKGNvbW1vbkJpbmRpbmcpKSB7XG5cdFx0XHRcdFx0XHRiaW5kaW5nVHlwZSA9IFwiQW5hbHl0aWNhbFwiO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIENvbnRlbnQgb2YgRGVsZXRlIERpYWxvZ1xuXHRcdFx0XHRkZWxldGVIZWxwZXIudXBkYXRlQ29udGVudEZvckRlbGV0ZURpYWxvZyhvcHRpb25zLCBpdGVtcyk7XG5cdFx0XHRcdGNvbnN0IGZuQ29uZmlybSA9IGFzeW5jICgpOiBQcm9taXNlPHZvaWQ+ID0+IHtcblx0XHRcdFx0XHRtZXNzYWdlSGFuZGxpbmcucmVtb3ZlQm91bmRUcmFuc2l0aW9uTWVzc2FnZXMoKTtcblx0XHRcdFx0XHR0aGlzLmJ1c3lMb2NrKGFwcENvbXBvbmVudCk7XG5cblx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0YXdhaXQgZGVsZXRlSGVscGVyLmRlbGV0ZUNvbmZpcm1IYW5kbGVyKFxuXHRcdFx0XHRcdFx0XHRvcHRpb25zLFxuXHRcdFx0XHRcdFx0XHRtUGFyYW1ldGVycyxcblx0XHRcdFx0XHRcdFx0bWVzc2FnZUhhbmRsZXIsXG5cdFx0XHRcdFx0XHRcdHJlc291cmNlTW9kZWwsXG5cdFx0XHRcdFx0XHRcdGFwcENvbXBvbmVudCxcblx0XHRcdFx0XHRcdFx0ZHJhZnRFbmFibGVkLFxuXHRcdFx0XHRcdFx0XHRiaW5kaW5nVHlwZVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdHJlc29sdmUoKTtcblx0XHRcdFx0XHR9IGNhdGNoIChvRXJyb3I6IHVua25vd24pIHtcblx0XHRcdFx0XHRcdHJlamVjdCgpO1xuXHRcdFx0XHRcdH0gZmluYWxseSB7XG5cdFx0XHRcdFx0XHR0aGlzLmJ1c3lVbmxvY2soYXBwQ29tcG9uZW50KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH07XG5cblx0XHRcdFx0Y29uc3QgZGlhbG9nID0gdGhpcy5jcmVhdGVEZWxldGVEaWFsb2coaXRlbXMsIG1QYXJhbWV0ZXJzLCByZXNvdXJjZU1vZGVsLCBmbkNvbmZpcm0sIHJlamVjdCk7XG5cblx0XHRcdFx0aWYgKG1QYXJhbWV0ZXJzLm5vRGlhbG9nID09PSB0cnVlIHx8IG1QYXJhbWV0ZXJzLnNpbGVudE1vZGUgPT09IHRydWUpIHtcblx0XHRcdFx0XHRmbkNvbmZpcm0oKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRkaWFsb2cuYWRkU3R5bGVDbGFzcyhcInNhcFVpQ29udGVudFBhZGRpbmdcIik7XG5cdFx0XHRcdFx0ZGlhbG9nLm9wZW4oKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBmaW5hbGx5IHtcblx0XHRcdFx0Ly8gZGVsZXRlIGRvY3VtZW50IHVubG9ja1xuXHRcdFx0XHR0aGlzLmJ1c3lVbmxvY2soYXBwQ29tcG9uZW50KTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGUgdGhlIGNvbmZpcm1hdGlvbiBkaWFsb2cgZm8gdGhlIGRlbGV0aW9uLlxuXHQgKiBAcGFyYW0gaXRlbXMgQW4gYXJyYXkgb2YgY29udHJvbHMgdXNlZCBmb3IgdGhlIGRpYWxvZyBjb250ZW50XG5cdCAqIEBwYXJhbSBwYXJhbWV0ZXJzIENvbnRhaW5zIHRoZSBmb2xsb3dpbmcgYXR0cmlidXRlczpcblx0ICogQHBhcmFtIHBhcmFtZXRlcnMucGFyZW50Q29udHJvbCBQYXJlbnQgY29udHJvbCBvZiB0aGUgZGVsZXRlIGJ1dHRvbiBpZiBhbnlcblx0ICogQHBhcmFtIHBhcmFtZXRlcnMuZW50aXR5U2V0TmFtZSBOYW1lIG9mIHRoZSBjdXJyZW50IGVudGl0eVNldFxuXHQgKiBAcGFyYW0gcmVzb3VyY2VNb2RlbCBUaGUgcmVzb3VyY2UgbW9kZWwgdG8gbG9hZCB0ZXh0IHJlc291cmNlc1xuXHQgKiBAcGFyYW0gZm5Db25maXJtIEZ1bmN0aW9uIGV4ZWN1dGVkIHVwb24gdGhlIHZhbGlkYXRpb24gb2YgdGhlIGRlbGV0aW9uXG5cdCAqIEBwYXJhbSBmblJlamVjdCBGdW5jdGlvbiBleGVjdXRlZCBpZiB0aGUgZGlhbG9nIGlzIGNsb3NlZCB2aWEgQ2FuY2VsIG9yIEVzY2FwZSBidXR0b25cblx0ICogQHJldHVybnMgVGhlIGNyZWF0ZWQgZGVsZXRlIGNvbmZpcm1hdGlvbiBkaWFsb2dcblx0ICovXG5cdGNyZWF0ZURlbGV0ZURpYWxvZyhcblx0XHRpdGVtczogQ29udHJvbFtdLFxuXHRcdHBhcmFtZXRlcnM6IFBhcnRpYWw8eyBwYXJlbnRDb250cm9sOiBDb250cm9sIHwgdW5kZWZpbmVkOyBlbnRpdHlTZXROYW1lOiBzdHJpbmcgfT4sXG5cdFx0cmVzb3VyY2VNb2RlbDogUmVzb3VyY2VNb2RlbCxcblx0XHRmbkNvbmZpcm06IEZ1bmN0aW9uLFxuXHRcdGZuUmVqZWN0OiBGdW5jdGlvblxuXHQpOiBEaWFsb2cge1xuXHRcdGxldCBkaWFsb2dDb25maXJtZWQgPSBmYWxzZTtcblx0XHRjb25zdCB2Qm94ID0gbmV3IFZCb3goeyBpdGVtczogaXRlbXMgfSk7XG5cdFx0Y29uc3QgcmVzb3VyY2VCdW5kbGVDb3JlID0gTGlicmFyeS5nZXRSZXNvdXJjZUJ1bmRsZUZvcihcInNhcC5mZS5jb3JlXCIpITtcblx0XHRsZXQgdGl0bGU6IHN0cmluZyB8IHVuZGVmaW5lZDtcblx0XHRpZiAocGFyYW1ldGVycy5wYXJlbnRDb250cm9sPy5pc0EoXCJzYXAudWkubWRjLlRhYmxlXCIpKSB7XG5cdFx0XHR0aXRsZSA9IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIk1fQ09NTU9OX1RBQkxFX0RFTEVURVwiLCB1bmRlZmluZWQsIHBhcmFtZXRlcnMuZW50aXR5U2V0TmFtZSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRpdGxlID0gcmVzb3VyY2VCdW5kbGVDb3JlLmdldFRleHQoXCJDX0NPTU1PTl9ERUxFVEVcIik7XG5cdFx0fVxuXHRcdGNvbnN0IGRpYWxvZyA9IG5ldyBEaWFsb2coe1xuXHRcdFx0dGl0bGU6IHRpdGxlLFxuXHRcdFx0c3RhdGU6IFwiV2FybmluZ1wiLFxuXHRcdFx0Y29udGVudDogW3ZCb3hdLFxuXHRcdFx0YXJpYUxhYmVsbGVkQnk6IGl0ZW1zLFxuXHRcdFx0YmVnaW5CdXR0b246IG5ldyBCdXR0b24oe1xuXHRcdFx0XHR0ZXh0OiB0aXRsZSxcblx0XHRcdFx0dHlwZTogXCJFbXBoYXNpemVkXCIsXG5cdFx0XHRcdHByZXNzOiBmdW5jdGlvbiAoKTogdm9pZCB7XG5cdFx0XHRcdFx0ZGlhbG9nQ29uZmlybWVkID0gdHJ1ZTtcblx0XHRcdFx0XHRkaWFsb2cuY2xvc2UoKTtcblx0XHRcdFx0XHRmbkNvbmZpcm0oKTtcblx0XHRcdFx0fVxuXHRcdFx0fSksXG5cdFx0XHRlbmRCdXR0b246IG5ldyBCdXR0b24oe1xuXHRcdFx0XHR0ZXh0OiByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJDX0NPTU1PTl9ESUFMT0dfQ0FOQ0VMXCIpLFxuXHRcdFx0XHRwcmVzczogZnVuY3Rpb24gKCk6IHZvaWQge1xuXHRcdFx0XHRcdGRpYWxvZy5jbG9zZSgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KSxcblx0XHRcdGFmdGVyQ2xvc2U6IGZ1bmN0aW9uICgpOiB2b2lkIHtcblx0XHRcdFx0ZGlhbG9nLmRlc3Ryb3koKTtcblx0XHRcdFx0Ly8gaWYgZGlhbG9nIGlzIGNsb3NlZCB1bmNvbmZpcm1lZCAoZS5nLiB2aWEgXCJDYW5jZWxcIiBvciBFc2NhcGUgYnV0dG9uKSwgZW5zdXJlIHRvIHJlamVjdCBwcm9taXNlXG5cdFx0XHRcdGlmICghZGlhbG9nQ29uZmlybWVkKSB7XG5cdFx0XHRcdFx0Zm5SZWplY3QoKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdHJldHVybiBkaWFsb2c7XG5cdH1cblxuXHQvKipcblx0ICogRWRpdHMgYSBkb2N1bWVudC5cblx0ICogQHBhcmFtIG9Db250ZXh0IENvbnRleHQgb2YgdGhlIGFjdGl2ZSBkb2N1bWVudFxuXHQgKiBAcGFyYW0gb1ZpZXcgQ3VycmVudCB2aWV3XG5cdCAqIEBwYXJhbSBhcHBDb21wb25lbnQgVGhlIGFwcENvbXBvbmVudFxuXHQgKiBAcGFyYW0gbWVzc2FnZUhhbmRsZXIgVGhlIG1lc3NhZ2UgaGFuZGxlciBleHRlbnNpb25cblx0ICogQHBhcmFtIGdyb3VwSWQgVGhlIGJhdGNoIGdyb3VwSWQgZm9yIHBvc3QgY2FsbCBvZiBlZGl0IGFjdGlvblxuXHQgKiBAcGFyYW0gdHJhbnNhY3Rpb25EZXRhaWxzIE9wdGlvbmFsIG9iamVjdCB0byByZXR1cm4gYWRkaXRpb25hbCBkZXRhaWxzIGFib3V0IGhvdyB0aGUgdHJhbnNhY3Rpb24gd2FzIGV4ZWN1dGVkXG5cdCAqIEByZXR1cm5zIFByb21pc2UgcmVzb2x2ZXMgd2l0aCB0aGUgbmV3IGRyYWZ0IGNvbnRleHQgaW4gY2FzZSBvZiBkcmFmdCBwcm9ncmFtbWluZyBtb2RlbFxuXHQgKiBAZmluYWxcblx0ICovXG5cdGFzeW5jIGVkaXREb2N1bWVudChcblx0XHRvQ29udGV4dDogT0RhdGFWNENvbnRleHQsXG5cdFx0b1ZpZXc6IEZFVmlldyxcblx0XHRhcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudCxcblx0XHRtZXNzYWdlSGFuZGxlcjogTWVzc2FnZUhhbmRsZXIsXG5cdFx0Z3JvdXBJZDogc3RyaW5nLFxuXHRcdHRyYW5zYWN0aW9uRGV0YWlscz86IEVkaXRUcmFuc2FjdGlvbkV4ZWN1dGlvbkRldGFpbHNcblx0KTogUHJvbWlzZTxPRGF0YVY0Q29udGV4dCB8IHVuZGVmaW5lZD4ge1xuXHRcdGNvbnN0IHNQcm9ncmFtbWluZ01vZGVsID0gdGhpcy5nZXRQcm9ncmFtbWluZ01vZGVsKG9Db250ZXh0KTtcblx0XHRpZiAoIW9Db250ZXh0KSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJCaW5kaW5nIGNvbnRleHQgdG8gYWN0aXZlIGRvY3VtZW50IGlzIHJlcXVpcmVkXCIpO1xuXHRcdH1cblx0XHRpZiAoc1Byb2dyYW1taW5nTW9kZWwgIT09IFByb2dyYW1taW5nTW9kZWwuRHJhZnQgJiYgc1Byb2dyYW1taW5nTW9kZWwgIT09IFByb2dyYW1taW5nTW9kZWwuU3RpY2t5KSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJFZGl0IGlzIG9ubHkgYWxsb3dlZCBmb3IgZHJhZnQgb3Igc3RpY2t5IHNlc3Npb24gc3VwcG9ydGVkIHNlcnZpY2VzXCIpO1xuXHRcdH1cblx0XHR0aGlzLmJ1c3lMb2NrKGFwcENvbXBvbmVudCk7XG5cdFx0Ly8gYmVmb3JlIHRyaWdnZXJpbmcgdGhlIGVkaXQgYWN0aW9uIHdlJ2xsIGhhdmUgdG8gcmVtb3ZlIGFsbCBib3VuZCB0cmFuc2l0aW9uIG1lc3NhZ2VzXG5cdFx0bWVzc2FnZUhhbmRsZXIucmVtb3ZlVHJhbnNpdGlvbk1lc3NhZ2VzKCk7XG5cdFx0Y29uc3QgbWVzc2FnZUhhbmRsaW5nS2V5ID0gbWVzc2FnZUhhbmRsZXIucmVnaXN0ZXJUb0hvbGRNZXNzYWdlcygpO1xuXG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IG9OZXdDb250ZXh0ID1cblx0XHRcdFx0c1Byb2dyYW1taW5nTW9kZWwgPT09IFByb2dyYW1taW5nTW9kZWwuRHJhZnRcblx0XHRcdFx0XHQ/IGF3YWl0IGRyYWZ0LmNyZWF0ZURyYWZ0RnJvbUFjdGl2ZURvY3VtZW50KFxuXHRcdFx0XHRcdFx0XHRvQ29udGV4dCxcblx0XHRcdFx0XHRcdFx0YXBwQ29tcG9uZW50LFxuXHRcdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFx0YlByZXNlcnZlQ2hhbmdlczogdHJ1ZSxcblx0XHRcdFx0XHRcdFx0XHRvVmlldzogb1ZpZXdcblx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0Z3JvdXBJZCxcblx0XHRcdFx0XHRcdFx0bWVzc2FnZUhhbmRsZXIsXG5cdFx0XHRcdFx0XHRcdHRyYW5zYWN0aW9uRGV0YWlsc1xuXHRcdFx0XHRcdCAgKVxuXHRcdFx0XHRcdDogYXdhaXQgc3RpY2t5LmVkaXREb2N1bWVudEluU3RpY2t5U2Vzc2lvbihvQ29udGV4dCwgYXBwQ29tcG9uZW50LCBtZXNzYWdlSGFuZGxlcik7XG5cblx0XHRcdGF3YWl0IG1lc3NhZ2VIYW5kbGVyLnNob3dNZXNzYWdlRGlhbG9nKHsgdW5Ib2xkS2V5OiBtZXNzYWdlSGFuZGxpbmdLZXkgfSk7XG5cdFx0XHRyZXR1cm4gb05ld0NvbnRleHQ7XG5cdFx0fSBjYXRjaCAoZXJyOiB1bmtub3duKSB7XG5cdFx0XHRhd2FpdCBtZXNzYWdlSGFuZGxlci5zaG93TWVzc2FnZXMoeyBjb25jdXJyZW50RWRpdEZsYWc6IHRydWUsIHVuSG9sZEtleTogbWVzc2FnZUhhbmRsaW5nS2V5IH0pO1xuXHRcdFx0dGhyb3cgZXJyO1xuXHRcdH0gZmluYWxseSB7XG5cdFx0XHR0aGlzLmJ1c3lVbmxvY2soYXBwQ29tcG9uZW50KTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQ2FuY2VsICdlZGl0JyBtb2RlIG9mIGEgZG9jdW1lbnQuXG5cdCAqIEBwYXJhbSBvQ29udGV4dCBDb250ZXh0IG9mIHRoZSBkb2N1bWVudCB0byBiZSBjYW5jZWxlZCBvciBkZWxldGVkXG5cdCAqIEBwYXJhbSBbbUluUGFyYW1ldGVyc10gT3B0aW9uYWwsIGNhbiBjb250YWluIHRoZSBmb2xsb3dpbmcgYXR0cmlidXRlczpcblx0ICogQHBhcmFtIG1JblBhcmFtZXRlcnMuY2FuY2VsQnV0dG9uIENhbmNlbCBCdXR0b24gb2YgdGhlIGRpc2NhcmQgcG9wb3ZlciAobWFuZGF0b3J5IGZvciBub3cpXG5cdCAqIEBwYXJhbSBtSW5QYXJhbWV0ZXJzLnNraXBEaXNjYXJkUG9wb3ZlciBPcHRpb25hbCwgc3VwcmVzc2VzIHRoZSBkaXNjYXJkIHBvcG92ZXIgaW5jYXNlIG9mIGRyYWZ0IGFwcGxpY2F0aW9ucyB3aGlsZSBuYXZpZ2F0aW5nIG91dCBvZiBPUFxuXHQgKiBAcGFyYW0gYXBwQ29tcG9uZW50IFRoZSBhcHBDb21wb25lbnRcblx0ICogQHBhcmFtIHJlc291cmNlTW9kZWwgVGhlIG1vZGVsIHRvIGxvYWQgdGV4dCByZXNvdXJjZXNcblx0ICogQHBhcmFtIG1lc3NhZ2VIYW5kbGVyIFRoZSBtZXNzYWdlIGhhbmRsZXIgZXh0ZW5zaW9uXG5cdCAqIEBwYXJhbSBpc05ld09iamVjdCBUcnVlIGlmIHdlJ3JlIHRyeWluZyB0byBjYW5jZWwgYSBuZXdseSBjcmVhdGVkIG9iamVjdFxuXHQgKiBAcGFyYW0gaXNPYmplY3RNb2RpZmllZCBUcnVlIGlmIHRoZSBvYmplY3QgaGFzIGJlZW4gbW9kaWZpZWQgYnkgdGhlIHVzZXJcblx0ICogQHJldHVybnMgUHJvbWlzZSByZXNvbHZlcyB3aXRoID8/P1xuXHQgKiBAZmluYWxcblx0ICovXG5cdGFzeW5jIGNhbmNlbERvY3VtZW50KFxuXHRcdG9Db250ZXh0OiBPRGF0YVY0Q29udGV4dCxcblx0XHRtSW5QYXJhbWV0ZXJzOiBDYW5jZWxQYXJhbWV0ZXJzIHwgdW5kZWZpbmVkLFxuXHRcdGFwcENvbXBvbmVudDogQXBwQ29tcG9uZW50LFxuXHRcdHJlc291cmNlTW9kZWw6IFJlc291cmNlTW9kZWwsXG5cdFx0bWVzc2FnZUhhbmRsZXI6IE1lc3NhZ2VIYW5kbGVyLFxuXHRcdGlzTmV3T2JqZWN0OiBib29sZWFuLFxuXHRcdGlzT2JqZWN0TW9kaWZpZWQ6IGJvb2xlYW5cblx0KTogUHJvbWlzZTxPRGF0YVY0Q29udGV4dCB8IHVuZGVmaW5lZD4ge1xuXHRcdC8vY29udGV4dCBtdXN0IGFsd2F5cyBiZSBwYXNzZWQgLSBtYW5kYXRvcnkgcGFyYW1ldGVyXG5cdFx0aWYgKCFvQ29udGV4dCkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiTm8gY29udGV4dCBleGlzdHMuIFBhc3MgYSBtZWFuaW5nZnVsIGNvbnRleHRcIik7XG5cdFx0fVxuXHRcdGNvbnN0IG1QYXJhbWV0ZXJzID0gZ2V0UGFyYW1ldGVycyhtSW5QYXJhbWV0ZXJzKTtcblx0XHRjb25zdCBvTW9kZWwgPSBvQ29udGV4dC5nZXRNb2RlbCgpO1xuXHRcdGNvbnN0IHNQcm9ncmFtbWluZ01vZGVsID0gdGhpcy5nZXRQcm9ncmFtbWluZ01vZGVsKG9Db250ZXh0KTtcblxuXHRcdGlmIChzUHJvZ3JhbW1pbmdNb2RlbCAhPT0gUHJvZ3JhbW1pbmdNb2RlbC5EcmFmdCAmJiBzUHJvZ3JhbW1pbmdNb2RlbCAhPT0gUHJvZ3JhbW1pbmdNb2RlbC5TdGlja3kpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIkNhbmNlbCBkb2N1bWVudCBvbmx5IGFsbG93ZWQgZm9yIGRyYWZ0IG9yIHN0aWNreSBzZXNzaW9uIHN1cHBvcnRlZCBzZXJ2aWNlc1wiKTtcblx0XHR9XG5cdFx0dGhpcy5idXN5TG9jayhhcHBDb21wb25lbnQpO1xuXHRcdHRyeSB7XG5cdFx0XHRsZXQgcmV0dXJuZWRWYWx1ZTogT0RhdGFWNENvbnRleHQgfCB1bmRlZmluZWQ7XG5cdFx0XHRsZXQgc2libGluZ0NvbnRleHRDYW5vbmljYWxQYXRoLCBkcmFmdEFkbWluRGF0YTtcblx0XHRcdGNvbnN0IHNpYmxpbmdDb250ZXh0ID0gb01vZGVsLmJpbmRDb250ZXh0KGAke29Db250ZXh0LmdldFBhdGgoKX0vU2libGluZ0VudGl0eWApLmdldEJvdW5kQ29udGV4dCgpO1xuXHRcdFx0aWYgKHNQcm9ncmFtbWluZ01vZGVsID09PSBQcm9ncmFtbWluZ01vZGVsLkRyYWZ0ICYmICFpc09iamVjdE1vZGlmaWVkKSB7XG5cdFx0XHRcdGNvbnN0IGRyYWZ0RGF0YUNvbnRleHQgPSBvTW9kZWwuYmluZENvbnRleHQoYCR7b0NvbnRleHQuZ2V0UGF0aCgpfS9EcmFmdEFkbWluaXN0cmF0aXZlRGF0YWApLmdldEJvdW5kQ29udGV4dCgpO1xuXHRcdFx0XHRbc2libGluZ0NvbnRleHRDYW5vbmljYWxQYXRoLCBkcmFmdEFkbWluRGF0YV0gPSBhd2FpdCBQcm9taXNlLmFsbChbXG5cdFx0XHRcdFx0aXNOZXdPYmplY3QgPyB1bmRlZmluZWQgOiBzaWJsaW5nQ29udGV4dC5yZXF1ZXN0Q2Fub25pY2FsUGF0aCgpLFxuXHRcdFx0XHRcdGRyYWZ0RGF0YUNvbnRleHQucmVxdWVzdE9iamVjdCgpXG5cdFx0XHRcdF0pO1xuXHRcdFx0XHRpZiAoZHJhZnRBZG1pbkRhdGEpIHtcblx0XHRcdFx0XHRpc09iamVjdE1vZGlmaWVkID0gZHJhZnRBZG1pbkRhdGEuQ3JlYXRpb25EYXRlVGltZSAhPT0gZHJhZnRBZG1pbkRhdGEuTGFzdENoYW5nZURhdGVUaW1lO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRpZiAoIW1QYXJhbWV0ZXJzLnNraXBEaXNjYXJkUG9wb3Zlcikge1xuXHRcdFx0XHRhd2FpdCB0aGlzLl9jb25maXJtRGlzY2FyZChtUGFyYW1ldGVycy5jYW5jZWxCdXR0b24sIGlzT2JqZWN0TW9kaWZpZWQsIHJlc291cmNlTW9kZWwpO1xuXHRcdFx0fVxuXHRcdFx0aWYgKG9Db250ZXh0LmlzS2VlcEFsaXZlKCkpIHtcblx0XHRcdFx0Ly8gaWYgdGhlIGNvbnRleHQgaXMga2VwdCBhbGl2ZSB3ZSBzZXQgaXQgYWdhaW4gdG8gZGV0YWNoIHRoZSBvbkJlZm9yZURlc3Ryb3kgY2FsbGJhY2sgYW5kIGhhbmRsZSBuYXZpZ2F0aW9uIGhlcmVcblx0XHRcdFx0Ly8gdGhlIGNvbnRleHQgbmVlZHMgdG8gc3RpbGwgYmUga2VwdCBhbGl2ZSB0byBiZSBhYmxlIHRvIHJlc2V0IGNoYW5nZXMgcHJvcGVybHlcblx0XHRcdFx0b0NvbnRleHQuc2V0S2VlcEFsaXZlKHRydWUsIHVuZGVmaW5lZCk7XG5cdFx0XHR9XG5cdFx0XHRpZiAobVBhcmFtZXRlcnMuYmVmb3JlQ2FuY2VsQ2FsbEJhY2spIHtcblx0XHRcdFx0YXdhaXQgbVBhcmFtZXRlcnMuYmVmb3JlQ2FuY2VsQ2FsbEJhY2soeyBjb250ZXh0OiBvQ29udGV4dCB9KTtcblx0XHRcdH1cblx0XHRcdGlmIChzUHJvZ3JhbW1pbmdNb2RlbCA9PT0gUHJvZ3JhbW1pbmdNb2RlbC5EcmFmdCkge1xuXHRcdFx0XHRpZiAoaXNOZXdPYmplY3QpIHtcblx0XHRcdFx0XHRpZiAob0NvbnRleHQuaGFzUGVuZGluZ0NoYW5nZXMoKSkge1xuXHRcdFx0XHRcdFx0b0NvbnRleHQuZ2V0QmluZGluZygpLnJlc2V0Q2hhbmdlcygpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRhd2FpdCBkcmFmdC5kZWxldGVEcmFmdChvQ29udGV4dCwgbWVzc2FnZUhhbmRsZXIsIGFwcENvbXBvbmVudCk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRcdGlmIChvQ29udGV4dC5oYXNQZW5kaW5nQ2hhbmdlcygpKSB7XG5cdFx0XHRcdFx0XHRcdG9Db250ZXh0LmdldEJpbmRpbmcoKS5yZXNldENoYW5nZXMoKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdHJldHVybmVkVmFsdWUgPSBvTW9kZWxcblx0XHRcdFx0XHRcdFx0LmJpbmRDb250ZXh0KFxuXHRcdFx0XHRcdFx0XHRcdHNpYmxpbmdDb250ZXh0Q2Fub25pY2FsUGF0aCA/IHNpYmxpbmdDb250ZXh0Q2Fub25pY2FsUGF0aCA6IGF3YWl0IHNpYmxpbmdDb250ZXh0LnJlcXVlc3RDYW5vbmljYWxQYXRoKClcblx0XHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdFx0XHQuZ2V0Qm91bmRDb250ZXh0KCk7XG5cdFx0XHRcdFx0fSBmaW5hbGx5IHtcblx0XHRcdFx0XHRcdGF3YWl0IGRyYWZ0LmRlbGV0ZURyYWZ0KG9Db250ZXh0LCBtZXNzYWdlSGFuZGxlciwgYXBwQ29tcG9uZW50KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNvbnN0IGRpc2NhcmRlZENvbnRleHQgPSBhd2FpdCBzdGlja3kuZGlzY2FyZERvY3VtZW50KG9Db250ZXh0KTtcblx0XHRcdFx0aWYgKGRpc2NhcmRlZENvbnRleHQpIHtcblx0XHRcdFx0XHRpZiAoZGlzY2FyZGVkQ29udGV4dC5oYXNQZW5kaW5nQ2hhbmdlcygpKSB7XG5cdFx0XHRcdFx0XHRkaXNjYXJkZWRDb250ZXh0LmdldEJpbmRpbmcoKS5yZXNldENoYW5nZXMoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0aWYgKCFpc05ld09iamVjdCkge1xuXHRcdFx0XHRcdFx0ZGlzY2FyZGVkQ29udGV4dC5yZWZyZXNoKCk7XG5cdFx0XHRcdFx0XHRyZXR1cm5lZFZhbHVlID0gZGlzY2FyZGVkQ29udGV4dDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gcmVtb3ZlIGV4aXN0aW5nIGJvdW5kIHRyYW5zaXRpb24gbWVzc2FnZXNcblx0XHRcdG1lc3NhZ2VIYW5kbGVyLnJlbW92ZVRyYW5zaXRpb25NZXNzYWdlcygpO1xuXHRcdFx0Ly8gc2hvdyB1bmJvdW5kIG1lc3NhZ2VzXG5cdFx0XHRhd2FpdCBtZXNzYWdlSGFuZGxlci5zaG93TWVzc2FnZXMoKTtcblx0XHRcdHJldHVybiByZXR1cm5lZFZhbHVlO1xuXHRcdH0gY2F0Y2ggKGVycjogdW5rbm93bikge1xuXHRcdFx0YXdhaXQgbWVzc2FnZUhhbmRsZXIuc2hvd01lc3NhZ2VzKCk7XG5cdFx0XHR0aHJvdyBlcnI7XG5cdFx0fSBmaW5hbGx5IHtcblx0XHRcdHRoaXMuYnVzeVVubG9jayhhcHBDb21wb25lbnQpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBTYXZlcyB0aGUgZG9jdW1lbnQuXG5cdCAqIEBwYXJhbSBjb250ZXh0IENvbnRleHQgb2YgdGhlIGRvY3VtZW50IHRvIGJlIHNhdmVkXG5cdCAqIEBwYXJhbSBhcHBDb21wb25lbnQgVGhlIGFwcENvbXBvbmVudFxuXHQgKiBAcGFyYW0gcmVzb3VyY2VNb2RlbCBUaGUgbW9kZWwgdG8gbG9hZCB0ZXh0IHJlc291cmNlc1xuXHQgKiBAcGFyYW0gZXhlY3V0ZVNpZGVFZmZlY3RzT25FcnJvciBUcnVlIGlmIHdlIHNob3VsZCBleGVjdXRlIHNpZGUgZWZmZWN0cyBpbiBjYXNlIG9mIGFuIGVycm9yXG5cdCAqIEBwYXJhbSBiaW5kaW5nc0ZvclNpZGVFZmZlY3RzIFRoZSBsaXN0QmluZGluZ3MgdG8gYmUgdXNlZCBmb3IgZXhlY3V0aW5nIHNpZGUgZWZmZWN0cyBvbiBlcnJvclxuXHQgKiBAcGFyYW0gbWVzc2FnZUhhbmRsZXIgVGhlIG1lc3NhZ2UgaGFuZGxlciBleHRlbnNpb25cblx0ICogQHBhcmFtIGlzTmV3T2JqZWN0IFRydWUgaWYgd2UncmUgdHJ5aW5nIHRvIGNhbmNlbCBhIG5ld2x5IGNyZWF0ZWQgb2JqZWN0XG5cdCAqIEBwYXJhbSBza2lwQ29uZmlybWF0aW9uTXNnXG5cdCAqIEBwYXJhbSBpc1N0YW5kYXJkU2F2ZVxuXHQgKiBAcmV0dXJucyBQcm9taXNlIHJlc29sdmVzIHdpdGggPz8/XG5cdCAqIEBmaW5hbFxuXHQgKi9cblx0YXN5bmMgc2F2ZURvY3VtZW50KFxuXHRcdGNvbnRleHQ6IE9EYXRhVjRDb250ZXh0LFxuXHRcdGFwcENvbXBvbmVudDogQXBwQ29tcG9uZW50LFxuXHRcdHJlc291cmNlTW9kZWw6IFJlc291cmNlTW9kZWwsXG5cdFx0ZXhlY3V0ZVNpZGVFZmZlY3RzT25FcnJvcjogYm9vbGVhbixcblx0XHRiaW5kaW5nc0ZvclNpZGVFZmZlY3RzOiBPRGF0YUxpc3RCaW5kaW5nW10sXG5cdFx0bWVzc2FnZUhhbmRsZXI6IE1lc3NhZ2VIYW5kbGVyLFxuXHRcdGlzTmV3T2JqZWN0OiBib29sZWFuLFxuXHRcdHNraXBDb25maXJtYXRpb25Nc2cgPSBmYWxzZSxcblx0XHRpc1N0YW5kYXJkU2F2ZT86IGJvb2xlYW5cblx0KTogUHJvbWlzZTxPRGF0YVY0Q29udGV4dD4ge1xuXHRcdGNvbnN0IHNQcm9ncmFtbWluZ01vZGVsID0gdGhpcy5nZXRQcm9ncmFtbWluZ01vZGVsKGNvbnRleHQpO1xuXHRcdGlmIChzUHJvZ3JhbW1pbmdNb2RlbCAhPT0gUHJvZ3JhbW1pbmdNb2RlbC5TdGlja3kgJiYgc1Byb2dyYW1taW5nTW9kZWwgIT09IFByb2dyYW1taW5nTW9kZWwuRHJhZnQpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIlNhdmUgaXMgb25seSBhbGxvd2VkIGZvciBkcmFmdCBvciBzdGlja3kgc2Vzc2lvbiBzdXBwb3J0ZWQgc2VydmljZXNcIik7XG5cdFx0fVxuXG5cdFx0dHJ5IHtcblx0XHRcdHRoaXMuYnVzeUxvY2soYXBwQ29tcG9uZW50KTtcblx0XHRcdGNvbnN0IGVudGl0eVNldE5hbWUgPSB0aGlzLmdldENvbGxlY3Rpb25OYW1lRnJvbUNvbnRleHQoY29udGV4dCk7XG5cdFx0XHRjb25zdCBvQWN0aXZlRG9jdW1lbnQgPVxuXHRcdFx0XHRzUHJvZ3JhbW1pbmdNb2RlbCA9PT0gUHJvZ3JhbW1pbmdNb2RlbC5EcmFmdFxuXHRcdFx0XHRcdD8gYXdhaXQgZHJhZnQuYWN0aXZhdGVEb2N1bWVudChjb250ZXh0LCBhcHBDb21wb25lbnQsIG1lc3NhZ2VIYW5kbGVyLCB7IHJlc291cmNlTW9kZWw6IHJlc291cmNlTW9kZWwgfSwgaXNTdGFuZGFyZFNhdmUpXG5cdFx0XHRcdFx0OiBhd2FpdCBzdGlja3kuYWN0aXZhdGVEb2N1bWVudChcblx0XHRcdFx0XHRcdFx0Y29udGV4dCxcblx0XHRcdFx0XHRcdFx0YXBwQ29tcG9uZW50LFxuXHRcdFx0XHRcdFx0XHRtZXNzYWdlSGFuZGxlcixcblx0XHRcdFx0XHRcdFx0eyByZXNvdXJjZU1vZGVsOiByZXNvdXJjZU1vZGVsIH0sXG5cdFx0XHRcdFx0XHRcdGlzU3RhbmRhcmRTYXZlXG5cdFx0XHRcdFx0ICApO1xuXG5cdFx0XHRjb25zdCBtZXNzYWdlc1JlY2VpdmVkID0gbWVzc2FnZUhhbmRsaW5nLmdldE1lc3NhZ2VzKCkuY29uY2F0KG1lc3NhZ2VIYW5kbGluZy5nZXRNZXNzYWdlcyh0cnVlLCB0cnVlKSk7IC8vIGdldCB1bmJvdW5kIGFuZCBib3VuZCBtZXNzYWdlcyBwcmVzZW50IGluIHRoZSBtb2RlbFxuXHRcdFx0aWYgKCFza2lwQ29uZmlybWF0aW9uTXNnICYmICEobWVzc2FnZXNSZWNlaXZlZC5sZW5ndGggPT09IDEgJiYgbWVzc2FnZXNSZWNlaXZlZFswXS5nZXRUeXBlKCkgPT09IE1lc3NhZ2VUeXBlLlN1Y2Nlc3MpKSB7XG5cdFx0XHRcdC8vIHNob3cgb3VyIG9iamVjdCBjcmVhdGlvbiB0b2FzdCBvbmx5IGlmIGl0IGlzIG5vdCBjb21pbmcgZnJvbSBiYWNrZW5kXG5cdFx0XHRcdE1lc3NhZ2VUb2FzdC5zaG93KFxuXHRcdFx0XHRcdGlzTmV3T2JqZWN0XG5cdFx0XHRcdFx0XHQ/IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfVFJBTlNBQ1RJT05fSEVMUEVSX09CSkVDVF9DUkVBVEVEXCIsIHVuZGVmaW5lZCwgZW50aXR5U2V0TmFtZSlcblx0XHRcdFx0XHRcdDogcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiQ19UUkFOU0FDVElPTl9IRUxQRVJfT0JKRUNUX1NBVkVEXCIsIHVuZGVmaW5lZCwgZW50aXR5U2V0TmFtZSlcblx0XHRcdFx0KTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIG9BY3RpdmVEb2N1bWVudDtcblx0XHR9IGNhdGNoIChlcnI6IHVua25vd24pIHtcblx0XHRcdGlmIChleGVjdXRlU2lkZUVmZmVjdHNPbkVycm9yICYmIGJpbmRpbmdzRm9yU2lkZUVmZmVjdHM/Lmxlbmd0aCA+IDApIHtcblx0XHRcdFx0LyogVGhlIHNpZGVFZmZlY3RzIGFyZSBleGVjdXRlZCBvbmx5IGZvciB0YWJsZSBpdGVtcyBpbiB0cmFuc2llbnQgc3RhdGUgKi9cblx0XHRcdFx0YmluZGluZ3NGb3JTaWRlRWZmZWN0cy5mb3JFYWNoKChsaXN0QmluZGluZykgPT4ge1xuXHRcdFx0XHRcdGlmICghQ29tbW9uVXRpbHMuaGFzVHJhbnNpZW50Q29udGV4dChsaXN0QmluZGluZykpIHtcblx0XHRcdFx0XHRcdGFwcENvbXBvbmVudC5nZXRTaWRlRWZmZWN0c1NlcnZpY2UoKS5yZXF1ZXN0U2lkZUVmZmVjdHNGb3JOYXZpZ2F0aW9uUHJvcGVydHkobGlzdEJpbmRpbmcuZ2V0UGF0aCgpLCBjb250ZXh0KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdFx0YXdhaXQgbWVzc2FnZUhhbmRsZXIuc2hvd01lc3NhZ2VzKCk7XG5cdFx0XHR0aHJvdyBlcnI7XG5cdFx0fSBmaW5hbGx5IHtcblx0XHRcdHRoaXMuYnVzeVVubG9jayhhcHBDb21wb25lbnQpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBDYWxscyBhIGJvdW5kIG9yIHVuYm91bmQgYWN0aW9uLlxuXHQgKiBAcGFyYW0gc0FjdGlvbk5hbWUgVGhlIG5hbWUgb2YgdGhlIGFjdGlvbiB0byBiZSBjYWxsZWRcblx0ICogQHBhcmFtIFttUGFyYW1ldGVyc10gQ29udGFpbnMgdGhlIGZvbGxvd2luZyBhdHRyaWJ1dGVzOlxuXHQgKiBAcGFyYW0gW21QYXJhbWV0ZXJzLnBhcmFtZXRlclZhbHVlc10gQSBtYXAgb2YgYWN0aW9uIHBhcmFtZXRlciBuYW1lcyBhbmQgcHJvdmlkZWQgdmFsdWVzXG5cdCAqIEBwYXJhbSBbbVBhcmFtZXRlcnMuc2tpcFBhcmFtZXRlckRpYWxvZ10gU2tpcHMgdGhlIHBhcmFtZXRlciBkaWFsb2cgaWYgdmFsdWVzIGFyZSBwcm92aWRlZCBmb3IgYWxsIG9mIHRoZW1cblx0ICogQHBhcmFtIFttUGFyYW1ldGVycy5jb250ZXh0c10gTWFuZGF0b3J5IGZvciBhIGJvdW5kIGFjdGlvbjogRWl0aGVyIG9uZSBjb250ZXh0IG9yIGFuIGFycmF5IHdpdGggY29udGV4dHMgZm9yIHdoaWNoIHRoZSBhY3Rpb24gaXMgdG8gYmUgY2FsbGVkXG5cdCAqIEBwYXJhbSBbbVBhcmFtZXRlcnMubW9kZWxdIE1hbmRhdG9yeSBmb3IgYW4gdW5ib3VuZCBhY3Rpb246IEFuIGluc3RhbmNlIG9mIGFuIE9EYXRhIFY0IG1vZGVsXG5cdCAqIEBwYXJhbSBbbVBhcmFtZXRlcnMuaW52b2NhdGlvbkdyb3VwaW5nXSBNb2RlIGhvdyBhY3Rpb25zIGFyZSB0byBiZSBjYWxsZWQ6ICdDaGFuZ2VTZXQnIHRvIHB1dCBhbGwgYWN0aW9uIGNhbGxzIGludG8gb25lIGNoYW5nZXNldCwgJ0lzb2xhdGVkJyB0byBwdXQgdGhlbSBpbnRvIHNlcGFyYXRlIGNoYW5nZXNldHNcblx0ICogQHBhcmFtIFttUGFyYW1ldGVycy5sYWJlbF0gQSBodW1hbi1yZWFkYWJsZSBsYWJlbCBmb3IgdGhlIGFjdGlvblxuXHQgKiBAcGFyYW0gbVBhcmFtZXRlcnMuYmluZGluZ1BhcmFtZXRlcnNcblx0ICogQHBhcmFtIG1QYXJhbWV0ZXJzLnNob3dBY3Rpb25QYXJhbWV0ZXJEaWFsb2dcblx0ICogQHBhcmFtIG1QYXJhbWV0ZXJzLmVudGl0eVNldE5hbWVcblx0ICogQHBhcmFtIG1QYXJhbWV0ZXJzLnZpZXdcblx0ICogQHBhcmFtIG1QYXJhbWV0ZXJzLmNvbnRyb2xJZFxuXHQgKiBAcGFyYW0gbVBhcmFtZXRlcnMuaXNDcmVhdGVBY3Rpb25cblx0ICogQHBhcmFtIG1QYXJhbWV0ZXJzLm9wZXJhdGlvbkF2YWlsYWJsZU1hcFxuXHQgKiBAcGFyYW0gbVBhcmFtZXRlcnMuaW50ZXJuYWxNb2RlbENvbnRleHRcblx0ICogQHBhcmFtIG1QYXJhbWV0ZXJzLmdyb3VwSWRcblx0ICogQHBhcmFtIG1QYXJhbWV0ZXJzLmRlZmF1bHRWYWx1ZXNFeHRlbnNpb25GdW5jdGlvblxuXHQgKiBAcGFyYW0gbVBhcmFtZXRlcnMuaWdub3JlRVRhZyBJZiBzcGVjaWZpZWQsIHRoZSBhY3Rpb24gaXMgY2FsbGVkIHdpdGhvdXQgRVRhZyBoYW5kbGluZ1xuXHQgKiBAcGFyYW0gYXBwQ29tcG9uZW50IFRoZSBhcHBDb21wb25lbnRcblx0ICogQHBhcmFtIG1lc3NhZ2VIYW5kbGVyIFRoZSBtZXNzYWdlIGhhbmRsZXIgZXh0ZW5zaW9uXG5cdCAqIEByZXR1cm5zIFByb21pc2UgcmVzb2x2ZXMgd2l0aCBhbiBhcnJheSBvZiByZXNwb25zZSBvYmplY3RzIChUT0RPOiB0byBiZSBjaGFuZ2VkKVxuXHQgKiBAZmluYWxcblx0ICovXG5cdGFzeW5jIGNhbGxBY3Rpb24oXG5cdFx0c0FjdGlvbk5hbWU6IHN0cmluZyxcblx0XHRtUGFyYW1ldGVyczoge1xuXHRcdFx0YmluZGluZ1BhcmFtZXRlcnM/OiBCaW5kQ29udGV4dFBhcmFtZXRlcnM7XG5cdFx0XHRwYXJhbWV0ZXJWYWx1ZXM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPltdO1xuXHRcdFx0c2tpcFBhcmFtZXRlckRpYWxvZz86IGJvb2xlYW47XG5cdFx0XHRzaG93QWN0aW9uUGFyYW1ldGVyRGlhbG9nPzogYm9vbGVhbjtcblx0XHRcdGxhYmVsPzogc3RyaW5nO1xuXHRcdFx0aW52b2NhdGlvbkdyb3VwaW5nPzogc3RyaW5nO1xuXHRcdFx0ZW50aXR5U2V0TmFtZT86IHN0cmluZztcblx0XHRcdGNvbnRleHRzPzogT0RhdGFWNENvbnRleHQgfCBPRGF0YVY0Q29udGV4dFtdIHwgbnVsbDtcblx0XHRcdG1vZGVsPzogT0RhdGFNb2RlbDtcblx0XHRcdHZpZXc6IFZpZXc7XG5cdFx0XHRjb250cm9sSWQ/OiBzdHJpbmc7XG5cdFx0XHRpc0NyZWF0ZUFjdGlvbj86IGJvb2xlYW47XG5cdFx0XHRvcGVyYXRpb25BdmFpbGFibGVNYXA/OiBzdHJpbmc7XG5cdFx0XHRpbnRlcm5hbE1vZGVsQ29udGV4dD86IEludGVybmFsTW9kZWxDb250ZXh0IHwgbnVsbDtcblx0XHRcdGdyb3VwSWQ/OiBzdHJpbmc7XG5cdFx0XHRkZWZhdWx0VmFsdWVzRXh0ZW5zaW9uRnVuY3Rpb24/OiBzdHJpbmc7XG5cdFx0XHRpZ25vcmVFVGFnPzogYm9vbGVhbjtcblx0XHR9LFxuXHRcdGFwcENvbXBvbmVudDogQXBwQ29tcG9uZW50LFxuXHRcdG1lc3NhZ2VIYW5kbGVyOiBNZXNzYWdlSGFuZGxlclxuXHQpOiBQcm9taXNlPFByb21pc2VTZXR0bGVkUmVzdWx0PE9wZXJhdGlvblJlc3VsdD5bXT4ge1xuXHRcdG1QYXJhbWV0ZXJzID0gZ2V0UGFyYW1ldGVycyhtUGFyYW1ldGVycyk7XG5cdFx0bGV0IGNvbnRleHRUb1Byb2Nlc3M7XG5cdFx0bGV0IG9Nb2RlbDogT0RhdGFNb2RlbCB8IHVuZGVmaW5lZDtcblx0XHRpZiAoIXNBY3Rpb25OYW1lKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJQcm92aWRlIG5hbWUgb2YgYWN0aW9uIHRvIGJlIGV4ZWN1dGVkXCIpO1xuXHRcdH1cblx0XHQvLyBhY3Rpb24gaW1wb3J0cyBhcmUgbm90IGRpcmVjdGx5IG9idGFpbmVkIGZyb20gdGhlIG1ldGFNb2RlbCBieSBpdCBpcyBwcmVzZW50IGluc2lkZSB0aGUgZW50aXR5Q29udGFpbmVyXG5cdFx0Ly8gYW5kIHRoZSBhY2lvbnMgaXQgcmVmZXJzIHRvIHByZXNlbnQgb3V0c2lkZSB0aGUgZW50aXR5Y29udGFpbmVyLCBoZW5jZSB0byBvYnRhaW4ga2luZCBvZiB0aGUgYWN0aW9uXG5cdFx0Ly8gc3BsaXQoKSBvbiBpdHMgbmFtZSB3YXMgcmVxdWlyZWRcblx0XHRjb25zdCBzTmFtZSA9IHNBY3Rpb25OYW1lLnNwbGl0KFwiL1wiKVsxXTtcblxuXHRcdGNvbnRleHRUb1Byb2Nlc3MgPSBzTmFtZSA/IHVuZGVmaW5lZCA6IG1QYXJhbWV0ZXJzLmNvbnRleHRzO1xuXHRcdC8vY2hlY2tpbmcgd2hldGhlciB0aGUgY29udGV4dCBpcyBhbiBhcnJheSB3aXRoIG1vcmUgdGhhbiAwIGxlbmd0aCBvciBub3QgYW4gYXJyYXkoY3JlYXRlIGFjdGlvbilcblx0XHRpZiAoY29udGV4dFRvUHJvY2VzcyAmJiAoKEFycmF5LmlzQXJyYXkoY29udGV4dFRvUHJvY2VzcykgJiYgY29udGV4dFRvUHJvY2Vzcy5sZW5ndGgpIHx8ICFBcnJheS5pc0FycmF5KGNvbnRleHRUb1Byb2Nlc3MpKSkge1xuXHRcdFx0Y29udGV4dFRvUHJvY2VzcyA9IEFycmF5LmlzQXJyYXkoY29udGV4dFRvUHJvY2VzcykgPyBjb250ZXh0VG9Qcm9jZXNzWzBdIDogY29udGV4dFRvUHJvY2Vzcztcblx0XHRcdG9Nb2RlbCA9IGNvbnRleHRUb1Byb2Nlc3MuZ2V0TW9kZWwoKTtcblx0XHR9XG5cdFx0aWYgKG1QYXJhbWV0ZXJzLm1vZGVsKSB7XG5cdFx0XHRvTW9kZWwgPSBtUGFyYW1ldGVycy5tb2RlbDtcblx0XHR9XG5cdFx0aWYgKCFvTW9kZWwpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIlBhc3MgYSBjb250ZXh0IGZvciBhIGJvdW5kIGFjdGlvbiBvciBwYXNzIHRoZSBtb2RlbCBmb3IgYW4gdW5ib3VuZCBhY3Rpb25cIik7XG5cdFx0fVxuXHRcdGNvbnN0IG1lc3NhZ2VIYW5kbGluZ0tleSA9IG1lc3NhZ2VIYW5kbGVyLnJlZ2lzdGVyVG9Ib2xkTWVzc2FnZXMoKTtcblx0XHR0cnkge1xuXHRcdFx0Y29uc3QgY29udHJvbCA9IChtUGFyYW1ldGVycy5jb250cm9sSWQgPyBtUGFyYW1ldGVycy52aWV3LmJ5SWQobVBhcmFtZXRlcnMuY29udHJvbElkKSA6IG1QYXJhbWV0ZXJzLnZpZXcpIGFzXG5cdFx0XHRcdHwgQ29udHJvbFxuXHRcdFx0XHR8IHVuZGVmaW5lZDtcblx0XHRcdGxldCBvUmVzdWx0OiBQcm9taXNlU2V0dGxlZFJlc3VsdDxPcGVyYXRpb25SZXN1bHQ+W107XG5cdFx0XHRpZiAoY29udGV4dFRvUHJvY2VzcyAmJiBtUGFyYW1ldGVycy5jb250ZXh0cykge1xuXHRcdFx0XHRjb25zdCBjb250ZXh0cyA9IEFycmF5LmlzQXJyYXkobVBhcmFtZXRlcnMuY29udGV4dHMpID8gbVBhcmFtZXRlcnMuY29udGV4dHMgOiBbbVBhcmFtZXRlcnMuY29udGV4dHNdOyAvLyBFbnN1cmUgdGhhdCBjb250ZXh0cyBpcyBhbiBhcnJheSAoZm9yIHN0YXRpYyBhY3Rpb25zIGl0J3Mgbm90IGFuIHdlIG5lZWQgdG8gZml4IGl0KVxuXG5cdFx0XHRcdGNvbnN0IG1ldGFNb2RlbCA9IG9Nb2RlbC5nZXRNZXRhTW9kZWwoKSxcblx0XHRcdFx0XHRhY3Rpb25QYXRoID0gYCR7bWV0YU1vZGVsLmdldE1ldGFQYXRoKGNvbnRleHRzWzBdLmdldFBhdGgoKSl9LyR7c0FjdGlvbk5hbWV9YCxcblx0XHRcdFx0XHRib3VuZEFjdGlvbiA9IG1ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChgJHthY3Rpb25QYXRofS9AJHVpNS5vdmVybG9hZC8wYCkhO1xuXG5cdFx0XHRcdGNvbnN0IGNvbnZlcnRlZFR5cGVzID0gY29udmVydFR5cGVzKG9Nb2RlbC5nZXRNZXRhTW9kZWwoKSk7XG5cdFx0XHRcdGNvbnN0IGNvbnZlcnRlZEFjdGlvbiA9IGNvbnZlcnRlZFR5cGVzLnJlc29sdmVQYXRoPEVkbUFjdGlvbiB8IHVuZGVmaW5lZD4oYm91bmRBY3Rpb24uZ2V0UGF0aCgpKS50YXJnZXQ7XG5cdFx0XHRcdGlmICghY29udmVydGVkQWN0aW9uKSB7XG5cdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiVW5rbm93biBib3VuZCBhY3Rpb25cIik7XG5cdFx0XHRcdH1cblx0XHRcdFx0b1Jlc3VsdCA9IGF3YWl0IG5ldyBPcGVyYXRpb24oYXBwQ29tcG9uZW50LCBvTW9kZWwsIGNvbnZlcnRlZEFjdGlvbiwge1xuXHRcdFx0XHRcdHBhcmFtZXRlclZhbHVlczogbVBhcmFtZXRlcnMucGFyYW1ldGVyVmFsdWVzIGFzIFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IGJvb2xlYW4gfCBudW1iZXIgfCBNdWx0aVZhbHVlRmllbGRJdGVtW10+W10sXG5cdFx0XHRcdFx0Y29udGV4dHMsXG5cdFx0XHRcdFx0aW52b2NhdGlvbkdyb3VwaW5nOiBtUGFyYW1ldGVycy5pbnZvY2F0aW9uR3JvdXBpbmcsXG5cdFx0XHRcdFx0bGFiZWw6IG1QYXJhbWV0ZXJzLmxhYmVsLFxuXHRcdFx0XHRcdHNraXBQYXJhbWV0ZXJEaWFsb2c6IG1QYXJhbWV0ZXJzLnNraXBQYXJhbWV0ZXJEaWFsb2csXG5cdFx0XHRcdFx0YmluZGluZ1BhcmFtZXRlcnM6IG1QYXJhbWV0ZXJzLmJpbmRpbmdQYXJhbWV0ZXJzLFxuXHRcdFx0XHRcdGVudGl0eVNldE5hbWU6IG1QYXJhbWV0ZXJzLmVudGl0eVNldE5hbWUsXG5cdFx0XHRcdFx0b0RhdGFQcm9wZXJ0aWVzOiB7XG5cdFx0XHRcdFx0XHRnaG9zdENvbnRleHRCaW5kaW5nUHJvdGVjdGlvbjogdHJ1ZSxcblx0XHRcdFx0XHRcdGVuaGFuY2Ukc2VsZWN0OiB0cnVlLFxuXHRcdFx0XHRcdFx0Z3JvdXBJZDogbVBhcmFtZXRlcnMuZ3JvdXBJZCxcblx0XHRcdFx0XHRcdGlnbm9yZUVUYWc6IG1QYXJhbWV0ZXJzLmlnbm9yZUVUYWdcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdG9EYXRhRXZlbnRzOiB7XG5cdFx0XHRcdFx0XHRvbk9EYXRhU3VibWl0OiAoKTogdm9pZCA9PiB7XG5cdFx0XHRcdFx0XHRcdG1lc3NhZ2VIYW5kbGVyPy5yZW1vdmVUcmFuc2l0aW9uTWVzc2FnZXMoKTtcblx0XHRcdFx0XHRcdFx0dGhpcy5idXN5TG9jayhhcHBDb21wb25lbnQpO1xuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdG9uT0RhdGFSZXNwb25zZTogKCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRcdFx0XHR0aGlzLmJ1c3lVbmxvY2soYXBwQ29tcG9uZW50KTtcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRvblJlcXVlc3RTaWRlRWZmZWN0czogKCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRcdFx0XHR0aGlzLmhhbmRsZUFjdGlvbkVuYWJsZW1lbnRPbk9wZXJhdGlvbih7XG5cdFx0XHRcdFx0XHRcdFx0aW50ZXJuYWxNb2RlbENvbnRleHQ6IG1QYXJhbWV0ZXJzLmludGVybmFsTW9kZWxDb250ZXh0LFxuXHRcdFx0XHRcdFx0XHRcdG9wZXJhdGlvbkF2YWlsYWJsZU1hcDogbVBhcmFtZXRlcnMub3BlcmF0aW9uQXZhaWxhYmxlTWFwLFxuXHRcdFx0XHRcdFx0XHRcdGNvbnRyb2w6IGNvbnRyb2wsXG5cdFx0XHRcdFx0XHRcdFx0Y29udGV4dHMsXG5cdFx0XHRcdFx0XHRcdFx0Y29udmVydGVkQWN0aW9uXG5cdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0dmlldzogbVBhcmFtZXRlcnMudmlldyBhcyBGRVZpZXcsXG5cdFx0XHRcdFx0aXNDcmVhdGVBY3Rpb246IG1QYXJhbWV0ZXJzLmlzQ3JlYXRlQWN0aW9uLFxuXHRcdFx0XHRcdG1lc3NhZ2VIYW5kbGVyOiBtZXNzYWdlSGFuZGxlcixcblx0XHRcdFx0XHRkZWZhdWx0VmFsdWVzRXh0ZW5zaW9uRnVuY3Rpb246IG1QYXJhbWV0ZXJzLmRlZmF1bHRWYWx1ZXNFeHRlbnNpb25GdW5jdGlvblxuXHRcdFx0XHR9KS5leGVjdXRlKCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRvUmVzdWx0ID0gYXdhaXQgb3BlcmF0aW9ucy5jYWxsQWN0aW9uSW1wb3J0KHNBY3Rpb25OYW1lLCBvTW9kZWwsIGFwcENvbXBvbmVudCwge1xuXHRcdFx0XHRcdHBhcmFtZXRlclZhbHVlczogbVBhcmFtZXRlcnMucGFyYW1ldGVyVmFsdWVzIGFzIFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IGJvb2xlYW4gfCBudW1iZXIgfCBNdWx0aVZhbHVlRmllbGRJdGVtW10+W10sXG5cdFx0XHRcdFx0bGFiZWw6IG1QYXJhbWV0ZXJzLmxhYmVsLFxuXHRcdFx0XHRcdHNraXBQYXJhbWV0ZXJEaWFsb2c6IG1QYXJhbWV0ZXJzLnNraXBQYXJhbWV0ZXJEaWFsb2csXG5cdFx0XHRcdFx0YmluZGluZ1BhcmFtZXRlcnM6IG1QYXJhbWV0ZXJzLmJpbmRpbmdQYXJhbWV0ZXJzLFxuXHRcdFx0XHRcdGVudGl0eVNldE5hbWU6IG1QYXJhbWV0ZXJzLmVudGl0eVNldE5hbWUsXG5cdFx0XHRcdFx0b0RhdGFFdmVudHM6IHtcblx0XHRcdFx0XHRcdG9uT0RhdGFTdWJtaXQ6ICgpID0+IHtcblx0XHRcdFx0XHRcdFx0dGhpcy5idXN5TG9jayhhcHBDb21wb25lbnQpO1xuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdG9uT0RhdGFSZXNwb25zZTogKCkgPT4ge1xuXHRcdFx0XHRcdFx0XHR0aGlzLmJ1c3lVbmxvY2soYXBwQ29tcG9uZW50KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdG9EYXRhUHJvcGVydGllczoge1xuXHRcdFx0XHRcdFx0aWdub3JlRVRhZzogbVBhcmFtZXRlcnMuaWdub3JlRVRhZ1xuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0bWVzc2FnZUhhbmRsZXI6IG1lc3NhZ2VIYW5kbGVyLFxuXHRcdFx0XHRcdHZpZXc6IG1QYXJhbWV0ZXJzLnZpZXcgYXMgRkVWaWV3XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdFx0YXdhaXQgdGhpcy5faGFuZGxlQWN0aW9uUmVzcG9uc2UobWVzc2FnZUhhbmRsZXIsIG1QYXJhbWV0ZXJzLCBzQWN0aW9uTmFtZSwgbWVzc2FnZUhhbmRsaW5nS2V5KTtcblx0XHRcdHJldHVybiBvUmVzdWx0O1xuXHRcdH0gY2F0Y2ggKGVycjogdW5rbm93bikge1xuXHRcdFx0YXdhaXQgdGhpcy5faGFuZGxlQWN0aW9uUmVzcG9uc2UobWVzc2FnZUhhbmRsZXIsIG1QYXJhbWV0ZXJzLCBzQWN0aW9uTmFtZSwgbWVzc2FnZUhhbmRsaW5nS2V5KTtcblx0XHRcdHRocm93IGVycjtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgY29sbGVjdGlvbiBuYW1lIGZyb20gdGhlIGNvbnRleHQuXG5cdCAqIEBwYXJhbSBjb250ZXh0IFRoZSBjb250ZXh0XG5cdCAqIEByZXR1cm5zIFRoZSBjb2xsZWN0aW9uIG5hbWVcblx0ICovXG5cdGdldENvbGxlY3Rpb25OYW1lRnJvbUNvbnRleHQoY29udGV4dDogT0RhdGFWNENvbnRleHQpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRcdGNvbnN0IG1ldGFDb250ZXh0ID0gY29udGV4dC5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpLmdldE1ldGFDb250ZXh0KGNvbnRleHQuZ2V0UGF0aCgpKTtcblx0XHRyZXR1cm4gKE1ldGFNb2RlbENvbnZlcnRlci5nZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMobWV0YUNvbnRleHQpLnRhcmdldE9iamVjdCBhcyBFbnRpdHlTZXQgfCBOYXZpZ2F0aW9uUHJvcGVydHkgfCB1bmRlZmluZWQpXG5cdFx0XHQ/Lm5hbWU7XG5cdH1cblxuXHRoYW5kbGVBY3Rpb25FbmFibGVtZW50T25PcGVyYXRpb24ocGFyYW1ldGVyczoge1xuXHRcdGludGVybmFsTW9kZWxDb250ZXh0PzogSW50ZXJuYWxNb2RlbENvbnRleHQgfCBudWxsO1xuXHRcdG9wZXJhdGlvbkF2YWlsYWJsZU1hcD86IHN0cmluZztcblx0XHRjb250cm9sPzogQ29udHJvbDtcblx0XHRjb250ZXh0cz86IE9EYXRhVjRDb250ZXh0W107XG5cdFx0Y29udmVydGVkQWN0aW9uOiBFZG1BY3Rpb247XG5cdH0pOiB2b2lkIHtcblx0XHRpZiAocGFyYW1ldGVycy5pbnRlcm5hbE1vZGVsQ29udGV4dCAmJiBwYXJhbWV0ZXJzLm9wZXJhdGlvbkF2YWlsYWJsZU1hcCkge1xuXHRcdFx0bGV0IHNlbGVjdGVkQ29udGV4dHM6IE9EYXRhVjRDb250ZXh0W10gPSBbXTtcblx0XHRcdC8vY2hlY2sgZm9yIHNraXBwaW5nIHN0YXRpYyBhY3Rpb25zXG5cdFx0XHRpZiAoIWFjdGlvbkhlbHBlci5pc1N0YXRpY0FjdGlvbihwYXJhbWV0ZXJzLmNvbnZlcnRlZEFjdGlvbikpIHtcblx0XHRcdFx0c2VsZWN0ZWRDb250ZXh0cyA9IHBhcmFtZXRlcnMuaW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UHJvcGVydHkoXCJzZWxlY3RlZENvbnRleHRzXCIpIHx8IFtdO1xuXHRcdFx0XHRBY3Rpb25SdW50aW1lLnNldEFjdGlvbkVuYWJsZW1lbnQoXG5cdFx0XHRcdFx0cGFyYW1ldGVycy5pbnRlcm5hbE1vZGVsQ29udGV4dCxcblx0XHRcdFx0XHRKU09OLnBhcnNlKHBhcmFtZXRlcnMub3BlcmF0aW9uQXZhaWxhYmxlTWFwKSxcblx0XHRcdFx0XHRzZWxlY3RlZENvbnRleHRzLFxuXHRcdFx0XHRcdFwidGFibGVcIlxuXHRcdFx0XHQpO1xuXHRcdFx0fSBlbHNlIGlmIChwYXJhbWV0ZXJzLmNvbnRyb2wpIHtcblx0XHRcdFx0aWYgKHBhcmFtZXRlcnMuY29udHJvbC5pc0E8VGFibGU+KFwic2FwLnVpLm1kYy5UYWJsZVwiKSkge1xuXHRcdFx0XHRcdHNlbGVjdGVkQ29udGV4dHMgPSBwYXJhbWV0ZXJzLmNvbnRyb2wuZ2V0U2VsZWN0ZWRDb250ZXh0cygpIGFzIE9EYXRhVjRDb250ZXh0W107XG5cdFx0XHRcdFx0QWN0aW9uUnVudGltZS5zZXRBY3Rpb25FbmFibGVtZW50KFxuXHRcdFx0XHRcdFx0cGFyYW1ldGVycy5pbnRlcm5hbE1vZGVsQ29udGV4dCxcblx0XHRcdFx0XHRcdEpTT04ucGFyc2UocGFyYW1ldGVycy5vcGVyYXRpb25BdmFpbGFibGVNYXApLFxuXHRcdFx0XHRcdFx0c2VsZWN0ZWRDb250ZXh0cyxcblx0XHRcdFx0XHRcdFwidGFibGVcIlxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdC8vdXBkYXRlIGRlbGV0ZSBidXR0b25cblx0XHRcdGRlbGV0ZUhlbHBlci51cGRhdGVEZWxldGVJbmZvRm9yU2VsZWN0ZWRDb250ZXh0cyhwYXJhbWV0ZXJzLmludGVybmFsTW9kZWxDb250ZXh0LCBzZWxlY3RlZENvbnRleHRzKTtcblx0XHR9XG5cdH1cblxuXHRhc3luYyBfaGFuZGxlQWN0aW9uUmVzcG9uc2UoXG5cdFx0bWVzc2FnZUhhbmRsZXI6IE1lc3NhZ2VIYW5kbGVyLFxuXHRcdHBhcmFtZXRlcnM6IHtcblx0XHRcdGNvbnRleHRzPzogT0RhdGFWNENvbnRleHQgfCBPRGF0YVY0Q29udGV4dFtdIHwgbnVsbDtcblx0XHRcdGNvbnRyb2w/OiBDb250cm9sO1xuXHRcdFx0Y29udHJvbElkPzogc3RyaW5nO1xuXHRcdFx0dmlldz86IFZpZXc7XG5cdFx0XHRsYWJlbD86IHN0cmluZztcblx0XHRcdGludGVybmFsTW9kZWxDb250ZXh0PzogSW50ZXJuYWxNb2RlbENvbnRleHQgfCBudWxsO1xuXHRcdH0sXG5cdFx0c0FjdGlvbk5hbWU6IHN0cmluZyxcblx0XHRtZXNzYWdlSGFuZGxpbmdLZXk6IHN0cmluZ1xuXHQpOiBQcm9taXNlPHVua25vd24+IHtcblx0XHRjb25zdCBhY3Rpb25OYW1lID0gcGFyYW1ldGVycy5sYWJlbCA/IHBhcmFtZXRlcnMubGFiZWwgOiBzQWN0aW9uTmFtZTtcblxuXHRcdGNvbnN0IGFUcmFuc2llbnRNZXNzYWdlcyA9IG1lc3NhZ2VIYW5kbGluZy5nZXRNZXNzYWdlcyh0cnVlLCB0cnVlKTtcblx0XHRpZiAoYVRyYW5zaWVudE1lc3NhZ2VzLmxlbmd0aCA+IDAgJiYgcGFyYW1ldGVycy5pbnRlcm5hbE1vZGVsQ29udGV4dCkge1xuXHRcdFx0cGFyYW1ldGVycy5pbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcInNBY3Rpb25OYW1lXCIsIGFjdGlvbk5hbWUpO1xuXHRcdH1cblx0XHRsZXQgY29udHJvbDtcblx0XHRpZiAocGFyYW1ldGVycy5jb250cm9sSWQgJiYgcGFyYW1ldGVycy52aWV3KSB7XG5cdFx0XHRjb250cm9sID0gcGFyYW1ldGVycy52aWV3LmJ5SWQocGFyYW1ldGVycy5jb250cm9sSWQpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRjb250cm9sID0gcGFyYW1ldGVycy52aWV3O1xuXHRcdH1cblx0XHRyZXR1cm4gbWVzc2FnZUhhbmRsZXIuc2hvd01lc3NhZ2VzKHtcblx0XHRcdHNBY3Rpb25OYW1lOiBhY3Rpb25OYW1lLFxuXHRcdFx0Y29udHJvbDogY29udHJvbCBhcyB1bmtub3duIGFzIENvbnRyb2wsXG5cdFx0XHR1bkhvbGRLZXk6IG1lc3NhZ2VIYW5kbGluZ0tleSxcblx0XHRcdGFTZWxlY3RlZENvbnRleHRzOiBwYXJhbWV0ZXJzLmNvbnRleHRzXG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogSGFuZGxlcyB2YWxpZGF0aW9uIGVycm9ycyBmb3IgdGhlICdEaXNjYXJkJyBhY3Rpb24uXG5cdCAqIEBmaW5hbFxuXHQgKi9cblx0aGFuZGxlVmFsaWRhdGlvbkVycm9yKCk6IHZvaWQge1xuXHRcdGNvbnN0IGVycm9yVG9SZW1vdmUgPSBNZXNzYWdpbmcuZ2V0TWVzc2FnZU1vZGVsKClcblx0XHRcdC5nZXREYXRhKClcblx0XHRcdC5maWx0ZXIoKGVycm9yOiBNZXNzYWdlKSA9PiBlcnJvci52YWxpZGF0aW9uKTsgLy8gb25seSBuZWVkcyB0byBoYW5kbGUgdmFsaWRhdGlvbiBtZXNzYWdlcywgdGVjaG5pY2FsIGFuZCBwZXJzaXN0ZW50IGVycm9ycyBuZWVkcyBub3QgdG8gYmUgY2hlY2tlZCBoZXJlLlxuXHRcdE1lc3NhZ2luZy5yZW1vdmVNZXNzYWdlcyhlcnJvclRvUmVtb3ZlKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIGEgbmV3IFBvcG92ZXIuIEZhY3RvcnkgbWV0aG9kIHRvIG1ha2UgdW5pdCB0ZXN0cyBlYXNpZXIuXG5cdCAqIEBwYXJhbSBzZXR0aW5ncyBJbml0aWFsIHBhcmFtZXRlcnMgZm9yIHRoZSBwb3BvdmVyXG5cdCAqIEByZXR1cm5zIEEgbmV3IFBvcG92ZXJcblx0ICovXG5cdF9jcmVhdGVQb3BvdmVyKHNldHRpbmdzPzogJFBvcG92ZXJTZXR0aW5ncyk6IFBvcG92ZXIge1xuXHRcdHJldHVybiBuZXcgUG9wb3ZlcihzZXR0aW5ncyk7XG5cdH1cblxuXHQvKipcblx0ICogU2hvd3MgYSBwb3BvdmVyIHRvIGNvbmZpcm0gZGlzY2FyZCBpZiBuZWVkZWQuXG5cdCAqIEBwYXJhbSBjYW5jZWxCdXR0b24gVGhlIGNvbnRyb2wgd2hpY2ggd2lsbCBvcGVuIHRoZSBwb3BvdmVyXG5cdCAqIEBwYXJhbSBpc01vZGlmaWVkIFRydWUgaWYgdGhlIG9iamVjdCBoYXMgYmVlbiBtb2RpZmllZCBhbmQgYSBjb25maXJtYXRpb24gcG9wb3ZlciBtdXN0IGJlIHNob3duXG5cdCAqIEBwYXJhbSByZXNvdXJjZU1vZGVsIFRoZSBtb2RlbCB0byBsb2FkIHRleHQgcmVzb3VyY2VzXG5cdCAqIEByZXR1cm5zIFByb21pc2UgcmVzb2x2ZXMgaWYgdXNlciBjb25maXJtcyBkaXNjYXJkLCByZWplY3RzIGlmIG90aGVyd2lzZSwgcmVqZWN0cyBpZiBubyBjb250cm9sIHBhc3NlZCB0byBvcGVuIHBvcG92ZXJcblx0ICogQGZpbmFsXG5cdCAqL1xuXHRhc3luYyBfY29uZmlybURpc2NhcmQoY2FuY2VsQnV0dG9uOiBCdXR0b24sIGlzTW9kaWZpZWQ6IGJvb2xlYW4sIHJlc291cmNlTW9kZWw6IFJlc291cmNlTW9kZWwpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHQvLyBJZiB0aGUgZGF0YSBpc24ndCBtb2RpZmllZCwgZG8gbm90IHNob3cgYW55IGNvbmZpcm1hdGlvbiBwb3BvdmVyXG5cdFx0aWYgKCFpc01vZGlmaWVkKSB7XG5cdFx0XHR0aGlzLmhhbmRsZVZhbGlkYXRpb25FcnJvcigpO1xuXHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuXHRcdH1cblxuXHRcdGNhbmNlbEJ1dHRvbi5zZXRFbmFibGVkKGZhbHNlKTtcblx0XHRyZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdFx0Y29uc3QgY29uZmlybWF0aW9uUG9wb3ZlciA9IHRoaXMuX2NyZWF0ZVBvcG92ZXIoe1xuXHRcdFx0XHRzaG93SGVhZGVyOiBmYWxzZSxcblx0XHRcdFx0cGxhY2VtZW50OiBcIlRvcFwiXG5cdFx0XHR9KTtcblx0XHRcdGNvbmZpcm1hdGlvblBvcG92ZXIuYWRkU3R5bGVDbGFzcyhcInNhcFVpQ29udGVudFBhZGRpbmdcIik7XG5cblx0XHRcdC8vIENyZWF0ZSB0aGUgY29udGVudCBvZiB0aGUgcG9wb3ZlclxuXHRcdFx0Y29uc3QgdGl0bGUgPSBuZXcgVGV4dCh7XG5cdFx0XHRcdHRleHQ6IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfVFJBTlNBQ1RJT05fSEVMUEVSX0RSQUZUX0RJU0NBUkRfTUVTU0FHRVwiKVxuXHRcdFx0fSk7XG5cdFx0XHRjb25zdCBjb25maXJtQnV0dG9uID0gbmV3IEJ1dHRvbih7XG5cdFx0XHRcdHRleHQ6IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfVFJBTlNBQ1RJT05fSEVMUEVSX0RSQUZUX0RJU0NBUkRfQlVUVE9OXCIpLFxuXHRcdFx0XHR3aWR0aDogXCIxMDAlXCIsXG5cdFx0XHRcdHByZXNzOiAoKTogdm9pZCA9PiB7XG5cdFx0XHRcdFx0dGhpcy5oYW5kbGVWYWxpZGF0aW9uRXJyb3IoKTtcblx0XHRcdFx0XHRjb25maXJtYXRpb25Qb3BvdmVyLmRhdGEoXCJjb250aW51ZURpc2NhcmRcIiwgdHJ1ZSk7XG5cdFx0XHRcdFx0Y29uZmlybWF0aW9uUG9wb3Zlci5jbG9zZSgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHRcdGNvbmZpcm1hdGlvblBvcG92ZXIuYWRkQ29udGVudChuZXcgVkJveCh7IGl0ZW1zOiBbdGl0bGUsIGNvbmZpcm1CdXR0b25dIH0pKTtcblxuXHRcdFx0Ly8gQXR0YWNoIGhhbmRsZXJcblx0XHRcdGNvbmZpcm1hdGlvblBvcG92ZXIuYXR0YWNoQmVmb3JlT3BlbigoKSA9PiB7XG5cdFx0XHRcdGNvbmZpcm1hdGlvblBvcG92ZXIuc2V0SW5pdGlhbEZvY3VzKGNvbmZpcm1CdXR0b24pO1xuXHRcdFx0fSk7XG5cdFx0XHRjb25maXJtYXRpb25Qb3BvdmVyLmF0dGFjaEFmdGVyQ2xvc2UoKCkgPT4ge1xuXHRcdFx0XHRjYW5jZWxCdXR0b24uc2V0RW5hYmxlZCh0cnVlKTtcblx0XHRcdFx0aWYgKGNvbmZpcm1hdGlvblBvcG92ZXIuZGF0YShcImNvbnRpbnVlRGlzY2FyZFwiKSkge1xuXHRcdFx0XHRcdHJlc29sdmUoKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRyZWplY3QoKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cblx0XHRcdGNvbmZpcm1hdGlvblBvcG92ZXIub3BlbkJ5KGNhbmNlbEJ1dHRvbiwgZmFsc2UpO1xuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJlbG9hZHMgZGF0YSBmb3IgYW4gT0RhdGFMaXN0QmluZGluZy5cblx0ICogQHBhcmFtIGxpc3RCaW5kaW5nIFRoZSBsaXN0YmluZGluZyB0byByZWZyZXNoXG5cdCAqIEBwYXJhbSBhcHBDb21wb25lbnRcblx0ICogQHJldHVybnMgVGhlIGNvcnJlc3BvbmRpbmcgcHJvbWlzZVxuXHQgKi9cblx0YXN5bmMgcmVmcmVzaExpc3RCaW5kaW5nKGxpc3RCaW5kaW5nOiBPRGF0YUxpc3RCaW5kaW5nLCBhcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdHRyeSB7XG5cdFx0XHRpZiAobGlzdEJpbmRpbmcuaXNSb290KCkpIHtcblx0XHRcdFx0aWYgKHRoaXMuaXNMaXN0QmluZGluZ0hpZXJhcmNoaWNhbChsaXN0QmluZGluZykpIHtcblx0XHRcdFx0XHQvLyBXZSB1c2UgYSBzaWRlLWVmZmVjdCByZWZyZXNoIGZvciBhIFRyZWVUYWJsZSwgdG8gcHJlc2VydmUgZXhwYW5zaW9uIHN0YXRlc1xuXHRcdFx0XHRcdGF3YWl0IGFwcENvbXBvbmVudFxuXHRcdFx0XHRcdFx0LmdldFNpZGVFZmZlY3RzU2VydmljZSgpXG5cdFx0XHRcdFx0XHQucmVxdWVzdFNpZGVFZmZlY3RzKFt7ICROYXZpZ2F0aW9uUHJvcGVydHlQYXRoOiBcIlwiIH1dLCBsaXN0QmluZGluZy5nZXRIZWFkZXJDb250ZXh0KCkhKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRhd2FpdCBsaXN0QmluZGluZy5yZXF1ZXN0UmVmcmVzaCgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRhd2FpdCBhcHBDb21wb25lbnRcblx0XHRcdFx0XHQuZ2V0U2lkZUVmZmVjdHNTZXJ2aWNlKClcblx0XHRcdFx0XHQucmVxdWVzdFNpZGVFZmZlY3RzKFt7ICROYXZpZ2F0aW9uUHJvcGVydHlQYXRoOiBsaXN0QmluZGluZy5nZXRQYXRoKCkgfV0sIGxpc3RCaW5kaW5nLmdldENvbnRleHQoKSk7XG5cdFx0XHR9XG5cdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdExvZy5lcnJvcihgRXJyb3Igd2hpbGUgcmVmcmVzaGluZyBsaXN0IGJpbmRpbmcgJHtsaXN0QmluZGluZy5nZXRQYXRoKCl9YCwgZXJyb3IgYXMgc3RyaW5nKTtcblx0XHR9XG5cdH1cblxuXHRhc3luYyBjcmVhdGVXaXRoRGlhbG9nKFxuXHRcdGxpc3RCaW5kaW5nOiBPRGF0YUxpc3RCaW5kaW5nLFxuXHRcdGZpZWxkTmFtZXM6IHN0cmluZ1tdLFxuXHRcdHBhcmFtZXRlcnM6IHtcblx0XHRcdHBhcmVudENvbnRyb2w/OiBDb250cm9sO1xuXHRcdFx0ZGF0YT86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXHRcdFx0YklzQ3JlYXRlRGlhbG9nPzogYm9vbGVhbjtcblx0XHRcdGJlZm9yZUNyZWF0ZUNhbGxCYWNrPzogRnVuY3Rpb247XG5cdFx0XHRhZnRlckNyZWF0ZUNhbGxCYWNrPzogKG5ld0RvY3VtZW50Q29udGV4dDogT0RhdGFWNENvbnRleHQpID0+IFByb21pc2U8dm9pZD47XG5cdFx0XHRjcmVhdGVBdEVuZD86IGJvb2xlYW47XG5cdFx0XHRpbmFjdGl2ZT86IGJvb2xlYW47XG5cdFx0XHRwYXJlbnRDb250ZXh0PzogT0RhdGFWNENvbnRleHQ7XG5cdFx0XHRrZWVwVHJhbnNpZW50Q29udGV4dE9uRmFpbGVkPzogYm9vbGVhbjtcblx0XHRcdGNyZWF0ZUFjdGlvbj86IGJvb2xlYW47XG5cdFx0XHRjcmVhdGlvbk1vZGU/OiBzdHJpbmc7XG5cdFx0fSxcblx0XHRhcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudCxcblx0XHRyZXNvdXJjZU1vZGVsOiBSZXNvdXJjZU1vZGVsLFxuXHRcdG1lc3NhZ2VIYW5kbGVyOiBNZXNzYWdlSGFuZGxlclxuXHQpOiBQcm9taXNlPE9EYXRhVjRDb250ZXh0PiB7XG5cdFx0Y29uc3QgbW9kZWwgPSBsaXN0QmluZGluZy5nZXRNb2RlbCgpIGFzIE9EYXRhTW9kZWw7XG5cdFx0Y29uc3QgbWV0YU1vZGVsID0gbW9kZWwuZ2V0TWV0YU1vZGVsKCk7XG5cdFx0Y29uc3QgbGlzdE1ldGFQYXRoID0gbWV0YU1vZGVsLmdldE1ldGFQYXRoKGxpc3RCaW5kaW5nLmdldFJlc29sdmVkUGF0aCgpISk7XG5cblx0XHQvLyBDcmVhdGUgYSBmYWtlICh0cmFuc2llbnQpIGxpc3RCaW5kaW5nIGFuZCBjb250ZXh0LCBqdXN0IGZvciB0aGUgYmluZGluZyBjb250ZXh0IG9mIHRoZSBkaWFsb2dcblx0XHRjb25zdCB0cmFuc2llbnRMaXN0QmluZGluZyA9IG1vZGVsLmJpbmRMaXN0KGxpc3RCaW5kaW5nLmdldFBhdGgoKSwgbGlzdEJpbmRpbmcuZ2V0Q29udGV4dCgpLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwge1xuXHRcdFx0JCR1cGRhdGVHcm91cElkOiBcInN1Ym1pdExhdGVyXCJcblx0XHR9KTtcblx0XHR0cmFuc2llbnRMaXN0QmluZGluZy5yZWZyZXNoSW50ZXJuYWwgPSBmdW5jdGlvbiAoKTogdm9pZCB7XG5cdFx0XHQvKiAqL1xuXHRcdH07XG5cdFx0Y29uc3QgdHJhbnNpZW50Q29udGV4dCA9IHRyYW5zaWVudExpc3RCaW5kaW5nLmNyZWF0ZShwYXJhbWV0ZXJzLmRhdGEsIHRydWUpO1xuXHRcdGNvbnN0IGZpZWxkTWV0YUNvbnRleHRzID0gZmllbGROYW1lcy5tYXAoKG5hbWUpID0+IHtcblx0XHRcdHJldHVybiBtZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoYCR7bGlzdE1ldGFQYXRofS8ke25hbWV9YCkgYXMgQ29udGV4dDtcblx0XHR9KTtcblxuXHRcdGNvbnN0IGNyZWF0ZURpYWxvZyA9IGdldENvcmVVSUZhY3RvcnkoKS5uZXdDcmVhdGVEaWFsb2coXG5cdFx0XHR0cmFuc2llbnRDb250ZXh0LFxuXHRcdFx0ZmllbGROYW1lcyxcblx0XHRcdGFwcENvbXBvbmVudCxcblx0XHRcdHBhcmFtZXRlcnMuY3JlYXRpb25Nb2RlID09PSBDcmVhdGlvbk1vZGUuQ3JlYXRpb25EaWFsb2cgPyBcIlN0YW5kYWxvbmVcIiA6IFwiV2l0aE5hdmlnYXRpb25cIixcblx0XHRcdHBhcmFtZXRlcnMucGFyZW50Q29udHJvbFxuXHRcdCk7XG5cblx0XHR0cnkge1xuXHRcdFx0YXdhaXQgQ29tbW9uVXRpbHMuc2V0VXNlckRlZmF1bHRzKFxuXHRcdFx0XHRhcHBDb21wb25lbnQsXG5cdFx0XHRcdGZpZWxkTWV0YUNvbnRleHRzLFxuXHRcdFx0XHR0cmFuc2llbnRDb250ZXh0LFxuXHRcdFx0XHRmYWxzZSxcblx0XHRcdFx0cGFyYW1ldGVycy5jcmVhdGVBY3Rpb24sXG5cdFx0XHRcdHBhcmFtZXRlcnMuZGF0YVxuXHRcdFx0KTtcblx0XHRcdGNyZWF0ZURpYWxvZy5vcGVuRGlhbG9nKCk7XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0YXdhaXQgbWVzc2FnZUhhbmRsZXIuc2hvd01lc3NhZ2VzKCk7XG5cdFx0XHR0aHJvdyBlO1xuXHRcdH1cblxuXHRcdGNvbnN0IHJlc3VsdFByb21pc2VLZWVwZXIgPSBuZXcgUHJvbWlzZUtlZXBlcjxPRGF0YVY0Q29udGV4dD4oKTtcblxuXHRcdGNvbnN0IG9uRXhpdERpYWxvZyA9IGFzeW5jIChldmVudDogRXhpdERpYWxvZ0V2ZW50KTogUHJvbWlzZTx2b2lkPiA9PiB7XG5cdFx0XHRpZiAoIWV2ZW50LmdldFBhcmFtZXRlcihcImFjY2VwdFwiKSkge1xuXHRcdFx0XHQvLyBVc2VyIGhhcyBjYW5jZWxsZWQgY3JlYXRpb246IGRlc3Ryb3kgdGhlIHRyYW5zaWVudCBsaXN0IGJpbmRpbmcgYW5kIGNsb3NlIHRoZSBkaWFsb2dcblx0XHRcdFx0dHJhbnNpZW50TGlzdEJpbmRpbmcuZGVzdHJveSgpO1xuXHRcdFx0XHRjcmVhdGVEaWFsb2cuY2xvc2VEaWFsb2coKTtcblx0XHRcdFx0cmVzdWx0UHJvbWlzZUtlZXBlci5yZWplY3QoRkVMaWJyYXJ5LkNvbnN0YW50cy5DYW5jZWxBY3Rpb25EaWFsb2cpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdGNyZWF0ZURpYWxvZy5zZXRCdXN5KHRydWUpO1xuXHRcdFx0cGFyYW1ldGVycy5iSXNDcmVhdGVEaWFsb2cgPSB0cnVlO1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0Y29uc3QgdHJhbnNpZW50RGF0YSA9IHRyYW5zaWVudENvbnRleHQuZ2V0T2JqZWN0KCk7XG5cdFx0XHRcdGxldCBjcmVhdGVEYXRhOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9O1xuXHRcdFx0XHRPYmplY3Qua2V5cyh0cmFuc2llbnREYXRhKS5mb3JFYWNoKChwcm9wZXJ0eVBhdGgpID0+IHtcblx0XHRcdFx0XHRjb25zdCBvUHJvcGVydHkgPSBtZXRhTW9kZWwuZ2V0T2JqZWN0KGAke2xpc3RNZXRhUGF0aH0vJHtwcm9wZXJ0eVBhdGh9YCk7XG5cdFx0XHRcdFx0Ly8gRW5zdXJlIG5hdmlnYXRpb24gcHJvcGVydGllcyBhcmUgbm90IHBhcnQgb2YgdGhlIHBheWxvYWQsIGFzIGRlZXAgY3JlYXRlIG5vdCBzdXBwb3J0ZWRcblx0XHRcdFx0XHQvLyBBbmQgcmVtb3ZlIGFueSBwcm9wZXJ0eSBzdGFydGluZyBieSBAJHVpNSBhcyB0aGV5IGFyZSBub3QgcHJvcGVydHkgY3JlYXRlZCBieSBmaWxsaW5nIHRoZSBmb3JtXG5cdFx0XHRcdFx0aWYgKG9Qcm9wZXJ0eSAmJiBvUHJvcGVydHkuJGtpbmQgIT09IFwiTmF2aWdhdGlvblByb3BlcnR5XCIgJiYgIXByb3BlcnR5UGF0aD8uc3RhcnRzV2l0aChcIkAkdWk1XCIpKSB7XG5cdFx0XHRcdFx0XHRjcmVhdGVEYXRhW3Byb3BlcnR5UGF0aF0gPSB0cmFuc2llbnREYXRhW3Byb3BlcnR5UGF0aF07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblxuXHRcdFx0XHRpZiAocGFyYW1ldGVycy5iZWZvcmVDcmVhdGVDYWxsQmFjaykge1xuXHRcdFx0XHRcdC8vYmVmb3JlQ3JlYXRlQ2FsbEJhY2sgZXhwZWN0cyBjcmVhdGVQYXJhbWV0ZXJzIG9mIHR5cGUgYW55W11cblx0XHRcdFx0XHRjb25zdCBjcmVhdGVEYXRhQXNBcnJheSA9IE9iamVjdC5lbnRyaWVzKGNyZWF0ZURhdGEpLm1hcCgoW2tleSwgdmFsdWVdKSA9PiAoeyBba2V5XTogdmFsdWUgfSkpO1xuXHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHRhd2FpdCB0b0VTNlByb21pc2UoXG5cdFx0XHRcdFx0XHRcdHBhcmFtZXRlcnMuYmVmb3JlQ3JlYXRlQ2FsbEJhY2soe1xuXHRcdFx0XHRcdFx0XHRcdGNvbnRleHRQYXRoOiBsaXN0QmluZGluZy5nZXRQYXRoKCksXG5cdFx0XHRcdFx0XHRcdFx0Y3JlYXRlUGFyYW1ldGVyczogY3JlYXRlRGF0YUFzQXJyYXlcblx0XHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdFx0XHRcdExvZy5lcnJvcihcIkVycm9yIHdoaWxlIGNyZWF0aW5nIHRoZSBuZXcgZG9jdW1lbnRcIiwgZXJyb3IgYXMgc3RyaW5nKTtcblx0XHRcdFx0XHRcdHRocm93IEZFTGlicmFyeS5Db25zdGFudHMuT25CZWZvcmVDcmVhdGVGYWlsZWQ7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGNyZWF0ZURhdGEgPSBjcmVhdGVEYXRhQXNBcnJheS5yZWR1Y2UoKHJlc3VsdCwgY3VycmVudE9iamVjdCkgPT4ge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHsgLi4ucmVzdWx0LCAuLi5jdXJyZW50T2JqZWN0IH07XG5cdFx0XHRcdFx0fSwge30pO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChPYmplY3Qua2V5cyhjcmVhdGVEYXRhKS5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0YXBwQ29tcG9uZW50LmdldE1vZGVsKFwidWlcIikuc2V0UHJvcGVydHkoVWlNb2RlbENvbnN0YW50cy5Eb2N1bWVudE1vZGlmaWVkLCB0cnVlKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb25zdCBuZXdDb250ZXh0ID0gYXdhaXQgdGhpcy5jcmVhdGVDb250ZXh0KGxpc3RCaW5kaW5nLCBjcmVhdGVEYXRhLCB7XG5cdFx0XHRcdFx0Y3JlYXRlQXRFbmQ6IHBhcmFtZXRlcnMuY3JlYXRlQXRFbmQsXG5cdFx0XHRcdFx0Y3JlYXRlSW5hY3RpdmU6IHBhcmFtZXRlcnMuaW5hY3RpdmUsXG5cdFx0XHRcdFx0cGFyZW50Q29udGV4dDogcGFyYW1ldGVycy5wYXJlbnRDb250ZXh0XG5cdFx0XHRcdH0pO1xuXG5cdFx0XHRcdGNvbnN0IGNyZWF0aW9uU3VjY2VzcyA9IGF3YWl0IHRoaXMud2FpdEZvckNyZWF0ZUNvbXBsZXRpb24obmV3Q29udGV4dCwgcGFyYW1ldGVycy5rZWVwVHJhbnNpZW50Q29udGV4dE9uRmFpbGVkID09PSB0cnVlKTtcblx0XHRcdFx0aWYgKGNyZWF0aW9uU3VjY2Vzcykge1xuXHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHRhd2FpdCBwYXJhbWV0ZXJzLmFmdGVyQ3JlYXRlQ2FsbEJhY2s/LihuZXdDb250ZXh0KTtcblx0XHRcdFx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0XHRcdFx0Y3JlYXRlRGlhbG9nLmRpc3BsYXlFcnJvck1lc3NhZ2VzKE1lc3NhZ2luZy5nZXRNZXNzYWdlTW9kZWwoKS5nZXREYXRhKCkpO1xuXHRcdFx0XHRcdFx0YXdhaXQgbWVzc2FnZUhhbmRsZXIuc2hvd01lc3NhZ2VEaWFsb2coeyBzaG93Qm91bmRTdGF0ZU1lc3NhZ2VzOiB0cnVlIH0pO1xuXG5cdFx0XHRcdFx0XHQvLyBEZWxldGUgdGhlIGNyZWF0ZWQgZG9jdW1lbnQgYW5kIHJlZnJlc2ggaXRzIGxpc3QgYmluZGluZyAob3RoZXJ3aXNlIHRoZSBjcmVhdGVkIGRvY3VtZW50IGlzIHN0aWxsIHZpc2libGUgaW4gdGhlIGxpc3QpXG5cdFx0XHRcdFx0XHRhd2FpdCB0aGlzLmRlbGV0ZURvY3VtZW50KG5ld0NvbnRleHQsIHsgc2lsZW50TW9kZTogdHJ1ZSB9LCBhcHBDb21wb25lbnQsIHJlc291cmNlTW9kZWwsIG1lc3NhZ2VIYW5kbGVyKTtcblx0XHRcdFx0XHRcdGF3YWl0IHRoaXMucmVmcmVzaExpc3RCaW5kaW5nKGxpc3RCaW5kaW5nLCBhcHBDb21wb25lbnQpO1xuXG5cdFx0XHRcdFx0XHRMb2cuZXJyb3IoXCJFcnJvciB3aGlsZSBjcmVhdGluZy9zYXZpbmcgdGhlIG5ldyBkb2N1bWVudFwiLCBlcnJvciBhcyBzdHJpbmcpO1xuXHRcdFx0XHRcdFx0dGhyb3cgRkVMaWJyYXJ5LkNvbnN0YW50cy5DcmVhdGlvbkZhaWxlZDtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHR0cmFuc2llbnRMaXN0QmluZGluZy5kZXN0cm95KCk7XG5cdFx0XHRcdFx0Y3JlYXRlRGlhbG9nLmNsb3NlRGlhbG9nKCk7XG5cdFx0XHRcdFx0cmVzdWx0UHJvbWlzZUtlZXBlci5yZXNvbHZlKG5ld0NvbnRleHQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuXHRcdFx0XHQvLyBpbiBjYXNlIG9mIGNyZWF0aW9uIGZhaWxlZCwgZGlhbG9nIHNob3VsZCBzdGF5IG9wZW4gLSB0byBhY2hpZXZlIHRoZSBzYW1lLCBub3RoaW5nIGhhcyB0byBiZSBkb25lIChsaWtlIGluIGNhc2Ugb2Ygc3VjY2VzcyB3aXRoIGJLZWVwRGlhbG9nT3Blbilcblx0XHRcdFx0aWYgKCFbRkVMaWJyYXJ5LkNvbnN0YW50cy5PbkJlZm9yZUNyZWF0ZUZhaWxlZCwgRkVMaWJyYXJ5LkNvbnN0YW50cy5DcmVhdGlvbkZhaWxlZF0uaW5jbHVkZXMoZXJyb3IpKSB7XG5cdFx0XHRcdFx0Ly8gb3RoZXIgZXJyb3JzIGFyZSBub3QgZXhwZWN0ZWRcblx0XHRcdFx0XHR0cmFuc2llbnRMaXN0QmluZGluZy5kZXN0cm95KCk7XG5cdFx0XHRcdFx0Y3JlYXRlRGlhbG9nLmNsb3NlRGlhbG9nKCk7XG5cdFx0XHRcdFx0cmVzdWx0UHJvbWlzZUtlZXBlci5yZWplY3QoZXJyb3IgYXMgc3RyaW5nIHwgRXJyb3IpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGZpbmFsbHkge1xuXHRcdFx0XHRjcmVhdGVEaWFsb2cuc2V0QnVzeShmYWxzZSk7XG5cdFx0XHRcdG1lc3NhZ2VIYW5kbGVyLnNob3dNZXNzYWdlcyh7IGlzT3BlcmF0aW9uRGlhbG9nT3BlbjogY3JlYXRlRGlhbG9nLmlzT3BlbigpIH0pO1xuXHRcdFx0fVxuXHRcdH07XG5cblx0XHRjcmVhdGVEaWFsb2cuYXR0YWNoRXhpdERpYWxvZyh7fSwgb25FeGl0RGlhbG9nKTtcblxuXHRcdHJldHVybiByZXN1bHRQcm9taXNlS2VlcGVyLnByb21pc2U7XG5cdH1cblxuXHQvKipcblx0ICogV2FpdHMgZm9yIHRoZSBjcmVhdGlvbiBvZiBhIGNvbnRleHQgdG8gYmUgZmluaXNoZWQuXG5cdCAqIEBwYXJhbSBuZXdDb250ZXh0IFRoZSBjb250ZXh0IGJlaW5nIGNyZWF0ZWRcblx0ICogQHBhcmFtIGtlZXBUcmFuc2llbnRDb250ZXh0T25GYWlsZWRcblx0ICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgY3JlYXRpb24gd2FzIHN1Y2Nlc3NmdWxcblx0ICovXG5cdGFzeW5jIHdhaXRGb3JDcmVhdGVDb21wbGV0aW9uKG5ld0NvbnRleHQ6IE9EYXRhVjRDb250ZXh0LCBrZWVwVHJhbnNpZW50Q29udGV4dE9uRmFpbGVkOiBib29sZWFuKTogUHJvbWlzZTxib29sZWFuPiB7XG5cdFx0Y29uc3QgcHJvbWlzZUtlZXBlciA9IG5ldyBQcm9taXNlS2VlcGVyPGJvb2xlYW4+KCk7XG5cdFx0Y29uc3QgcGFyZW50TGlzdEJpbmRpbmcgPSBuZXdDb250ZXh0LmdldEJpbmRpbmcoKSBhcyBPRGF0YUxpc3RCaW5kaW5nO1xuXG5cdFx0Y29uc3Qgb25DcmVhdGVDb21wbGV0ZWQgPSAoZXZlbnQ6IE9EYXRhTGlzdEJpbmRpbmckQ3JlYXRlQ29tcGxldGVkRXZlbnQpOiB2b2lkID0+IHtcblx0XHRcdGNvbnN0IGNyZWF0ZWRDb250ZXh0ID0gZXZlbnQuZ2V0UGFyYW1ldGVyKFwiY29udGV4dFwiKTtcblx0XHRcdGNvbnN0IHN1Y2Nlc3MgPSBldmVudC5nZXRQYXJhbWV0ZXIoXCJzdWNjZXNzXCIpO1xuXHRcdFx0aWYgKGNyZWF0ZWRDb250ZXh0ID09PSBuZXdDb250ZXh0KSB7XG5cdFx0XHRcdHBhcmVudExpc3RCaW5kaW5nLmRldGFjaENyZWF0ZUNvbXBsZXRlZChvbkNyZWF0ZUNvbXBsZXRlZCk7XG5cdFx0XHRcdHByb21pc2VLZWVwZXIucmVzb2x2ZShzdWNjZXNzID09PSB0cnVlKTtcblx0XHRcdH1cblx0XHR9O1xuXG5cdFx0cGFyZW50TGlzdEJpbmRpbmcuYXR0YWNoQ3JlYXRlQ29tcGxldGVkKG9uQ3JlYXRlQ29tcGxldGVkKTtcblxuXHRcdGNvbnN0IGNyZWF0aW9uU3VjY2Vzc2Z1bCA9IGF3YWl0IHByb21pc2VLZWVwZXIucHJvbWlzZTtcblx0XHRpZiAoIWNyZWF0aW9uU3VjY2Vzc2Z1bCkge1xuXHRcdFx0aWYgKCFrZWVwVHJhbnNpZW50Q29udGV4dE9uRmFpbGVkKSB7XG5cdFx0XHRcdC8vIENhbmNlbCB0aGUgcGVuZGluZyBQT1NUIGFuZCBkZWxldGUgdGhlIGNvbnRleHQgaW4gdGhlIGxpc3RCaW5kaW5nXG5cdFx0XHRcdChuZXdDb250ZXh0LmNyZWF0ZWQoKSA/PyBQcm9taXNlLnJlc29sdmUoKSkuY2F0Y2goZnVuY3Rpb24gKGNvbnRleHRFcnJvcjogdW5rbm93bikge1xuXHRcdFx0XHRcdExvZy50cmFjZShcInRyYW5zaWVudCBjcmVhdGlvbiBjb250ZXh0IGRlbGV0aW9uIGVycm9yXCIsIGNvbnRleHRFcnJvciBhcyBzdHJpbmcpO1xuXHRcdFx0XHR9KTtcblx0XHRcdFx0cGFyZW50TGlzdEJpbmRpbmcucmVzZXRDaGFuZ2VzKCk7XG5cdFx0XHRcdHBhcmVudExpc3RCaW5kaW5nLmdldE1vZGVsKCkucmVzZXRDaGFuZ2VzKHBhcmVudExpc3RCaW5kaW5nLmdldFVwZGF0ZUdyb3VwSWQoKSk7XG5cdFx0XHRcdHRocm93IEZFTGlicmFyeS5Db25zdGFudHMuQ3JlYXRpb25GYWlsZWQ7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGF3YWl0IG5ld0NvbnRleHQuY3JlYXRlZCgpO1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFJldHJpZXZlcyB0aGUgbmFtZSBvZiB0aGUgTmV3QWN0aW9uIHRvIGJlIGV4ZWN1dGVkLlxuXHQgKiBAcGFyYW0gb1N0YXJ0dXBQYXJhbWV0ZXJzIFN0YXJ0dXAgcGFyYW1ldGVycyBvZiB0aGUgYXBwbGljYXRpb25cblx0ICogQHBhcmFtIFtvU3RhcnR1cFBhcmFtZXRlcnMucHJlZmVycmVkTW9kZV1cblx0ICogQHBhcmFtIHNDcmVhdGVIYXNoIEhhc2ggdG8gYmUgY2hlY2tlZCBmb3IgYWN0aW9uIHR5cGVcblx0ICogQHBhcmFtIG9NZXRhTW9kZWwgVGhlIE1ldGFNb2RlbCB1c2VkIHRvIGNoZWNrIGZvciBOZXdBY3Rpb24gcGFyYW1ldGVyXG5cdCAqIEBwYXJhbSBzTWV0YVBhdGggVGhlIE1ldGFQYXRoXG5cdCAqIEByZXR1cm5zIFRoZSBuYW1lIG9mIHRoZSBhY3Rpb25cblx0ICogQGZpbmFsXG5cdCAqL1xuXHRfZ2V0TmV3QWN0aW9uKFxuXHRcdG9TdGFydHVwUGFyYW1ldGVyczoge1xuXHRcdFx0cHJlZmVycmVkTW9kZT86IHN0cmluZ1tdO1xuXHRcdH0sXG5cdFx0c0NyZWF0ZUhhc2g6IHN0cmluZyxcblx0XHRvTWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCxcblx0XHRzTWV0YVBhdGg6IHN0cmluZ1xuXHQpOiBzdHJpbmcge1xuXHRcdGxldCBzTmV3QWN0aW9uO1xuXG5cdFx0aWYgKG9TdGFydHVwUGFyYW1ldGVycyAmJiBvU3RhcnR1cFBhcmFtZXRlcnMucHJlZmVycmVkTW9kZSAmJiBzQ3JlYXRlSGFzaC50b1VwcGVyQ2FzZSgpLmluY2x1ZGVzKFwiSS1BQ1RJT049Q1JFQVRFV0lUSFwiKSkge1xuXHRcdFx0Y29uc3Qgc1ByZWZlcnJlZE1vZGUgPSBvU3RhcnR1cFBhcmFtZXRlcnMucHJlZmVycmVkTW9kZVswXTtcblx0XHRcdHNOZXdBY3Rpb24gPSBzUHJlZmVycmVkTW9kZS50b1VwcGVyQ2FzZSgpLmluY2x1ZGVzKFwiQ1JFQVRFV0lUSDpcIilcblx0XHRcdFx0PyBzUHJlZmVycmVkTW9kZS5zdWJzdHJpbmcoc1ByZWZlcnJlZE1vZGUubGFzdEluZGV4T2YoXCI6XCIpICsgMSlcblx0XHRcdFx0OiB1bmRlZmluZWQ7XG5cdFx0fSBlbHNlIGlmIChcblx0XHRcdG9TdGFydHVwUGFyYW1ldGVycyAmJlxuXHRcdFx0b1N0YXJ0dXBQYXJhbWV0ZXJzLnByZWZlcnJlZE1vZGUgJiZcblx0XHRcdHNDcmVhdGVIYXNoLnRvVXBwZXJDYXNlKCkuaW5jbHVkZXMoXCJJLUFDVElPTj1BVVRPQ1JFQVRFV0lUSFwiKVxuXHRcdCkge1xuXHRcdFx0Y29uc3Qgc1ByZWZlcnJlZE1vZGUgPSBvU3RhcnR1cFBhcmFtZXRlcnMucHJlZmVycmVkTW9kZVswXTtcblx0XHRcdHNOZXdBY3Rpb24gPSBzUHJlZmVycmVkTW9kZS50b1VwcGVyQ2FzZSgpLmluY2x1ZGVzKFwiQVVUT0NSRUFURVdJVEg6XCIpXG5cdFx0XHRcdD8gc1ByZWZlcnJlZE1vZGUuc3Vic3RyaW5nKHNQcmVmZXJyZWRNb2RlLmxhc3RJbmRleE9mKFwiOlwiKSArIDEpXG5cdFx0XHRcdDogdW5kZWZpbmVkO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRzTmV3QWN0aW9uID1cblx0XHRcdFx0b01ldGFNb2RlbCAmJiBvTWV0YU1vZGVsLmdldE9iamVjdCAhPT0gdW5kZWZpbmVkXG5cdFx0XHRcdFx0PyBvTWV0YU1vZGVsLmdldE9iamVjdChgJHtzTWV0YVBhdGh9QGNvbS5zYXAudm9jYWJ1bGFyaWVzLlNlc3Npb24udjEuU3RpY2t5U2Vzc2lvblN1cHBvcnRlZC9OZXdBY3Rpb25gKSB8fFxuXHRcdFx0XHRcdCAgb01ldGFNb2RlbC5nZXRPYmplY3QoYCR7c01ldGFQYXRofUBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuRHJhZnRSb290L05ld0FjdGlvbmApXG5cdFx0XHRcdFx0OiB1bmRlZmluZWQ7XG5cdFx0fVxuXHRcdHJldHVybiBzTmV3QWN0aW9uO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHJpZXZlcyB0aGUgbGFiZWwgZm9yIHRoZSB0aXRsZSBvZiBhIHNwZWNpZmljIGNyZWF0ZSBhY3Rpb24gZGlhbG9nLCBlLmcuIENyZWF0ZSBTYWxlcyBPcmRlciBmcm9tIFF1b3RhdGlvbi5cblx0ICpcblx0ICogVGhlIGZvbGxvd2luZyBwcmlvcml0eSBpcyBhcHBsaWVkOlxuXHQgKiAxLiBsYWJlbCBvZiBsaW5lLWl0ZW0gYW5ub3RhdGlvbi5cblx0ICogMi4gbGFiZWwgYW5ub3RhdGVkIGluIHRoZSBhY3Rpb24uXG5cdCAqIDMuIFwiQ3JlYXRlXCIgYXMgYSBjb25zdGFudCBmcm9tIGkxOG4uXG5cdCAqIEBwYXJhbSBvTWV0YU1vZGVsIFRoZSBNZXRhTW9kZWwgdXNlZCB0byBjaGVjayBmb3IgdGhlIE5ld0FjdGlvbiBwYXJhbWV0ZXJcblx0ICogQHBhcmFtIHNNZXRhUGF0aCBUaGUgTWV0YVBhdGhcblx0ICogQHBhcmFtIHNOZXdBY3Rpb24gQ29udGFpbnMgdGhlIG5hbWUgb2YgdGhlIGFjdGlvbiB0byBiZSBleGVjdXRlZFxuXHQgKiBAcGFyYW0gcmVzb3VyY2VNb2RlbCBSZXNvdXJjZUJ1bmRsZSB0byBhY2Nlc3MgdGhlIGRlZmF1bHQgQ3JlYXRlIGxhYmVsXG5cdCAqIEByZXR1cm5zIFRoZSBsYWJlbCBmb3IgdGhlIENyZWF0ZSBBY3Rpb24gRGlhbG9nXG5cdCAqIEBmaW5hbFxuXHQgKi9cblx0X2dldFNwZWNpZmljQ3JlYXRlQWN0aW9uRGlhbG9nTGFiZWwoXG5cdFx0b01ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWwgfCB1bmRlZmluZWQsXG5cdFx0c01ldGFQYXRoOiBzdHJpbmcsXG5cdFx0c05ld0FjdGlvbjogc3RyaW5nLFxuXHRcdHJlc291cmNlTW9kZWw6IFJlc291cmNlTW9kZWwgfCB1bmRlZmluZWRcblx0KTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0XHRjb25zdCBsaW5lSXRlbXMgPSBvTWV0YU1vZGVsPy5nZXRPYmplY3QoYCR7c01ldGFQYXRofS9AY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuTGluZUl0ZW1gKSBhcyBMaW5lSXRlbSB8IHVuZGVmaW5lZDtcblxuXHRcdGNvbnN0IGxhYmVsID0gbGluZUl0ZW1zPy5maW5kKChsaW5lSXRlbSkgPT4gaXNEYXRhRmllbGRGb3JBY3Rpb24obGluZUl0ZW0pICYmIGxpbmVJdGVtLkFjdGlvbi5zcGxpdChcIihcIiwgMSlbMF0gPT09IHNOZXdBY3Rpb24pXG5cdFx0XHQ/LkxhYmVsO1xuXG5cdFx0cmV0dXJuIChcblx0XHRcdGxhYmVsIHx8XG5cdFx0XHRvTWV0YU1vZGVsPy5nZXRPYmplY3QoYCR7c01ldGFQYXRofS8ke3NOZXdBY3Rpb259QGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5MYWJlbGApIHx8XG5cdFx0XHRyZXNvdXJjZU1vZGVsPy5nZXRUZXh0KFwiQ19UUkFOU0FDVElPTl9IRUxQRVJfU0FQRkVfQUNUSU9OX0NSRUFURVwiKVxuXHRcdCk7XG5cdH1cbn1cblxuY29uc3Qgc2luZ2xldG9uID0gbmV3IFRyYW5zYWN0aW9uSGVscGVyKCk7XG5leHBvcnQgZGVmYXVsdCBzaW5nbGV0b247XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztFQTJEQSxNQUFNQSxZQUFZLEdBQUdDLFNBQVMsQ0FBQ0QsWUFBWTtFQUMzQyxNQUFNRSxnQkFBZ0IsR0FBR0QsU0FBUyxDQUFDQyxnQkFBZ0I7O0VBRW5EO0VBQ0EsTUFBTUMsaUJBQWlCLEdBQUdDLFlBQVksQ0FBQ0QsaUJBQWlCO0VBQ3hELE1BQU1FLDBCQUEwQixHQUFHRCxZQUFZLENBQUNDLDBCQUEwQjs7RUFFMUU7RUFDQSxTQUFTQyxhQUFhQSxDQUFJQyxXQUF1QixFQUFLO0lBQ3JELElBQUlBLFdBQVcsSUFBS0EsV0FBVyxDQUFXQyxXQUFXLElBQUtELFdBQVcsQ0FBV0MsV0FBVyxDQUFDLENBQUMsQ0FBQ0MsT0FBTyxDQUFDLENBQUMsS0FBSyxtQkFBbUIsRUFBRTtNQUNoSUYsV0FBVyxHQUFHLENBQUMsQ0FBTTtJQUN0QjtJQUNBLE9BQVFBLFdBQVcsSUFBVyxDQUFD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
|