@sapui5/sap.fe.core 1.136.1 → 1.136.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/sap/fe/core/.library +1 -1
- package/src/sap/fe/core/AppStateHandler.js +9 -2
- package/src/sap/fe/core/AppStateHandler.ts +8 -2
- package/src/sap/fe/core/controllerextensions/EditFlow.js +30 -23
- package/src/sap/fe/core/controllerextensions/EditFlow.ts +33 -31
- package/src/sap/fe/core/controllerextensions/InlineEditFlow.js +27 -41
- package/src/sap/fe/core/controllerextensions/InlineEditFlow.ts +27 -41
- package/src/sap/fe/core/controllerextensions/InternalRouting.js +16 -2
- package/src/sap/fe/core/controllerextensions/InternalRouting.ts +15 -1
- package/src/sap/fe/core/controllerextensions/MessageHandler.js +4 -4
- package/src/sap/fe/core/controllerextensions/MessageHandler.ts +22 -15
- package/src/sap/fe/core/controllerextensions/SideEffects.js +3 -2
- package/src/sap/fe/core/controllerextensions/SideEffects.ts +2 -2
- package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.js +2 -1
- package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.ts +1 -0
- package/src/sap/fe/core/controllerextensions/dialog/ODataStrictDialog.js +9 -5
- package/src/sap/fe/core/controllerextensions/dialog/ODataStrictDialog.tsx +8 -3
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +30 -3
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.ts +26 -3
- package/src/sap/fe/core/controllerextensions/editFlow/draft.js +18 -13
- package/src/sap/fe/core/controllerextensions/editFlow/draft.ts +33 -14
- package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataOperation.js +5 -3
- package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataOperation.ts +5 -1
- package/src/sap/fe/core/controllerextensions/editFlow/sticky.js +5 -3
- package/src/sap/fe/core/controllerextensions/editFlow/sticky.ts +10 -2
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +15 -5
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.ts +21 -6
- package/src/sap/fe/core/controls/inlineEditFlow/InlineEditExitDialog.js +144 -0
- package/src/sap/fe/core/controls/inlineEditFlow/{BeforeNavigationDialog.tsx → InlineEditExitDialog.tsx} +1 -1
- package/src/sap/fe/core/converters/controls/Common/Action.js +17 -12
- package/src/sap/fe/core/converters/controls/Common/Action.ts +19 -11
- package/src/sap/fe/core/converters/controls/Common/Table.js +14 -2
- package/src/sap/fe/core/converters/controls/Common/Table.ts +13 -1
- package/src/sap/fe/core/converters/controls/Common/table/Columns.js +11 -10
- package/src/sap/fe/core/converters/controls/Common/table/Columns.ts +13 -1
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +11 -6
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +17 -10
- package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +28 -3
- package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +26 -1
- package/src/sap/fe/core/designtime/messagebundle_en_US_saprigi.properties +7 -0
- package/src/sap/fe/core/fpm/manifest.json +1 -1
- package/src/sap/fe/core/helpers/DeleteHelper.js +9 -9
- package/src/sap/fe/core/helpers/DeleteHelper.ts +8 -9
- package/src/sap/fe/core/helpers/ModelHelper.js +53 -5
- package/src/sap/fe/core/helpers/ModelHelper.ts +53 -3
- package/src/sap/fe/core/library.js +1 -1
- package/src/sap/fe/core/messagebundle_ar.properties +3 -2
- package/src/sap/fe/core/messagebundle_bg.properties +2 -1
- package/src/sap/fe/core/messagebundle_ca.properties +2 -1
- package/src/sap/fe/core/messagebundle_cnr.properties +2 -1
- package/src/sap/fe/core/messagebundle_cs.properties +4 -3
- package/src/sap/fe/core/messagebundle_cy.properties +2 -1
- package/src/sap/fe/core/messagebundle_da.properties +2 -1
- package/src/sap/fe/core/messagebundle_de.properties +8 -7
- package/src/sap/fe/core/messagebundle_el.properties +4 -3
- package/src/sap/fe/core/messagebundle_en.properties +2 -1
- package/src/sap/fe/core/messagebundle_en_GB.properties +2 -1
- package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +2 -1
- package/src/sap/fe/core/messagebundle_es.properties +5 -4
- package/src/sap/fe/core/messagebundle_es_MX.properties +2 -1
- package/src/sap/fe/core/messagebundle_et.properties +2 -1
- package/src/sap/fe/core/messagebundle_fi.properties +2 -1
- package/src/sap/fe/core/messagebundle_fr.properties +2 -1
- package/src/sap/fe/core/messagebundle_fr_CA.properties +2 -1
- package/src/sap/fe/core/messagebundle_hi.properties +2 -1
- package/src/sap/fe/core/messagebundle_hr.properties +2 -1
- package/src/sap/fe/core/messagebundle_hu.properties +2 -1
- package/src/sap/fe/core/messagebundle_id.properties +2 -1
- package/src/sap/fe/core/messagebundle_it.properties +2 -1
- package/src/sap/fe/core/messagebundle_iw.properties +2 -1
- package/src/sap/fe/core/messagebundle_ja.properties +3 -2
- package/src/sap/fe/core/messagebundle_kk.properties +2 -1
- package/src/sap/fe/core/messagebundle_ko.properties +2 -1
- package/src/sap/fe/core/messagebundle_lt.properties +2 -1
- package/src/sap/fe/core/messagebundle_lv.properties +2 -1
- package/src/sap/fe/core/messagebundle_mk.properties +2 -1
- package/src/sap/fe/core/messagebundle_ms.properties +2 -1
- package/src/sap/fe/core/messagebundle_nl.properties +2 -1
- package/src/sap/fe/core/messagebundle_no.properties +3 -2
- package/src/sap/fe/core/messagebundle_pl.properties +2 -1
- package/src/sap/fe/core/messagebundle_pt.properties +2 -1
- package/src/sap/fe/core/messagebundle_pt_PT.properties +2 -1
- package/src/sap/fe/core/messagebundle_ro.properties +2 -1
- package/src/sap/fe/core/messagebundle_ru.properties +2 -1
- package/src/sap/fe/core/messagebundle_sh.properties +2 -1
- package/src/sap/fe/core/messagebundle_sk.properties +2 -1
- package/src/sap/fe/core/messagebundle_sl.properties +2 -1
- package/src/sap/fe/core/messagebundle_sr.properties +2 -1
- package/src/sap/fe/core/messagebundle_sv.properties +2 -1
- package/src/sap/fe/core/messagebundle_th.properties +2 -1
- package/src/sap/fe/core/messagebundle_tr.properties +2 -1
- package/src/sap/fe/core/messagebundle_uk.properties +2 -1
- package/src/sap/fe/core/messagebundle_vi.properties +2 -1
- package/src/sap/fe/core/messagebundle_zh_CN.properties +2 -1
- package/src/sap/fe/core/messagebundle_zh_TW.properties +2 -1
- package/src/sap/fe/core/rootView/Fcl.controller.js +8 -3
- package/src/sap/fe/core/rootView/Fcl.controller.ts +14 -7
- package/src/sap/fe/core/services/collaborativeDraftServiceFactory.js +8 -2
- package/src/sap/fe/core/services/collaborativeDraftServiceFactory.ts +7 -1
- package/src/sap/fe/core/templating/EntitySetHelper.js +75 -90
- package/src/sap/fe/core/templating/EntitySetHelper.ts +92 -118
- package/src/sap/fe/core/controls/inlineEditFlow/BeforeActionDialog.js +0 -68
- package/src/sap/fe/core/controls/inlineEditFlow/BeforeActionDialog.tsx +0 -52
- package/src/sap/fe/core/controls/inlineEditFlow/BeforeNavigationDialog.js +0 -144
|
@@ -1554,9 +1554,21 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/core/conver
|
|
|
1554
1554
|
rowCount: 3
|
|
1555
1555
|
};
|
|
1556
1556
|
} else {
|
|
1557
|
+
let initialRowCount;
|
|
1558
|
+
switch (tableType) {
|
|
1559
|
+
case "GridTable":
|
|
1560
|
+
initialRowCount = tableSettings.rowCountMode === "Auto" ? 3 : 5;
|
|
1561
|
+
break;
|
|
1562
|
+
case "TreeTable":
|
|
1563
|
+
case "AnalyticalTable":
|
|
1564
|
+
initialRowCount = tableSettings.rowCountMode === "Auto" ? 3 : 10;
|
|
1565
|
+
break;
|
|
1566
|
+
default:
|
|
1567
|
+
initialRowCount = 5;
|
|
1568
|
+
}
|
|
1557
1569
|
return {
|
|
1558
1570
|
rowCountMode: tableSettings.rowCountMode ?? "Fixed",
|
|
1559
|
-
rowCount: tableSettings.rowCount ??
|
|
1571
|
+
rowCount: tableSettings.rowCount ?? initialRowCount
|
|
1560
1572
|
};
|
|
1561
1573
|
}
|
|
1562
1574
|
} else {
|
|
@@ -1916,4 +1928,4 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/core/conver
|
|
|
1916
1928
|
getCustomFunctionInfo
|
|
1917
1929
|
};
|
|
1918
1930
|
}, false);
|
|
1919
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJnZXRUYWJsZUFjdGlvbnMiLCJsaW5lSXRlbUFubm90YXRpb24iLCJ2aXN1YWxpemF0aW9uUGF0aCIsImNvbnZlcnRlckNvbnRleHQiLCJzdGFuZGFyZEFjdGlvbnMiLCJuYXZpZ2F0aW9uU2V0dGluZ3MiLCJpc0NvbGxhYm9yYXRpb25FbmFibGVkIiwiTW9kZWxIZWxwZXIiLCJpc0NvbGxhYm9yYXRpb25EcmFmdFN1cHBvcnRlZEZyb21Db252ZXJ0ZXJDb250ZXh0IiwidGFibGVBY3Rpb25zIiwiZ2V0VGFibGVBbm5vdGF0aW9uQWN0aW9ucyIsIm1hbmlmZXN0QWN0aW9ucyIsImdldEFjdGlvbnNGcm9tTWFuaWZlc3QiLCJnZXRNYW5pZmVzdENvbnRyb2xDb25maWd1cmF0aW9uIiwiYWN0aW9ucyIsImNvcHlBY3Rpb25zIiwiZmlsdGVyIiwiYSIsInR5cGUiLCJBY3Rpb25UeXBlIiwiQ29weSIsImFubm90YXRpb25BY3Rpb25zIiwiYW5ub3RhdGlvbkFuZFN0YW5kYXJkQWN0aW9ucyIsImNyZWF0ZSIsImRlbGV0ZSIsIm1hc3NFZGl0IiwiaW5zaWdodHMiLCJjcmVhdGlvblJvdyIsImN1dCIsImNvcHkiLCJwYXN0ZSIsIm1vdmVVcCIsIm1vdmVEb3duIiwiYWN0aW9uIiwidW5kZWZpbmVkIiwibWFuaWZlc3RBY3Rpb24iLCJPYmplY3QiLCJ2YWx1ZXMiLCJEZWZhdWx0IiwiTWVudSIsInBvc2l0aW9uIiwiYW5jaG9yIiwiU3RhbmRhcmRBY3Rpb25LZXlzIiwiQ3JlYXRlIiwicGxhY2VtZW50IiwiUGxhY2VtZW50IiwiQmVmb3JlIiwibWFuaWZlc3RBY3Rpb25FbnRyaWVzIiwiZW50cmllcyIsInN0YW5kYXJkTWFuaWZlc3RBY3Rpb25zIiwiZnJvbUVudHJpZXMiLCJfcmVmIiwia2V5Iiwic3RhcnRzV2l0aCIsIm5vblN0YW5kYXJkTWFuaWZlc3RBY3Rpb25zIiwiX3JlZjIiLCJhY3Rpb25PdmVyd3JpdGVDb25maWciLCJpc05hdmlnYWJsZSIsIk92ZXJyaWRlVHlwZSIsIm92ZXJ3cml0ZSIsImVuYWJsZU9uU2VsZWN0IiwiZW5hYmxlQXV0b1Njcm9sbCIsImVuYWJsZWQiLCJ2aXNpYmxlIiwidmlzaWJsZUZvckNvbnRleHRNZW51IiwiZGVmYXVsdFZhbHVlc0V4dGVuc2lvbkZ1bmN0aW9uIiwiY29tbWFuZCIsIm1lbnUiLCJhbm5vdGF0aW9uTWVudUFjdGlvbkl0ZW1zIiwiZ2V0QW5ub3RhdGlvbk1lbnVBY3Rpb25JdGVtcyIsIm1hdGNoaW5nTWFuaWZlc3RBY3Rpb25zIiwiZ2V0TWF0Y2hpbmdNYW5pZmVzdEFjdGlvbiIsIm92ZXJ3cml0dGVuTWVudUFjdGlvbkl0ZW1zIiwiaW5zZXJ0Q3VzdG9tRWxlbWVudHMiLCJwcmVwYXJlTWVudUFjdGlvbnMiLCJyZW1vdmVEdXBsaWNhdGVBY3Rpb25zIiwiZ2V0VmlzaWJpbGl0eUVuYWJsZW1lbnRNZW51QWN0aW9ucyIsImFkZENvbGxhYm9yYXRpb25Db25kaXRpb24iLCJjb21tYW5kQWN0aW9ucyIsIl9leHBvcnRzIiwiZ2V0Q29udGV4dERlZmluaW5nUHJvcGVydGllc0Zyb21BZ2dyZWdhdGlvbkFubm90YXRpb24iLCJhZ2dyZWdhdGlvbkhlbHBlciIsImN1c3RvbUFnZ3JlZ2F0ZUFubm90YXRpb25zIiwiZ2V0Q3VzdG9tQWdncmVnYXRlRGVmaW5pdGlvbnMiLCJjdXN0b21BZ2dyZWdhdGVkZWZpbml0aW9ucyIsImZvckVhY2giLCJhbm5vdGF0aW9uIiwiYWdncmVnYXRlZFByb3BlcnR5IiwiX2VudGl0eVR5cGUiLCJlbnRpdHlQcm9wZXJ0aWVzIiwiZmluZCIsInByb3BlcnR5IiwibmFtZSIsInF1YWxpZmllciIsImNvbnRleHREZWZpbmluZ1Byb3BlcnRpZXMiLCJhbm5vdGF0aW9ucyIsIkFnZ3JlZ2F0aW9uIiwiQ29udGV4dERlZmluaW5nUHJvcGVydGllcyIsIm1hcCIsImN0eERlZlByb3BlcnR5IiwidmFsdWUiLCJnZXRFeHRlbnNpb25JbmZvRnJvbUVudGl0eVR5cGUiLCJlbnRpdHlUeXBlIiwidGFibGVDb2x1bW5zIiwiQWdncmVnYXRpb25IZWxwZXIiLCJpc0FuYWx5dGljc1N1cHBvcnRlZCIsImN1cnJlbmN5T3JVbml0UHJvcGVydGllcyIsIlNldCIsImNvbHVtbiIsInRhYmxlQ29sdW1uIiwidW5pdCIsInRhcmdldFVuaXRQcm9wZXJ0eSIsInByb3AiLCJhZGQiLCJyZWxhdGl2ZVBhdGgiLCJjb250ZXh0RGVmaW5pbmdQcm9wZXJ0aWVzRnJvbUFnZ3JlZ2F0aW9uIiwicmVzdWx0IiwicHJvcGVydHlJbmZvcyIsInJhd0NvbnRleHREZWZpbmluZ1Byb3BlcnRpZXMiLCJmcm9tR3JvdXBhYmxlUHJvcGVydHkiLCJpc1Byb3BlcnR5R3JvdXBhYmxlIiwiaGFzIiwiY29udGV4dERlZmluaW5nUHJvcGVydHlOYW1lIiwiZm91bmRDb2x1bW4iLCJmaW5kQ29sdW1uQnlQYXRoIiwicHVzaCIsImxlbmd0aCIsImFkZGl0aW9uYWxQcm9wZXJ0aWVzIiwidXBkYXRlVGFibGVWaXN1YWxpemF0aW9uRm9yVHlwZSIsInRhYmxlVmlzdWFsaXphdGlvbiIsInByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uIiwiY29udHJvbCIsImFnZ3JlZ2F0aW9uRGF0YSIsImNvbHVtbnMiLCJlbmFibGVBbmFseXRpY3MiLCJlbmFibGUkc2VsZWN0IiwiZW5hYmxlJCRnZXRLZWVwQWxpdmVDb250ZXh0IiwiYW5hbHl0aWNzRXh0ZW5zaW9ucyIsIl91cGRhdGVQcm9wZXJ0eUluZm9zV2l0aEFnZ3JlZ2F0ZXNEZWZpbml0aW9ucyIsImFsbG93ZWRUcmFuc2Zvcm1hdGlvbnMiLCJnZXRBbGxvd2VkVHJhbnNmb3JtYXRpb25zIiwiZW5hYmxlQmFzaWNTZWFyY2giLCJpbmNsdWRlcyIsImdyb3VwQ29uZGl0aW9ucyIsImdldEdyb3VwQ29uZGl0aW9ucyIsImFnZ3JlZ2F0ZUNvbmRpdGlvbnMiLCJnZXRBZ2dyZWdhdGVDb25kaXRpb25zIiwiTG9nIiwiZXJyb3IiLCJjaGFuZ2VTaWJsaW5nRm9yUm9vdHNTdXBwb3J0ZWQiLCJIaWVyYXJjaHkiLCJoaWVyYXJjaHlRdWFsaWZpZXIiLCJDaGFuZ2VTaWJsaW5nRm9yUm9vdHNTdXBwb3J0ZWQiLCJhbGxvd0Ryb3BCZXR3ZWVuTm9kZXMiLCJDaGFuZ2VOZXh0U2libGluZ0FjdGlvbiIsImlzT2JqZWN0UGF0aERyYWZ0U3VwcG9ydGVkIiwiZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCIsInJlcXVlc3RBdExlYXN0IiwiYW5hbHl0aWNhbENvbmZpZ3VyYXRpb24iLCJhZ2dyZWdhdGlvbk9uTGVhZkxldmVsIiwiaXNEcmFmdFJvb3QiLCJnZXRFbnRpdHlTZXQiLCJnZXRNYW5pZmVzdFdyYXBwZXIiLCJpc0ZjbEVuYWJsZWQiLCJlbmFibGVVcGxvYWRQbHVnaW4iLCJzdHJlYW1Qcm9wZXJ0eSIsImdldEFubm90YXRpb25FbnRpdHlUeXBlIiwiVUkiLCJNZWRpYVJlc291cmNlIiwiU3RyZWFtIiwiJHRhcmdldCIsInVwbG9hZEFjdGlvbiIsInVwbG9hZFRhYmxlIiwic3RyZWFtIiwiZmlsZU5hbWUiLCJDb3JlIiwiQ29udGVudERpc3Bvc2l0aW9uIiwiRmlsZW5hbWUiLCJwYXRoIiwiZmlsZU5hbWVNYXhMZW5ndGgiLCJtYXhMZW5ndGgiLCJhY2NlcHRhYmxlTWVkaWFUeXBlcyIsIkFjY2VwdGFibGVNZWRpYVR5cGVzIiwiY3JlYXRlUmVxdWVzdGVkUHJvcGVydGllcyIsImxpbmVJdGVtIiwib3BlcmF0aW9uQXZhaWxhYmxlIiwic2VsZWN0ZWRGaWVsZHMiLCJwdXNoRmllbGQiLCJmaWVsZE5hbWUiLCJvcmlnaW4iLCJpbmRleE9mIiwicHVzaEZpZWxkTGlzdCIsImZpZWxkcyIsImZpZWxkIiwib3BlcmF0aW9uQXZhaWxhYmxlUHJvcGVydGllcyIsInNwbGl0IiwidmFsaWRQcm9wZXJ0aWVzIiwicHJvcE5hbWUiLCJyZXNvbHZlUGF0aCIsInNlbWFudGljS2V5cyIsIkNvbW1vbiIsIlNlbWFudGljS2V5Iiwic2VtYW50aWNLZXkiLCJjYXBhYmlsaXRpZXNBbm5vdGF0aW9uIiwiQ2FwYWJpbGl0aWVzIiwiYWx0ZXJuYXRlQW5kU2Vjb25kYXJ5S2V5cyIsImdldEFsdGVybmF0ZUFuZFNlY29uZGFyeUtleXMiLCJSZXF1ZXN0QXRMZWFzdCIsInByb3BlcnR5UGF0aCIsImdldE5hdmlnYXRpb25BdmFpbGFibGVGaWVsZHNGcm9tTGluZUl0ZW0iLCJEZWxldGVSZXN0cmljdGlvbnMiLCJEZWxldGFibGUiLCJVcGRhdGVSZXN0cmljdGlvbnMiLCJVcGRhdGFibGUiLCJyZWNvcmQiLCIkVHlwZSIsIklubGluZSIsIkRldGVybWluaW5nIiwiaXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24iLCJOYXZpZ2F0aW9uQXZhaWxhYmxlIiwiZ2V0TmF2aWdhdGlvblRhcmdldFBhdGgiLCJuYXZpZ2F0aW9uUHJvcGVydHlQYXRoIiwibWFuaWZlc3RXcmFwcGVyIiwiZ2V0TmF2aWdhdGlvbkNvbmZpZ3VyYXRpb24iLCJuYXZDb25maWciLCJrZXlzIiwiZGF0YU1vZGVsUGF0aCIsImNvbnRleHRQYXRoIiwiZ2V0Q29udGV4dFBhdGgiLCJuYXZDb25maWdGb3JDb250ZXh0UGF0aCIsInRhcmdldEVudGl0eVNldCIsInN0YXJ0aW5nRW50aXR5U2V0IiwiZ2V0U2VtYW50aWNLZXlzQW5kVGl0bGVJbmZvIiwiaGVhZGVySW5mb1RpdGxlUGF0aCIsIkhlYWRlckluZm8iLCJUaXRsZSIsIlZhbHVlIiwic2VtYW50aWNLZXlBbm5vdGF0aW9ucyIsImhlYWRlckluZm9UeXBlTmFtZSIsIlR5cGVOYW1lIiwic2VtYW50aWNLZXlDb2x1bW5zIiwib0NvbHVtbiIsImNyZWF0ZVRhYmxlVmlzdWFsaXphdGlvbiIsInBhcmFtcyIsImlzQ29uZGVuc2VkVGFibGVMYXlvdXRDb21wbGlhbnQiLCJzZWxlY3Rpb25WYXJpYW50QW5ub3RhdGlvbiIsInRhYmxlTWFuaWZlc3RDb25maWciLCJnZXRUYWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbiIsInNwbGl0UGF0aCIsIm5hdmlnYXRpb25UYXJnZXRQYXRoIiwiZ2V0VGFibGVDb2x1bW5zIiwib3BlcmF0aW9uQXZhaWxhYmxlTWFwIiwiZ2V0T3BlcmF0aW9uQXZhaWxhYmxlTWFwIiwic2VtYW50aWNLZXlzQW5kSGVhZGVySW5mb1RpdGxlIiwic3RhbmRhcmRBY3Rpb25zQ29uZmlndXJhdGlvbiIsImdldFN0YW5kYXJkQWN0aW9uc0NvbmZpZ3VyYXRpb24iLCJ0YWJsZUFubm90YXRpb24iLCJnZXRUYWJsZUFubm90YXRpb25Db25maWd1cmF0aW9uIiwiZ2V0T3BlcmF0aW9uQXZhaWxhYmxlUHJvcGVydGllcyIsImhlYWRlciIsInRpdGxlIiwib1Zpc3VhbGl6YXRpb24iLCJWaXN1YWxpemF0aW9uVHlwZSIsIlRhYmxlIiwiSlNPTiIsInN0cmluZ2lmeSIsImhlYWRlckluZm9UaXRsZSIsImhlYWRlclZpc2libGUiLCJoYW5kbGVQYXRjaFNlbnQiLCJnZXRUZW1wbGF0ZVR5cGUiLCJUZW1wbGF0ZVR5cGUiLCJMaXN0UmVwb3J0IiwidXBkYXRlTGlua2VkUHJvcGVydGllcyIsImNyZWF0ZURlZmF1bHRUYWJsZVZpc3VhbGl6YXRpb24iLCJpc0JsYW5rVGFibGUiLCJnZXRDb2x1bW5zRnJvbUVudGl0eVR5cGUiLCJnZXRFbnRpdHlUeXBlIiwiY3JlYXRpb25Nb2RlIiwiQWN0aW9uSGVscGVyIiwiZ2V0Q3VycmVudEVudGl0eVNldFVwZGF0YWJsZVBhdGgiLCJyZXN0cmljdGlvbnMiLCJnZXRSZXN0cmljdGlvbnMiLCJlbnRpdHlTZXQiLCJ1cGRhdGFibGUiLCJpc1VwZGF0YWJsZSIsImlzT25seUR5bmFtaWNPbkN1cnJlbnRFbnRpdHkiLCJpc0NvbnN0YW50IiwiZXhwcmVzc2lvbiIsIm5hdmlnYXRpb25FeHByZXNzaW9uIiwiX3R5cGUiLCJ1cGRhdGFibGVFeHByZXNzaW9uIiwidXBkYXRhYmxlUHJvcGVydHlQYXRoIiwicHJvcGVydGllcyIsImFjdGlvbk5hbWUiLCJwcm9wZXJ0eU5hbWUiLCJzaXplIiwidGl0bGVQcm9wZXJ0eSIsIkFycmF5IiwiZnJvbSIsImpvaW4iLCJnZXRVSUhpZGRlbkV4cEZvckFjdGlvbnNSZXF1aXJpbmdDb250ZXh0IiwiY3VycmVudEVudGl0eVR5cGUiLCJjb250ZXh0RGF0YU1vZGVsT2JqZWN0UGF0aCIsImFVaUhpZGRlblBhdGhFeHByZXNzaW9ucyIsImRhdGFGaWVsZCIsIkFjdGlvblRhcmdldCIsImlzQm91bmQiLCJzb3VyY2VFbnRpdHlUeXBlIiwiUmVxdWlyZXNDb250ZXh0IiwidmFsdWVPZiIsIkhpZGRlbiIsImVxdWFsIiwiZ2V0SGlkZGVuRXhwcmVzc2lvbkF0VGFibGVMZXZlbCIsImdldFBhdGhGcm9tQWN0aW9uQW5ub3RhdGlvbiIsInNvdXJjZSIsImNvbnN0YW50Iiwic3Vic3RyaW5nIiwic3BsaXRQYXRoRm9yTmF2aWdhdGlvblByb3BlcnR5IiwibmF2aWdhdGlvblBhdGgiLCJpc05hdmlnYXRpb25Qcm9wZXJ0eSIsInRhcmdldE9iamVjdCIsInBhcnRuZXIiLCJwYXRoSW5Nb2RlbCIsInNsaWNlIiwidXBkYXRlTWFuaWZlc3RBY3Rpb25BbmRUYWdJdCIsImRhdGFGaWVsZElkIiwic29tZSIsImFjdGlvbktleSIsInJlcXVpcmVzU2VsZWN0aW9uIiwiaGFzQm91bmRBY3Rpb25zQWx3YXlzVmlzaWJsZUluVG9vbEJhciIsIm1hbmlmZXN0QWN0aW9uSWQiLCJnZW5lcmF0ZSIsIkFjdGlvbiIsIlNlbWFudGljT2JqZWN0IiwiQWN0aW9ucyIsImhhc0N1c3RvbUFjdGlvbnNBbHdheXNWaXNpYmxlSW5Ub29sQmFyIiwiY3VzdG9tQWN0aW9ucyIsInJlZHVjZSIsIm1lbnVBY3Rpb24iLCJ0b1N0cmluZyIsImdldFZpc2libGVFeHBGb3JDdXN0b21BY3Rpb25zUmVxdWlyaW5nQ29udGV4dCIsImFWaXNpYmxlUGF0aEV4cHJlc3Npb25zIiwicmVzb2x2ZUJpbmRpbmdTdHJpbmciLCJnZXRDYXBhYmlsaXR5UmVzdHJpY3Rpb24iLCJpc0RlbGV0YWJsZSIsImlzUGF0aERlbGV0YWJsZSIsImlzUGF0aFVwZGF0YWJsZSIsImdldFNlbGVjdGlvbk1vZGUiLCJpc0VudGl0eVNldCIsInRhcmdldENhcGFiaWxpdGllcyIsImRlbGV0ZUJ1dHRvblZpc2liaWxpdHlFeHByZXNzaW9uIiwibWFzc0VkaXRWaXNpYmlsaXR5RXhwcmVzc2lvbiIsImFyZ3VtZW50cyIsImN1dEJ1dHRvblZpc2liaWxpdHlFeHByZXNzaW9uIiwidGFibGVNYW5pZmVzdFNldHRpbmdzIiwidGFibGVUeXBlIiwidGFibGVTZXR0aW5ncyIsInNlbGVjdGlvbk1vZGUiLCJTZWxlY3Rpb25Nb2RlIiwiTXVsdGkiLCJOb25lIiwiY29tcGlsZUV4cHJlc3Npb24iLCJpZkVsc2UiLCJGb3JjZU11bHRpIiwiRm9yY2VTaW5nbGUiLCJTaW5nbGUiLCJhSGlkZGVuQmluZGluZ0V4cHJlc3Npb25zIiwiYVZpc2libGVCaW5kaW5nRXhwcmVzc2lvbnMiLCJpc1BhcmVudERlbGV0YWJsZSIsInBhcmVudEVudGl0eVNldERlbGV0YWJsZSIsIk9iamVjdFBhZ2UiLCJiTWFzc0VkaXRFbmFibGVkIiwiQXV0byIsImJ1dHRvblZpc2liaWxpdHlFeHByZXNzaW9uIiwib3IiLCJhbmQiLCJJc0VkaXRhYmxlIiwiZWRpdE1vZGVidXR0b25WaXNpYmlsaXR5RXhwcmVzc2lvbiIsImNvbmNhdCIsImNvcHlEYXRhRmllbGQiLCJnZXRDb3B5QWN0aW9uIiwiZGF0YUZpZWxkSXNDb3B5QWN0aW9uIiwiYW5ub3RhdGlvblBhdGgiLCJnZXRFbnRpdHlTZXRCYXNlZEFubm90YXRpb25QYXRoIiwiZnVsbHlRdWFsaWZpZWROYW1lIiwiS2V5SGVscGVyIiwiZ2VuZXJhdGVLZXlGcm9tRGF0YUZpZWxkIiwidmlzaWJsZUV4cHJlc3Npb24iLCJ2aXNpYmxlRm9yQ29udGV4dE1lbnVFeHByZXNzaW9uIiwidGV4dCIsIkxhYmVsIiwiTGlicmFyeSIsImdldFJlc291cmNlQnVuZGxlRm9yIiwiZ2V0VGV4dCIsImlzRGF0YUZpZWxkRm9yQWN0aW9uQWJzdHJhY3QiLCJ0YWJsZUFjdGlvbiIsImdldERhdGFGaWVsZEFubm90YXRpb25BY3Rpb24iLCJpc0RhdGFGaWVsZEZvckFjdGlvbkdyb3VwIiwiZGF0YUZpZWxkR3JvdXAiLCJEYXRhRmllbGRGb3JBY3Rpb24iLCJpc0FJT3BlcmF0aW9uIiwiaXNBY3Rpb25BSU9wZXJhdGlvbiIsIl91c2VFbmFibGVkRXhwcmVzc2lvbiIsImdldEVuYWJsZWRGb3JBbm5vdGF0aW9uQWN0aW9uIiwiRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uIiwiaWQiLCJpc01lbnVBSU9wZXJhdGlvbiIsImdldEhpZ2hsaWdodFJvd0JpbmRpbmciLCJjcml0aWNhbGl0eUFubm90YXRpb24iLCJpc0RyYWZ0Um9vdE9yTm9kZSIsInRhcmdldEVudGl0eVR5cGUiLCJkZWZhdWx0SGlnaGxpZ2h0Um93RGVmaW5pdGlvbiIsIk1lc3NhZ2VUeXBlIiwiZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uIiwiZ2V0TWVzc2FnZVR5cGVGcm9tQ3JpdGljYWxpdHlUeXBlIiwiZm9ybWF0UmVzdWx0IiwiRW50aXR5IiwiSGFzQWN0aXZlIiwiSXNBY3RpdmUiLCJJc0luYWN0aXZlIiwidGFibGVGb3JtYXR0ZXJzIiwicm93SGlnaGxpZ2h0aW5nIiwiZ2V0RXh0ZXJuYWxDcmVhdGlvbkJlaGF2aW9yIiwidGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24iLCJjcmVhdGlvbkRldGFpbHMiLCJvdXRib3VuZEtleSIsIm91dGJvdW5kQ3JlYXRpb24iLCJvdXRib3VuZCIsIm91dGJvdW5kRGV0YWlsIiwiZ2V0T3V0Ym91bmROYXZpZ2F0aW9uRW50cmllcyIsIm1vZGUiLCJDcmVhdGlvbk1vZGUiLCJFeHRlcm5hbCIsIndhcm5pbmciLCJOZXdQYWdlIiwiX2dldENyZWF0aW9uQmVoYXZpb3VyIiwiZXh0ZXJuYWxCZWhhdmlvciIsIm9yaWdpbmFsVGFibGVTZXR0aW5ncyIsIm5hdmlnYXRpb25EZXRhaWxzIiwiZGV0YWlsIiwiQ3JlYXRpb25EaWFsb2ciLCJuZXdBY3Rpb24iLCJ0YXJnZXRBbm5vdGF0aW9ucyIsInRhcmdldEFubm90YXRpb25zQ29tbW9uIiwidGFyZ2V0QW5ub3RhdGlvbnNTZXNzaW9uIiwiU2Vzc2lvbiIsIkRyYWZ0Um9vdCIsIk5ld0FjdGlvbiIsIlN0aWNreVNlc3Npb25TdXBwb3J0ZWQiLCJDcmVhdGlvblJvdyIsIkVycm9yIiwicm91dGUiLCJhcHBlbmQiLCJjcmVhdGVBdEVuZCIsIm5hdmlnYXRlVG9UYXJnZXQiLCJpbmZvIiwiX2dldFJvd0NvbmZpZ3VyYXRpb25Qcm9wZXJ0eSIsInRhcmdldFBhdGgiLCJhZ2dyZWdhdGlvbk9uTGVhZkxldmVsZW5hYmxlZCIsIm5hdmlnYXRpb25JbmZvIiwiY3JpdGljYWxpdHlQcm9wZXJ0eSIsIkNyaXRpY2FsaXR5IiwibmF2aWdhdGlvblRhcmdldCIsImRpc3BsYXkiLCJ0YXJnZXQiLCJnZXREcmFmdFJvb3QiLCJnZXREcmFmdE5vZGUiLCJjaGVja0VkaXRhYmxlIiwicm91dGVQYXRoIiwicmVjcmVhdGVDb250ZXh0Iiwicm93TmF2aWdhdGVkRXhwcmVzc2lvbiIsIm5hdmlnYXRlZFJvdyIsImFjdGlvblR5cGUiLCJyb3dOYXZpZ2F0ZWQiLCJyb3dDcml0aWNhbGl0eUZvckluc2lnaHRzIiwiY3JpdGljYWxpdHlFeHByZXNzaW9uRm9ySW50ZWdyYXRpb25DYXJkcyIsIm5vdCIsImlzTm9kZUxldmVsTmF2aWdhYmxlIiwiY3JlYXRlVGVjaG5pY2FsUHJvcGVydHkiLCJyZWxhdGVkQWRkaXRpb25hbFByb3BlcnR5TmFtZU1hcCIsImNvbHVtbkV4aXN0cyIsImFkZGl0aW9uYWxQcm9wZXJ0eSIsInRlY2huaWNhbENvbHVtbiIsIkNvbHVtblR5cGUiLCJBbm5vdGF0aW9uIiwibGFiZWwiLCJkYXRhVHlwZSIsImF2YWlsYWJpbGl0eSIsInNvcnRhYmxlIiwiaXNHcm91cGFibGUiLCJpc0tleSIsImV4cG9ydFNldHRpbmdzIiwiY2FzZVNlbnNpdGl2ZSIsImFnZ3JlZ2F0YWJsZSIsImZpbHRlcmFibGUiLCJleHRlbnNpb24iLCJ0ZWNobmljYWxseUdyb3VwYWJsZSIsInRlY2huaWNhbGx5QWdncmVnYXRhYmxlIiwiZ2V0UDEzbk1vZGUiLCJ2YXJpYW50TWFuYWdlbWVudCIsImdldFZhcmlhbnRNYW5hZ2VtZW50IiwibW9kZXMiLCJpc0FuYWx5dGljYWxUYWJsZSIsImlzUmVzcG9uc2l2ZVRhYmxlIiwicGVyc29uYWxpemF0aW9uIiwic29ydCIsImdyb3VwIiwiYWdncmVnYXRlIiwiVmFyaWFudE1hbmFnZW1lbnRUeXBlIiwiQ29udHJvbCIsIl9pc0ZpbHRlckJhckhpZGRlbiIsImlzRmlsdGVyQmFySGlkZGVuIiwiaGFzTXVsdGlwbGVWaXN1YWxpemF0aW9ucyIsIkFuYWx5dGljYWxMaXN0UGFnZSIsImdldFNvcnRDb25kaXRpb25zIiwibm9uU29ydGFibGVQcm9wZXJ0aWVzIiwiZ2V0UmVzdHJpY3Rpb25zT25Qcm9wZXJ0aWVzIiwic29ydENvbmRpdGlvbnMiLCJzb3J0ZXJzIiwiU29ydE9yZGVyIiwiY29uZGl0aW9uIiwiY29uZGl0aW9uUHJvcGVydHkiLCJQcm9wZXJ0eSIsImluZm9OYW1lIiwiY29udmVydFByb3BlcnR5UGF0aHNUb0luZm9OYW1lcyIsImRlc2NlbmRpbmciLCJEZXNjZW5kaW5nIiwiZ2V0SW5pdGlhbEV4cGFuc2lvbkxldmVsIiwibGV2ZWwiLCJJbml0aWFsRXhwYW5zaW9uTGV2ZWwiLCJwYXRocyIsImluZm9OYW1lcyIsInByb3BlcnR5SW5mbyIsImFubm90YXRpb25Db2x1bW4iLCJjdXJyZW50UGF0aCIsImdyb3VwTGV2ZWxzIiwiR3JvdXBCeSIsImFHcm91cEJ5IiwicHJvcGVydHlOYW1lRnJvbUFuYWx5dGljc0luZm8iLCJfZ2V0UHJvcGVydHlOYW1lRnJvbUFuYWx5dGljc0luZm8iLCJhZ2dyZWdhdGFibGVQcm9wZXJ0eURlZmluaXRpb24iLCJhZGRpdGlvbmFsUHJvcGVydHlJbmZvcyIsImFkZGl0aW9uYWxQcm9wZXJ0eUluZm8iLCJfdXBkYXRlRm9yVGV4dE9ubHlQcm9wZXJ0aWVzV2l0aENEUCIsInRleHRBcnJhbmdlbWVudCIsInRleHRQcm9wZXJ0eSIsImFuYWx5dGljc0luZm9Qcm9wZXJ0eU5hbWVGb3JEZXNjIiwiY29sdW1uV2l0aFRleHRPbmx5IiwidGV4dE9ubHlDb2x1bW4iLCJleHRlbnNpb25JbmZvTWFwIiwiVG90YWwiLCJhVG90YWxzIiwiY3JlYXRpb25CZWhhdmlvdXIiLCJzdGFuZGFyZEFjdGlvbnNDb250ZXh0IiwiZ2VuZXJhdGVTdGFuZGFyZEFjdGlvbnNDb250ZXh0IiwiZ2V0Q3V0VmlzaWJpbGl0eSIsImdldERlbGV0ZVZpc2liaWxpdHkiLCJtYXNzRWRpdEJ1dHRvblZpc2liaWxpdHlFeHByZXNzaW9uIiwiZ2V0TWFzc0VkaXRWaXNpYmlsaXR5IiwiaXNJbnNlcnRVcGRhdGVBY3Rpb25zVGVtcGxhdGVkIiwiZ2V0SW5zZXJ0VXBkYXRlQWN0aW9uc1RlbXBsYXRpbmciLCJpc0RyYWZ0T3JTdGlja3lTdXBwb3J0ZWQiLCJnZXRTdGFuZGFyZEFjdGlvbkN1dCIsImdldFN0YW5kYXJkQWN0aW9uQ29weSIsImdldFN0YW5kYXJkQWN0aW9uQ3JlYXRlIiwiZ2V0U3RhbmRhcmRBY3Rpb25EZWxldGUiLCJnZXRTdGFuZGFyZEFjdGlvblBhc3RlIiwiZ2V0U3RhbmRhcmRBY3Rpb25NYXNzRWRpdCIsImdldFN0YW5kYXJkQWN0aW9uSW5zaWdodHMiLCJnZXRDcmVhdGlvblJvdyIsImNvbmZpZ3VyYXRpb24iLCJnZXRTdGFuZGFyZEFjdGlvbk1vdmVVcERvd24iLCJ0eXBlTmFtZVBsdXJhbCIsIlR5cGVOYW1lUGx1cmFsIiwicGFnZU1hbmlmZXN0U2V0dGluZ3MiLCJoYXNBYnNvbHV0ZVBhdGgiLCJwMTNuTW9kZSIsImdldFRhYmxlSUQiLCJ0aHJlc2hvbGQiLCJNYXhJdGVtcyIsImlzU2VhcmNoYWJsZSIsImlzUGF0aFNlYXJjaGFibGUiLCJhcGlJZCIsImVudGl0eU5hbWUiLCJlbnRpdHlUeXBlTmFtZSIsImNvbGxlY3Rpb24iLCJnZXRUYXJnZXRPYmplY3RQYXRoIiwicm93IiwiZGlzcGxheU1vZGUiLCJpc0luRGlzcGxheU1vZGUiLCJzZWFyY2hhYmxlIiwiaW5pdGlhbEV4cGFuc2lvbkxldmVsIiwicmVxdWlyZWRQcm9wZXJ0aWVzIiwiZ2V0UmVxdWlyZWRQcm9wZXJ0aWVzIiwidGFyZ2V0TmF2aWdhdGlvblByb3BlcnR5UGF0aCIsImxhc3RJbmRleE9mIiwiZ2V0U2VsZWN0aW9uVmFyaWFudENvbmZpZ3VyYXRpb24iLCJzZWxlY3Rpb25WYXJpYW50UGF0aCIsInJlc29sdmVkVGFyZ2V0IiwiZ2V0RW50aXR5VHlwZUFubm90YXRpb24iLCJzZWxlY3Rpb24iLCJwcm9wZXJ0eU5hbWVzIiwiU2VsZWN0T3B0aW9ucyIsInNlbGVjdE9wdGlvbiIsIlByb3BlcnR5TmFtZSIsIlRleHQiLCJfZ2V0RnVsbFNjcmVlbkJhc2VkT25EZXZpY2UiLCJpc0lwaG9uZSIsImVuYWJsZUZ1bGxTY3JlZW4iLCJnZXREaWFnbm9zdGljcyIsImFkZElzc3VlIiwiSXNzdWVDYXRlZ29yeSIsIk1hbmlmZXN0IiwiSXNzdWVTZXZlcml0eSIsIkxvdyIsIklzc3VlVHlwZSIsIkZVTExTQ1JFRU5NT0RFX05PVF9PTl9MSVNUUkVQT1JUIiwiX2dldE11bHRpU2VsZWN0TW9kZSIsIm11bHRpU2VsZWN0TW9kZSIsInNlbGVjdEFsbCIsInVzZUljb25UYWJCYXIiLCJfZ2V0VGFibGVNb2RlIiwiaXNUZW1wbGF0ZUxpc3RSZXBvcnQiLCJyb3dDb3VudE1vZGUiLCJyb3dDb3VudCIsIl9nZXRDb25kZW5zZWRUYWJsZUxheW91dCIsIl90YWJsZVR5cGUiLCJfdGFibGVTZXR0aW5ncyIsImNvbmRlbnNlZFRhYmxlTGF5b3V0IiwiX2dldFRhYmxlU2VsZWN0aW9uTGltaXQiLCJzZWxlY3Rpb25MaW1pdCIsIl9nZXRUYWJsZUlubGluZUNyZWF0aW9uUm93Q291bnQiLCJpbmxpbmVDcmVhdGlvblJvd0NvdW50IiwiX2dldEVuYWJsZUV4cG9ydCIsImVuYWJsZVBhc3RlIiwiZW5hYmxlRXhwb3J0IiwiX2dldEZyb3plbkNvbHVtbkNvdW50IiwiZnJvemVuQ29sdW1uQ291bnQiLCJfZ2V0V2lkdGhJbmNsdWRpbmdDb2x1bW5IZWFkZXIiLCJ3aWR0aEluY2x1ZGluZ0NvbHVtbkhlYWRlciIsImdldEZpbHRlckNvbmZpZ3VyYXRpb24iLCJoaWRlVGFibGVUaXRsZSIsImZpbHRlcnMiLCJxdWlja1ZhcmlhbnRTZWxlY3Rpb24iLCJxdWlja0ZpbHRlclBhdGhzIiwiZmlsdGVyUGF0aHMiLCJxdWlja0ZpbHRlcnMiLCJzaG93Q291bnRzIiwiaGlkZGVuRmlsdGVycyIsInNFbnRpdHlUeXBlIiwidXNlRW5hYmxlZEV4cHJlc3Npb24iLCJPcGVyYXRpb25BdmFpbGFibGUiLCJvdmVybG9hZEFjdGlvbiIsInNvdXJjZVR5cGUiLCJzdGF0aWNBY3Rpb24iLCJwYXJhbWV0ZXJzIiwiaXNDb2xsZWN0aW9uIiwidXBkYXRlVHJlZVRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uIiwidGFibGVDb25maWd1cmF0aW9uIiwiZGF0YU1vZGVsT2JqZWN0UGF0aCIsImhpZXJhcmNoeVBhcmVudE5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgiLCJnZXRIaWVyYXJjaHlQYXJlbnROYXZpZ2F0aW9uUHJvcGVydHlQYXRoIiwibm9uVXBkYXRhYmxlTmF2aWdhdGlvblByb3BlcnRpZXMiLCJnZXROb25VcGRhdGFibGVOYXZpZ2F0aW9uUHJvcGVydGllcyIsImlzSGllcmFyY2h5UGFyZW50Tm9kZVVwZGF0YWJsZSIsImlzTm9kZU1vdmFibGUiLCJnZXRDdXN0b21GdW5jdGlvbkluZm8iLCJpc05vZGVDb3B5YWJsZSIsImlzTW92ZVRvUG9zaXRpb25BbGxvd2VkIiwiaXNDb3B5VG9Qb3NpdGlvbkFsbG93ZWQiLCJjcmVhdGVFbmFibGVtZW50IiwiaXNDcmVhdGVFbmFibGVkIiwibm9kZVR5cGUiLCJub2RlVHlwZUluZm8iLCJjcmVhdGlvbkRpYWxvZ0ZpZWxkcyIsImdldEZpZWxkTGlzdCIsImNyZWF0aW9uRmllbGRzIiwiY3JlYXRlSW5QbGFjZSIsImxhc3REb3RJbmRleCIsIm1vZHVsZU5hbWUiLCJyZXBsYWNlIiwibWV0aG9kTmFtZSIsImFkZGl0aW9uYWxSZXF1aXJlZE1vZHVsZXMiLCJnZXRPcHRpbWlzdGljQmF0Y2hTZXR0aW5nc0Zyb21NYW5pZmVzdCIsImRpc2FibGVSZXF1ZXN0Q2FjaGUiLCJnZXRNYXNzRWRpdFNldHRpbmdzIiwiZGVmYXVsdEZpZWxkQ29uZmlndXJhdGlvbiIsInZpc2libGVGaWVsZHMiLCJpZ25vcmVkRmllbGRzIiwib3BlcmF0aW9uR3JvdXBpbmdNb2RlIiwiT3BlcmF0aW9uR3JvdXBpbmdNb2RlIiwiSXNvbGF0ZWQiLCJDaGFuZ2VTZXQiLCJlbmFibGVNYXNzRWRpdCIsImN1c3RvbUZyYWdtZW50IiwiZnJvbUlubGluZSIsImZpZWxkR3JvdXAiLCJpc0Fubm90YXRpb25PZlR5cGUiLCJEYXRhIiwiaXNEYXRhRmllbGQiLCJ0cmltIiwiY2hlY2tDb25kZW5zZWRMYXlvdXQiLCJfbWFuaWZlc3RXcmFwcGVyIiwiZ2xvYmFsRkVNYW5pZmVzdFNldHRpbmdzIiwiZ2V0U2FwRmVNYW5pZmVzdENvbmZpZ3VyYXRpb24iLCJkZWZhdWx0Q3JlYXRpb25Nb2RlIiwibWFjcm9zIiwidGFibGUiLCJJbmxpbmVDcmVhdGlvblJvd3MiLCJlbmFibGVBdXRvQ29sdW1uV2lkdGgiLCJpc1Bob25lIiwiZGlzYWJsZUNvcHlUb0NsaXBib2FyZCIsInRlbXBsYXRlVHlwZSIsImlzQ29uZGVuc2VkTGF5b3V0Q29tcGxpYW50Iiwib0ZpbHRlckNvbmZpZ3VyYXRpb24iLCJjdXN0b21WYWxpZGF0aW9uRnVuY3Rpb24iLCJleHBvcnRSZXF1ZXN0U2l6ZSIsImdldFRhYmxlVHlwZSIsInRhYmxlUm93TW9kZSIsImRlZmF1bHRTY3JvbGxUaHJlc2hvbGQiLCJpbmxpbmVDcmVhdGlvblJvd3NIaWRkZW5JbkVkaXRNb2RlIiwidXNlVGV4dEZvck5vRGF0YU1lc3NhZ2VzIiwiZ2V0VXNlVGV4dEZvck5vRGF0YU1lc3NhZ2VzIiwib0NvbmZpZ3VyYXRpb24iLCJoYXNEYXRhU3RhdGVJbmRpY2F0b3JGaWx0ZXIiLCJkaXNhYmxlQWRkUm93QnV0dG9uRm9yRW1wdHlEYXRhIiwiZW5hYmxlUGFzdGluZ09mQ29tcHV0ZWRQcm9wZXJ0aWVzIiwicmVhZE9ubHkiLCJlbmFibGVBZGRDYXJkVG9JbnNpZ2h0cyIsInNob3dSb3dDb3VudCIsImdldFZpZXdDb25maWd1cmF0aW9uIiwidXNlQ29uZGVuc2VkVGFibGVMYXlvdXQiLCJpc0NvbXBhY3RUeXBlIiwibW9kZUZvck5vRGF0YU1lc3NhZ2UiLCJzY3JvbGxUaHJlc2hvbGQiLCJiZWZvcmVSZWJpbmRUYWJsZSIsInNlbGVjdGlvbkNoYW5nZSIsInJvd1ByZXNzIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJUYWJsZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEVudGl0eVNldCwgRW50aXR5VHlwZSwgUGF0aEFubm90YXRpb25FeHByZXNzaW9uLCBQcm9wZXJ0eUFubm90YXRpb25WYWx1ZSwgUHJvcGVydHlQYXRoIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgdHlwZSB7IEVudGl0eVNldEFubm90YXRpb25zX0NvbW1vbiB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvQ29tbW9uX0VkbVwiO1xuaW1wb3J0IHR5cGUgeyBFbnRpdHlTZXRBbm5vdGF0aW9uc19TZXNzaW9uIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9TZXNzaW9uX0VkbVwiO1xuaW1wb3J0IHR5cGUge1xuXHRDcml0aWNhbGl0eSxcblx0RGF0YUZpZWxkQWJzdHJhY3RUeXBlcyxcblx0RGF0YUZpZWxkRm9yQWN0aW9uLFxuXHREYXRhRmllbGRGb3JBY3Rpb25BYnN0cmFjdFR5cGVzLFxuXHREYXRhRmllbGRGb3JBY3Rpb25Hcm91cCxcblx0RGF0YUZpZWxkRm9yQWN0aW9uVHlwZXMsXG5cdERhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbixcblx0RGF0YUZpZWxkVHlwZXMsXG5cdEZpZWxkR3JvdXAsXG5cdExpbmVJdGVtLFxuXHRQcmVzZW50YXRpb25WYXJpYW50VHlwZSxcblx0U2VsZWN0T3B0aW9uVHlwZSxcblx0U2VsZWN0aW9uVmFyaWFudCxcblx0U2VsZWN0aW9uVmFyaWFudFR5cGVcbn0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IHsgVUlBbm5vdGF0aW9uVGVybXMsIFVJQW5ub3RhdGlvblR5cGVzIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgdHlwZSB7IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiwgQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24gfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB7XG5cdGFuZCxcblx0Y29tcGlsZUV4cHJlc3Npb24sXG5cdGNvbnN0YW50LFxuXHRlcXVhbCxcblx0Zm9ybWF0UmVzdWx0LFxuXHRnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24sXG5cdGlmRWxzZSxcblx0aXNDb25zdGFudCxcblx0bm90LFxuXHRvcixcblx0cGF0aEluTW9kZWwsXG5cdHJlc29sdmVCaW5kaW5nU3RyaW5nXG59IGZyb20gXCJzYXAvZmUvYmFzZS9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHR5cGUgeyBQYWdlQ29udGV4dFBhdGhUYXJnZXQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9UZW1wbGF0ZUNvbnZlcnRlclwiO1xuaW1wb3J0IHtcblx0aXNEYXRhRmllbGQsXG5cdGlzRGF0YUZpZWxkRm9yQWN0aW9uQWJzdHJhY3QsXG5cdGlzRGF0YUZpZWxkRm9yQWN0aW9uR3JvdXAsXG5cdHZpc2libGVFeHByZXNzaW9uXG59IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2Fubm90YXRpb25zL0RhdGFGaWVsZFwiO1xuaW1wb3J0IHR5cGUge1xuXHRBbm5vdGF0aW9uQWN0aW9uLFxuXHRBbm5vdGF0aW9uQWN0aW9uR3JvdXAsXG5cdEJhc2VBY3Rpb24sXG5cdENvbWJpbmVkQWN0aW9uLFxuXHRDdXN0b21BY3Rpb24sXG5cdE92ZXJyaWRlVHlwZUFjdGlvblxufSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vQWN0aW9uXCI7XG5pbXBvcnQge1xuXHRhZGRDb2xsYWJvcmF0aW9uQ29uZGl0aW9uLFxuXHRkYXRhRmllbGRJc0NvcHlBY3Rpb24sXG5cdGdldEFjdGlvbnNGcm9tTWFuaWZlc3QsXG5cdGdldEFubm90YXRpb25NZW51QWN0aW9uSXRlbXMsXG5cdGdldENvcHlBY3Rpb24sXG5cdGdldEVuYWJsZWRGb3JBbm5vdGF0aW9uQWN0aW9uLFxuXHRnZXRNYXRjaGluZ01hbmlmZXN0QWN0aW9uLFxuXHRnZXRWaXNpYmlsaXR5RW5hYmxlbWVudE1lbnVBY3Rpb25zLFxuXHRpc0FjdGlvbkFJT3BlcmF0aW9uLFxuXHRpc01lbnVBSU9wZXJhdGlvbixcblx0cHJlcGFyZU1lbnVBY3Rpb25zLFxuXHRyZW1vdmVEdXBsaWNhdGVBY3Rpb25zXG59IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi9BY3Rpb25cIjtcbmltcG9ydCB7IE92ZXJyaWRlVHlwZSwgUGxhY2VtZW50LCBpbnNlcnRDdXN0b21FbGVtZW50cyB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2hlbHBlcnMvQ29uZmlndXJhYmxlT2JqZWN0XCI7XG5pbXBvcnQgeyBJc3N1ZUNhdGVnb3J5LCBJc3N1ZVNldmVyaXR5LCBJc3N1ZVR5cGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9oZWxwZXJzL0lzc3VlTWFuYWdlclwiO1xuaW1wb3J0IHsgS2V5SGVscGVyIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvaGVscGVycy9LZXlcIjtcbmltcG9ydCB7IEVudGl0eSwgVUkgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9CaW5kaW5nSGVscGVyXCI7XG5pbXBvcnQgTW9kZWxIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvTW9kZWxIZWxwZXJcIjtcbmltcG9ydCB7IGdlbmVyYXRlIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvU3RhYmxlSWRIZWxwZXJcIjtcbmltcG9ydCB7IGlzQW5ub3RhdGlvbk9mVHlwZSwgaXNOYXZpZ2F0aW9uUHJvcGVydHksIGlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvVHlwZUd1YXJkc1wiO1xuaW1wb3J0IHsgY3JpdGljYWxpdHlFeHByZXNzaW9uRm9ySW50ZWdyYXRpb25DYXJkcyB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0NyaXRpY2FsaXR5Rm9ybWF0dGVyc1wiO1xuaW1wb3J0IHtcblx0Z2V0SGllcmFyY2h5UGFyZW50TmF2aWdhdGlvblByb3BlcnR5UGF0aCxcblx0Z2V0Tm9uVXBkYXRhYmxlTmF2aWdhdGlvblByb3BlcnRpZXMsXG5cdGdldFRhcmdldE9iamVjdFBhdGgsXG5cdGlzUGF0aERlbGV0YWJsZSxcblx0aXNQYXRoU2VhcmNoYWJsZSxcblx0aXNQYXRoVXBkYXRhYmxlLFxuXHR0eXBlIERhdGFNb2RlbE9iamVjdFBhdGhcbn0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRGF0YU1vZGVsUGF0aEhlbHBlclwiO1xuaW1wb3J0IHsgZ2V0UmVzdHJpY3Rpb25zT25Qcm9wZXJ0aWVzIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRW50aXR5U2V0SGVscGVyXCI7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXJlc3RyaWN0ZWQtaW1wb3J0c1xuaW1wb3J0IHRhYmxlRm9ybWF0dGVycyBmcm9tIFwic2FwL2ZlL21hY3Jvcy9mb3JtYXR0ZXJzL1RhYmxlRm9ybWF0dGVyXCI7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXJlc3RyaWN0ZWQtaW1wb3J0c1xuaW1wb3J0IEFjdGlvbkhlbHBlciBmcm9tIFwic2FwL2ZlL21hY3Jvcy9pbnRlcm5hbC9oZWxwZXJzL0FjdGlvbkhlbHBlclwiO1xuaW1wb3J0IExpYnJhcnkgZnJvbSBcInNhcC91aS9jb3JlL0xpYlwiO1xuaW1wb3J0IE1lc3NhZ2VUeXBlIGZyb20gXCJzYXAvdWkvY29yZS9tZXNzYWdlL01lc3NhZ2VUeXBlXCI7XG5pbXBvcnQgdHlwZSBGb3JtQ29udGFpbmVyIGZyb20gXCJzYXAvdWkvbGF5b3V0L2Zvcm0vRm9ybUNvbnRhaW5lclwiO1xuaW1wb3J0IHR5cGUgQ29udmVydGVyQ29udGV4dCBmcm9tIFwiLi4vLi4vQ29udmVydGVyQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUge1xuXHRNYW5pZmVzdEFjdGlvbixcblx0TmF2aWdhdGlvblNldHRpbmdzQ29uZmlndXJhdGlvbixcblx0TmF2aWdhdGlvblRhcmdldENvbmZpZ3VyYXRpb24sXG5cdFRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uLFxuXHRUYWJsZU1hbmlmZXN0U2V0dGluZ3NDb25maWd1cmF0aW9uXG59IGZyb20gXCIuLi8uLi9NYW5pZmVzdFNldHRpbmdzXCI7XG5pbXBvcnQge1xuXHRBY3Rpb25UeXBlLFxuXHRDcmVhdGlvbk1vZGUsXG5cdE9wZXJhdGlvbkdyb3VwaW5nTW9kZSxcblx0U2VsZWN0aW9uTW9kZSxcblx0VGVtcGxhdGVUeXBlLFxuXHRWYXJpYW50TWFuYWdlbWVudFR5cGUsXG5cdFZpc3VhbGl6YXRpb25UeXBlXG59IGZyb20gXCIuLi8uLi9NYW5pZmVzdFNldHRpbmdzXCI7XG5pbXBvcnQgdHlwZSBNYW5pZmVzdFdyYXBwZXIgZnJvbSBcIi4uLy4uL01hbmlmZXN0V3JhcHBlclwiO1xuaW1wb3J0IHsgQWdncmVnYXRpb25IZWxwZXIgfSBmcm9tIFwiLi4vLi4vaGVscGVycy9BZ2dyZWdhdGlvblwiO1xuaW1wb3J0IHsgZ2V0VGFibGVJRCB9IGZyb20gXCIuLi8uLi9oZWxwZXJzL0lEXCI7XG5pbXBvcnQgeyBnZXRNZXNzYWdlVHlwZUZyb21Dcml0aWNhbGl0eVR5cGUgfSBmcm9tIFwiLi9Dcml0aWNhbGl0eVwiO1xuaW1wb3J0IHtcblx0Q29sdW1uVHlwZSxcblx0ZmluZENvbHVtbkJ5UGF0aCxcblx0Z2V0Q29sdW1uc0Zyb21FbnRpdHlUeXBlLFxuXHRnZXRSZXF1aXJlZFByb3BlcnRpZXMsXG5cdGdldFRhYmxlQ29sdW1ucyxcblx0dXBkYXRlTGlua2VkUHJvcGVydGllcyxcblx0dHlwZSBBbm5vdGF0aW9uVGFibGVDb2x1bW4sXG5cdHR5cGUgRXh0ZW5zaW9uRm9yQW5hbHl0aWNzLFxuXHR0eXBlIFRhYmxlQ29sdW1uXG59IGZyb20gXCIuL3RhYmxlL0NvbHVtbnNcIjtcbmltcG9ydCB0eXBlIHsgU3RhbmRhcmRBY3Rpb24gfSBmcm9tIFwiLi90YWJsZS9TdGFuZGFyZEFjdGlvbnNcIjtcbmltcG9ydCB7XG5cdFN0YW5kYXJkQWN0aW9uS2V5cyxcblx0Z2VuZXJhdGVTdGFuZGFyZEFjdGlvbnNDb250ZXh0LFxuXHRnZXRDcmVhdGlvblJvdyxcblx0Z2V0Q3V0VmlzaWJpbGl0eSxcblx0Z2V0RGVsZXRlVmlzaWJpbGl0eSxcblx0Z2V0SW5zZXJ0VXBkYXRlQWN0aW9uc1RlbXBsYXRpbmcsXG5cdGdldE1hc3NFZGl0VmlzaWJpbGl0eSxcblx0Z2V0UmVzdHJpY3Rpb25zLFxuXHRnZXRTdGFuZGFyZEFjdGlvbkNvcHksXG5cdGdldFN0YW5kYXJkQWN0aW9uQ3JlYXRlLFxuXHRnZXRTdGFuZGFyZEFjdGlvbkN1dCxcblx0Z2V0U3RhbmRhcmRBY3Rpb25EZWxldGUsXG5cdGdldFN0YW5kYXJkQWN0aW9uSW5zaWdodHMsXG5cdGdldFN0YW5kYXJkQWN0aW9uTWFzc0VkaXQsXG5cdGdldFN0YW5kYXJkQWN0aW9uTW92ZVVwRG93bixcblx0Z2V0U3RhbmRhcmRBY3Rpb25QYXN0ZSxcblx0aXNEcmFmdE9yU3RpY2t5U3VwcG9ydGVkLFxuXHRpc0luRGlzcGxheU1vZGVcbn0gZnJvbSBcIi4vdGFibGUvU3RhbmRhcmRBY3Rpb25zXCI7XG5cbnR5cGUgVXBsb2FkVGFibGVTZXR0aW5ncyA9IHtcblx0c3RyZWFtOiBzdHJpbmc7XG5cdGZpbGVOYW1lPzogc3RyaW5nO1xuXHRmaWxlTmFtZU1heExlbmd0aD86IGludDtcblx0YWNjZXB0YWJsZU1lZGlhVHlwZXM/OiBzdHJpbmdbXTtcblx0bWF4TGVuZ3RoPzogaW50O1xuXHR1cGxvYWRBY3Rpb24/OiBTdGFuZGFyZEFjdGlvbjtcbn07XG5cbnR5cGUgUm93TmF2aWdhdGlvbkluZm8gPVxuXHR8IHtcblx0XHRcdHR5cGU6IFwiT3V0Ym91bmRcIjtcblx0XHRcdG5hdmlnYXRpb25UYXJnZXQ6IHN0cmluZztcblx0XHRcdG5hdmlnYXRpb25JbkVkaXRNb2RlPzogYm9vbGVhbjtcblx0ICB9XG5cdHwge1xuXHRcdFx0dHlwZTogXCJOYXZpZ2F0aW9uXCI7XG5cdFx0XHR0YXJnZXRQYXRoOiBzdHJpbmc7XG5cdFx0XHRjaGVja0VkaXRhYmxlOiBib29sZWFuO1xuXHRcdFx0cmVjcmVhdGVDb250ZXh0OiBib29sZWFuO1xuXHRcdFx0cm91dGVQYXRoOiBzdHJpbmc7XG5cdFx0XHRuYXZpZ2F0aW9uSW5FZGl0TW9kZT86IGJvb2xlYW47XG5cdCAgfTtcblxudHlwZSBSb3dDb25maWd1cmF0aW9uID0ge1xuXHRhY3Rpb25UeXBlPzogc3RyaW5nO1xuXHRuYXZpZ2F0aW9uSW5mbz86IFJvd05hdmlnYXRpb25JbmZvO1xuXHRyb3dIaWdobGlnaHRpbmc6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uO1xuXHRyb3dOYXZpZ2F0ZWQ6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uO1xuXHRyb3dDcml0aWNhbGl0eUZvckluc2lnaHRzPzogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb247XG5cdHZpc2libGU/OiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjtcbn07XG5cbmV4cG9ydCB0eXBlIE1hc3NFZGl0VGFibGVDb25maWd1cmF0aW9uID0ge1xuXHRlbmFibGVkOiBib29sZWFuO1xuXHR2aXNpYmxlRmllbGRzOiBzdHJpbmdbXTtcblx0aWdub3JlZEZpZWxkczogc3RyaW5nW107XG5cdG9wZXJhdGlvbkdyb3VwaW5nTW9kZTogT3BlcmF0aW9uR3JvdXBpbmdNb2RlO1xuXHRjdXN0b21GcmFnbWVudD86IHN0cmluZyB8IEZvcm1Db250YWluZXI7XG5cdGZyb21JbmxpbmU/OiBib29sZWFuO1xufTtcblxudHlwZSBUYWJsZVNvcnRDb25kaXRpb25zID0ge1xuXHRzb3J0ZXJzOiB7XG5cdFx0bmFtZTogc3RyaW5nO1xuXHRcdGRlc2NlbmRpbmc6IGJvb2xlYW47XG5cdH1bXTtcbn07XG5cbnR5cGUgVGFibGVHcm91cENvbmRpdGlvbnMgPSB7XG5cdGdyb3VwTGV2ZWxzOiB7IG5hbWU6IHN0cmluZyB9W107XG59O1xuXG50eXBlIFRhYmxlQWdncmVnYXRlQ29uZGl0aW9ucyA9IFJlY29yZDxzdHJpbmcsIG9iamVjdD47XG5cbnR5cGUgVGFibGVQMTNuTW9kZSA9IFwiQWdncmVnYXRlXCIgfCBcIkNvbHVtblwiIHwgXCJGaWx0ZXJcIiB8IFwiR3JvdXBcIiB8IFwiU29ydFwiO1xuXG5leHBvcnQgdHlwZSBBbmFseXRpY2FsQ29uZmlndXJhdGlvbiA9IHtcblx0YWdncmVnYXRpb25PbkxlYWZMZXZlbD86IGJvb2xlYW47XG59O1xuXG5leHBvcnQgdHlwZSBUYWJsZUFubm90YXRpb25Db25maWd1cmF0aW9uID0ge1xuXHRjb2xsZWN0aW9uOiBzdHJpbmc7XG5cdHZhcmlhbnRNYW5hZ2VtZW50OiBWYXJpYW50TWFuYWdlbWVudFR5cGU7XG5cdGZpbHRlcklkPzogc3RyaW5nO1xuXHRpZDogc3RyaW5nO1xuXHRhcGlJZDogc3RyaW5nO1xuXHRuYXZpZ2F0aW9uUGF0aDogc3RyaW5nO1xuXHRwMTNuTW9kZT86IFRhYmxlUDEzbk1vZGVbXTtcblx0cm93PzogUm93Q29uZmlndXJhdGlvbjtcblx0c2VsZWN0aW9uTW9kZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXHRpc0luc2VydFVwZGF0ZUFjdGlvbnNUZW1wbGF0ZWQ6IGJvb2xlYW47XG5cdHVwZGF0YWJsZVByb3BlcnR5UGF0aDogc3RyaW5nO1xuXHRkaXNwbGF5TW9kZT86IGJvb2xlYW47XG5cdHRocmVzaG9sZDogbnVtYmVyO1xuXHRlbnRpdHlOYW1lOiBzdHJpbmc7XG5cdGVudGl0eVR5cGVOYW1lOiBzdHJpbmc7XG5cdHNvcnRDb25kaXRpb25zPzogVGFibGVTb3J0Q29uZGl0aW9ucztcblx0Z3JvdXBDb25kaXRpb25zPzogVGFibGVHcm91cENvbmRpdGlvbnM7XG5cdGFnZ3JlZ2F0ZUNvbmRpdGlvbnM/OiBUYWJsZUFnZ3JlZ2F0ZUNvbmRpdGlvbnM7XG5cdGluaXRpYWxFeHBhbnNpb25MZXZlbD86IG51bWJlcjtcblx0YWxsb3dEcm9wQmV0d2Vlbk5vZGVzPzogYm9vbGVhbjtcblx0Y2hhbmdlU2libGluZ0ZvclJvb3RzU3VwcG9ydGVkPzogYm9vbGVhbjtcblx0LyoqIENyZWF0ZSBuZXcgZW50cmllcyAqL1xuXHRjcmVhdGU6IENyZWF0ZUJlaGF2aW9yIHwgQ3JlYXRlQmVoYXZpb3JFeHRlcm5hbDtcblx0dGl0bGU6IHN0cmluZyB8IHVuZGVmaW5lZDtcblx0c2VhcmNoYWJsZTogYm9vbGVhbjtcblx0cmVxdWlyZWRQcm9wZXJ0aWVzPzogc3RyaW5nW107XG5cdHVwbG9hZFRhYmxlPzogVXBsb2FkVGFibGVTZXR0aW5ncztcbn07XG4vKipcbiAqIE5ldyBlbnRyaWVzIGFyZSBjcmVhdGVkIHdpdGhpbiB0aGUgYXBwIChkZWZhdWx0IGNhc2UpXG4gKi9cbmV4cG9ydCB0eXBlIENyZWF0ZUJlaGF2aW9yID0ge1xuXHRtb2RlOiBDcmVhdGlvbk1vZGU7XG5cdGFwcGVuZDogYm9vbGVhbjtcblx0bmV3QWN0aW9uPzogc3RyaW5nO1xuXHRuYXZpZ2F0ZVRvVGFyZ2V0Pzogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgRXh0ZXJuYWxNZXRob2RDb25maWcgPSB7XG5cdG1vZHVsZU5hbWU6IHN0cmluZztcblx0bWV0aG9kTmFtZTogc3RyaW5nO1xufTtcbi8qKlxuICogTmV3IGVudHJpZXMgYXJlIGNyZWF0ZWQgYnkgbmF2aWdhdGluZyB0byBzb21lIHRhcmdldFxuICovXG5leHBvcnQgdHlwZSBDcmVhdGVCZWhhdmlvckV4dGVybmFsID0ge1xuXHRtb2RlOiBcIkV4dGVybmFsXCI7XG5cdG91dGJvdW5kOiBzdHJpbmc7XG5cdG91dGJvdW5kRGV0YWlsOiBOYXZpZ2F0aW9uVGFyZ2V0Q29uZmlndXJhdGlvbltcIm91dGJvdW5kRGV0YWlsXCJdO1xufTtcbmV4cG9ydCB0eXBlIFRhYmxlQ2FwYWJpbGl0eVJlc3RyaWN0aW9uID0ge1xuXHRpc0RlbGV0YWJsZTogYm9vbGVhbjtcblx0aXNVcGRhdGFibGU6IGJvb2xlYW47XG59O1xuZXhwb3J0IHR5cGUgVGFibGVGaWx0ZXJzQ29uZmlndXJhdGlvbiA9IHtcblx0cGF0aHM6IHtcblx0XHRhbm5vdGF0aW9uUGF0aDogc3RyaW5nO1xuXHR9W107XG5cdHNob3dDb3VudHM/OiBib29sZWFuO1xufTtcbmV4cG9ydCB0eXBlIFNlbGVjdGlvblZhcmlhbnRDb25maWd1cmF0aW9uID0ge1xuXHRwcm9wZXJ0eU5hbWVzOiBzdHJpbmdbXTtcblx0dGV4dD86IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIFRhYmxlQ29udHJvbENvbmZpZ3VyYXRpb24gPSB7XG5cdGRpc2FibGVSZXF1ZXN0Q2FjaGU/OiBib29sZWFuO1xuXHRjcmVhdGVBdEVuZDogYm9vbGVhbjtcblx0Y3JlYXRlSW5QbGFjZT86IGJvb2xlYW47XG5cdGNyZWF0aW9uTW9kZTogQ3JlYXRpb25Nb2RlO1xuXHRvdXRib3VuZENyZWF0aW9uPzogc3RyaW5nO1xuXHRkaXNhYmxlQWRkUm93QnV0dG9uRm9yRW1wdHlEYXRhOiBib29sZWFuO1xuXHRjdXN0b21WYWxpZGF0aW9uRnVuY3Rpb246IHN0cmluZyB8IHVuZGVmaW5lZDtcblx0dXNlQ29uZGVuc2VkVGFibGVMYXlvdXQ6IGJvb2xlYW47XG5cdGVuYWJsZUV4cG9ydDogYm9vbGVhbjtcblx0ZW5hYmxlUGFzdGluZ09mQ29tcHV0ZWRQcm9wZXJ0aWVzPzogYm9vbGVhbjtcblx0ZnJvemVuQ29sdW1uQ291bnQ/OiBudW1iZXI7XG5cdHdpZHRoSW5jbHVkaW5nQ29sdW1uSGVhZGVyPzogYm9vbGVhbjtcblx0aGVhZGVyPzogc3RyaW5nO1xuXHRoZWFkZXJWaXNpYmxlPzogYm9vbGVhbjtcblx0ZmlsdGVycz86IFBhcnRpYWw8UmVjb3JkPFwicXVpY2tGaWx0ZXJzXCIgfCBcImhpZGRlbkZpbHRlcnNcIiwgVGFibGVGaWx0ZXJzQ29uZmlndXJhdGlvbj4+O1xuXHR0eXBlOiBUYWJsZVR5cGU7XG5cdHJvd0NvdW50TW9kZT86IFRhYmxlUm93Q291bnRNb2RlO1xuXHRyb3dDb3VudD86IG51bWJlcjtcblx0c2Nyb2xsVGhyZXNob2xkPzogbnVtYmVyO1xuXHRzZWxlY3RBbGw/OiBib29sZWFuO1xuXHRzZWxlY3Rpb25MaW1pdDogbnVtYmVyO1xuXHRtdWx0aVNlbGVjdE1vZGU6IHN0cmluZyB8IHVuZGVmaW5lZDtcblx0ZW5hYmxlUGFzdGU6IGJvb2xlYW47XG5cdGlnbm9yZWRGaWVsZHM/OiBzdHJpbmc7XG5cdHJlYWRPbmx5PzogYm9vbGVhbjtcblx0ZGlzYWJsZUNvcHlUb0NsaXBib2FyZD86IGJvb2xlYW47XG5cdGVuYWJsZUZ1bGxTY3JlZW46IGJvb2xlYW47XG5cdHNob3dSb3dDb3VudDogYm9vbGVhbjtcblx0aW5saW5lQ3JlYXRpb25Sb3dDb3VudD86IG51bWJlcjtcblx0aW5saW5lQ3JlYXRpb25Sb3dzSGlkZGVuSW5FZGl0TW9kZT86IGJvb2xlYW47XG5cdG1hc3NFZGl0OiBNYXNzRWRpdFRhYmxlQ29uZmlndXJhdGlvbjtcblx0ZW5hYmxlQXV0b0NvbHVtbldpZHRoOiBib29sZWFuO1xuXHRoYXNEYXRhU3RhdGVJbmRpY2F0b3JGaWx0ZXI6IGJvb2xlYW47XG5cdGlzQ29tcGFjdFR5cGU/OiBib29sZWFuO1xuXHRoaWVyYXJjaHlRdWFsaWZpZXI/OiBzdHJpbmc7XG5cdGlzSGllcmFyY2h5UGFyZW50Tm9kZVVwZGF0YWJsZT86IGJvb2xlYW47XG5cdGVuYWJsZUFkZENhcmRUb0luc2lnaHRzPzogYm9vbGVhbiB8IHVuZGVmaW5lZDtcblx0Y3JlYXRpb25EaWFsb2dGaWVsZHM/OiBzdHJpbmdbXTtcblx0bm9kZVR5cGU/OiB7XG5cdFx0cHJvcGVydHlOYW1lOiBzdHJpbmc7XG5cdFx0dmFsdWVzOiB7IHZhbHVlOiBzdHJpbmc7IHRleHQ6IHN0cmluZzsgY3JlYXRpb25EaWFsb2dGaWVsZHM/OiBzdHJpbmdbXSB9W107XG5cdH07XG5cdGNyZWF0ZUVuYWJsZW1lbnQ/OiBFeHRlcm5hbE1ldGhvZENvbmZpZztcblx0aXNOb2RlTW92YWJsZT86IEV4dGVybmFsTWV0aG9kQ29uZmlnO1xuXHRpc05vZGVDb3B5YWJsZT86IEV4dGVybmFsTWV0aG9kQ29uZmlnO1xuXHRpc01vdmVUb1Bvc2l0aW9uQWxsb3dlZD86IEV4dGVybmFsTWV0aG9kQ29uZmlnO1xuXHRpc0NvcHlUb1Bvc2l0aW9uQWxsb3dlZD86IEV4dGVybmFsTWV0aG9kQ29uZmlnO1xuXHRzZWxlY3Rpb25DaGFuZ2U/OiBzdHJpbmc7XG5cdGFkZGl0aW9uYWxSZXF1aXJlZE1vZHVsZXM/OiBzdHJpbmdbXTtcblx0cm93UHJlc3M/OiBzdHJpbmc7XG5cdGJlZm9yZVJlYmluZFRhYmxlPzogc3RyaW5nO1xuXHRleHBvcnRSZXF1ZXN0U2l6ZT86IG51bWJlcjtcblx0ZW5hYmxlVXBsb2FkUGx1Z2luPzogYm9vbGVhbjtcblx0bW9kZUZvck5vRGF0YU1lc3NhZ2U/OiBzdHJpbmc7XG5cdGFuYWx5dGljYWxDb25maWd1cmF0aW9uPzogQW5hbHl0aWNhbENvbmZpZ3VyYXRpb247XG59O1xuZXhwb3J0IHR5cGUgVGFibGVUeXBlID0gXCJHcmlkVGFibGVcIiB8IFwiUmVzcG9uc2l2ZVRhYmxlXCIgfCBcIkFuYWx5dGljYWxUYWJsZVwiIHwgXCJUcmVlVGFibGVcIjtcbmV4cG9ydCB0eXBlIFRhYmxlUm93Q291bnRNb2RlID0gXCJBdXRvXCIgfCBcIkZpeGVkXCIgfCBcIkludGVyYWN0aXZlXCI7XG5cbmV4cG9ydCB0eXBlIEludGVybmFsRXh0ZW5zaW9uRm9yQW5hbHl0aWNzID0gRXh0ZW5zaW9uRm9yQW5hbHl0aWNzICYge1xuXHRmcm9tR3JvdXBhYmxlUHJvcGVydHk6IGJvb2xlYW47XG5cdHJlbGF0aXZlUGF0aDogc3RyaW5nO1xufTtcbmV4cG9ydCB0eXBlIFRhYmxlVmlzdWFsaXphdGlvbiA9IHtcblx0dHlwZTogVmlzdWFsaXphdGlvblR5cGUuVGFibGU7XG5cdGFubm90YXRpb246IFRhYmxlQW5ub3RhdGlvbkNvbmZpZ3VyYXRpb247XG5cdGNvbnRyb2w6IFRhYmxlQ29udHJvbENvbmZpZ3VyYXRpb247XG5cdGNvbHVtbnM6IFRhYmxlQ29sdW1uW107XG5cdGFjdGlvbnM6IEJhc2VBY3Rpb25bXTtcblx0Y29tbWFuZEFjdGlvbnM/OiBSZWNvcmQ8c3RyaW5nLCBDdXN0b21BY3Rpb24+O1xuXHRhbmFseXRpY3NFeHRlbnNpb25zPzogUmVjb3JkPHN0cmluZywgSW50ZXJuYWxFeHRlbnNpb25Gb3JBbmFseXRpY3M+O1xuXHRyZXF1ZXN0QXRMZWFzdDogUmVxdWVzdEF0TGVhc3Q7XG5cdGVuYWJsZUFuYWx5dGljcz86IGJvb2xlYW47XG5cdGVuYWJsZUJhc2ljU2VhcmNoPzogYm9vbGVhbjtcblx0b3BlcmF0aW9uQXZhaWxhYmxlTWFwOiBzdHJpbmc7XG5cdG9wZXJhdGlvbkF2YWlsYWJsZVByb3BlcnRpZXM6IHN0cmluZztcblx0aGVhZGVySW5mb1RpdGxlOiBzdHJpbmc7XG5cdHNlbWFudGljS2V5czogc3RyaW5nW107XG5cdGhlYWRlckluZm9UeXBlTmFtZTogUHJvcGVydHlBbm5vdGF0aW9uVmFsdWU8U3RyaW5nPiB8IHVuZGVmaW5lZDtcblx0ZW5hYmxlJHNlbGVjdDogYm9vbGVhbjtcblx0ZW5hYmxlJCRnZXRLZWVwQWxpdmVDb250ZXh0OiBib29sZWFuO1xuXHRpc0luc2lnaHRzRW5hYmxlZD86IGJvb2xlYW47XG5cdGhlYWRlcj86IHN0cmluZztcblx0aGVhZGVyVmlzaWJsZT86IGJvb2xlYW47XG5cdGhhbmRsZVBhdGNoU2VudDogYm9vbGVhbjtcbn07XG5cbi8qKlxuICogUmV0dXJucyBhbiBhcnJheSBvZiBhbGwgc3RhbmRhcmQsIGFubm90YXRpb24tYmFzZWQsIGFuZCBtYW5pZmVzdC1iYXNlZCB0YWJsZSBhY3Rpb25zLlxuICogQHBhcmFtIGxpbmVJdGVtQW5ub3RhdGlvblxuICogQHBhcmFtIHZpc3VhbGl6YXRpb25QYXRoXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dFxuICogQHBhcmFtIHN0YW5kYXJkQWN0aW9uc1xuICogQHBhcmFtIG5hdmlnYXRpb25TZXR0aW5nc1xuICogQHJldHVybnMgVGhlIGNvbXBsZXRlIHRhYmxlIGFjdGlvbnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFRhYmxlQWN0aW9ucyhcblx0bGluZUl0ZW1Bbm5vdGF0aW9uOiBMaW5lSXRlbSxcblx0dmlzdWFsaXphdGlvblBhdGg6IHN0cmluZyxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHRzdGFuZGFyZEFjdGlvbnM6IFN0YW5kYXJkQWN0aW9uc0NvbmZpZ3VyYXRpb25bXCJzdGFuZGFyZEFjdGlvbnNcIl0sXG5cdG5hdmlnYXRpb25TZXR0aW5ncz86IE5hdmlnYXRpb25TZXR0aW5nc0NvbmZpZ3VyYXRpb25cbik6IENvbWJpbmVkQWN0aW9uIHtcblx0Ly8gMS4gR2V0IGFjdGlvbnMgZnJvbSBhbm5vdGF0aW9uc1xuXHRjb25zdCBpc0NvbGxhYm9yYXRpb25FbmFibGVkID0gTW9kZWxIZWxwZXIuaXNDb2xsYWJvcmF0aW9uRHJhZnRTdXBwb3J0ZWRGcm9tQ29udmVydGVyQ29udGV4dChjb252ZXJ0ZXJDb250ZXh0KTtcblxuXHRjb25zdCB0YWJsZUFjdGlvbnMgPSBnZXRUYWJsZUFubm90YXRpb25BY3Rpb25zKGxpbmVJdGVtQW5ub3RhdGlvbiwgdmlzdWFsaXphdGlvblBhdGgsIGNvbnZlcnRlckNvbnRleHQpO1xuXHQvLyAyLiBHZXQgYWN0aW9ucyBmcm9tIG1hbmlmZXN0XG5cdGNvbnN0IG1hbmlmZXN0QWN0aW9ucyA9IGdldEFjdGlvbnNGcm9tTWFuaWZlc3QoXG5cdFx0Y29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdENvbnRyb2xDb25maWd1cmF0aW9uPFRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uPih2aXN1YWxpemF0aW9uUGF0aCkuYWN0aW9ucyBhcyBSZWNvcmQ8XG5cdFx0XHRzdHJpbmcsXG5cdFx0XHRNYW5pZmVzdEFjdGlvblxuXHRcdD4sXG5cdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHR0YWJsZUFjdGlvbnMudGFibGVBY3Rpb25zLFxuXHRcdG5hdmlnYXRpb25TZXR0aW5ncyxcblx0XHR0cnVlXG5cdCk7XG5cdC8vIFRoZSBcIkNvcHlcIiBhY3Rpb24gYWx3YXlzIG5lZWRzIHRvIGJlIHBsYWNlZCBhZnRlciB0aGUgXCJDcmVhdGVcIiBhY3Rpb24sIHNvIHdlIG5lZWQgdG8gc2VwYXJhdGUgaXRcblx0Y29uc3QgY29weUFjdGlvbnMgPSB0YWJsZUFjdGlvbnMudGFibGVBY3Rpb25zLmZpbHRlcigoYSkgPT4gYS50eXBlID09PSBBY3Rpb25UeXBlLkNvcHkpO1xuXHRjb25zdCBhbm5vdGF0aW9uQWN0aW9ucyA9IHRhYmxlQWN0aW9ucy50YWJsZUFjdGlvbnMuZmlsdGVyKChhKSA9PiBhLnR5cGUgIT09IEFjdGlvblR5cGUuQ29weSk7XG5cdC8vIENvbWJpbmUgc3RhbmRhcmQsIGFubm90YXRpb24sIGFuZCBjdXN0b20gYWN0aW9ucyB0b2dldGhlciwgcmVzcGVjdGluZyB0aGUgZml4ZWQgb3JkZXIgb2Ygc3RhbmRhcmQgYWN0aW9uc1xuXHRjb25zdCBhbm5vdGF0aW9uQW5kU3RhbmRhcmRBY3Rpb25zID0gKFxuXHRcdFtcblx0XHRcdC4uLmFubm90YXRpb25BY3Rpb25zLFxuXHRcdFx0c3RhbmRhcmRBY3Rpb25zLmNyZWF0ZSxcblx0XHRcdC4uLmNvcHlBY3Rpb25zLFxuXHRcdFx0c3RhbmRhcmRBY3Rpb25zLmRlbGV0ZSxcblx0XHRcdHN0YW5kYXJkQWN0aW9ucy5tYXNzRWRpdCxcblx0XHRcdHN0YW5kYXJkQWN0aW9ucy5pbnNpZ2h0cyxcblx0XHRcdHN0YW5kYXJkQWN0aW9ucy5jcmVhdGlvblJvdywgLy8gTm90IHRlbXBsYXRlZCBhcyBhIGJ1dHRvblxuXHRcdFx0c3RhbmRhcmRBY3Rpb25zLmN1dCxcblx0XHRcdHN0YW5kYXJkQWN0aW9ucy5jb3B5LFxuXHRcdFx0c3RhbmRhcmRBY3Rpb25zLnBhc3RlLFxuXHRcdFx0c3RhbmRhcmRBY3Rpb25zLm1vdmVVcCxcblx0XHRcdHN0YW5kYXJkQWN0aW9ucy5tb3ZlRG93blxuXHRcdF0gYXMgQmFzZUFjdGlvbltdXG5cdCkuZmlsdGVyKChhY3Rpb24pID0+IGFjdGlvbiAhPT0gdW5kZWZpbmVkKTtcblx0Ly8gQW5jaG9yIGFsbCBub24tYW5jaG9yZWQgbWFuaWZlc3QgY3VzdG9tIGFjdGlvbnMvbWVudXMgYmVmb3JlIHRoZSBzdGFuZGFyZCBhY3Rpb25zXG5cdGZvciAoY29uc3QgbWFuaWZlc3RBY3Rpb24gb2YgT2JqZWN0LnZhbHVlcyhtYW5pZmVzdEFjdGlvbnMuYWN0aW9ucykpIHtcblx0XHRpZiAoKG1hbmlmZXN0QWN0aW9uLnR5cGUgPT09IEFjdGlvblR5cGUuRGVmYXVsdCB8fCBtYW5pZmVzdEFjdGlvbi50eXBlID09PSBBY3Rpb25UeXBlLk1lbnUpICYmICFtYW5pZmVzdEFjdGlvbi5wb3NpdGlvbj8uYW5jaG9yKSB7XG5cdFx0XHRtYW5pZmVzdEFjdGlvbi5wb3NpdGlvbiA9IHtcblx0XHRcdFx0YW5jaG9yOiBTdGFuZGFyZEFjdGlvbktleXMuQ3JlYXRlLFxuXHRcdFx0XHRwbGFjZW1lbnQ6IFBsYWNlbWVudC5CZWZvcmVcblx0XHRcdH07XG5cdFx0fVxuXHR9XG5cdC8vIEluc2VydCB0d2ljZSB0byBhbGxvdyByZWd1bGFyIG92ZXJyaWRlIGZvciBub24tc3RhbmRhcmQgYWN0aW9ucyBhbmQgcG9zaXRpb25hbCBvdmVycmlkZSBmb3Igc3RhbmRhcmQgYWN0aW9uc1xuXHRjb25zdCBtYW5pZmVzdEFjdGlvbkVudHJpZXMgPSBPYmplY3QuZW50cmllcyhtYW5pZmVzdEFjdGlvbnMuYWN0aW9ucyk7XG5cdGNvbnN0IHN0YW5kYXJkTWFuaWZlc3RBY3Rpb25zID0gT2JqZWN0LmZyb21FbnRyaWVzKG1hbmlmZXN0QWN0aW9uRW50cmllcy5maWx0ZXIoKFtrZXldKSA9PiBrZXkuc3RhcnRzV2l0aChcIlN0YW5kYXJkQWN0aW9uOjpcIikpKTtcblx0Y29uc3Qgbm9uU3RhbmRhcmRNYW5pZmVzdEFjdGlvbnMgPSBPYmplY3QuZnJvbUVudHJpZXMobWFuaWZlc3RBY3Rpb25FbnRyaWVzLmZpbHRlcigoW2tleV0pID0+ICFzdGFuZGFyZE1hbmlmZXN0QWN0aW9uc1trZXldKSk7XG5cdGNvbnN0IGFjdGlvbk92ZXJ3cml0ZUNvbmZpZzogT3ZlcnJpZGVUeXBlQWN0aW9uID0ge1xuXHRcdGlzTmF2aWdhYmxlOiBPdmVycmlkZVR5cGUub3ZlcndyaXRlLFxuXHRcdGVuYWJsZU9uU2VsZWN0OiBPdmVycmlkZVR5cGUub3ZlcndyaXRlLFxuXHRcdGVuYWJsZUF1dG9TY3JvbGw6IE92ZXJyaWRlVHlwZS5vdmVyd3JpdGUsXG5cdFx0ZW5hYmxlZDogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZSxcblx0XHR2aXNpYmxlOiBPdmVycmlkZVR5cGUub3ZlcndyaXRlLFxuXHRcdHZpc2libGVGb3JDb250ZXh0TWVudTogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZSxcblx0XHRkZWZhdWx0VmFsdWVzRXh0ZW5zaW9uRnVuY3Rpb246IE92ZXJyaWRlVHlwZS5vdmVyd3JpdGUsXG5cdFx0Y29tbWFuZDogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZSxcblx0XHRwb3NpdGlvbjogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZSxcblx0XHRtZW51OiBPdmVycmlkZVR5cGUub3ZlcndyaXRlXG5cdH07XG5cdC8vIDMuIEdldCBhbGwgYW5ub3RhdGlvbiBtZW51IGl0ZW1zXG5cdGNvbnN0IGFubm90YXRpb25NZW51QWN0aW9uSXRlbXMgPSBnZXRBbm5vdGF0aW9uTWVudUFjdGlvbkl0ZW1zKGFubm90YXRpb25BY3Rpb25zKTtcblx0Ly8gNC4gRmluZCBtYW5pZmVzdCBhY3Rpb25zIHdoaWNoIG92ZXJyaWRlIGFueSBhbm5vdGF0aW9uIG1lbnUgaXRlbXNcblx0Y29uc3QgbWF0Y2hpbmdNYW5pZmVzdEFjdGlvbnMgPSBnZXRNYXRjaGluZ01hbmlmZXN0QWN0aW9uKGFubm90YXRpb25NZW51QWN0aW9uSXRlbXMsIG1hbmlmZXN0QWN0aW9ucy5hY3Rpb25zKTtcblx0Ly8gNS4gR2V0IG92ZXJyaWRkZW4gYW5ub3RhdGlvbiBtZW51IGl0ZW1zXG5cdGNvbnN0IG92ZXJ3cml0dGVuTWVudUFjdGlvbkl0ZW1zID0gaW5zZXJ0Q3VzdG9tRWxlbWVudHMoYW5ub3RhdGlvbk1lbnVBY3Rpb25JdGVtcywgbWF0Y2hpbmdNYW5pZmVzdEFjdGlvbnMsIGFjdGlvbk92ZXJ3cml0ZUNvbmZpZyk7XG5cdC8vIDYuIE92ZXJyaWRlIGFsbCBhY3Rpb25zXG5cdGxldCBhY3Rpb25zID0gaW5zZXJ0Q3VzdG9tRWxlbWVudHMoYW5ub3RhdGlvbkFuZFN0YW5kYXJkQWN0aW9ucywgbm9uU3RhbmRhcmRNYW5pZmVzdEFjdGlvbnMsIGFjdGlvbk92ZXJ3cml0ZUNvbmZpZykgYXMgQ3VzdG9tQWN0aW9uW107XG5cdGFjdGlvbnMgPSBpbnNlcnRDdXN0b21FbGVtZW50cyhhY3Rpb25zLCBzdGFuZGFyZE1hbmlmZXN0QWN0aW9ucywge1xuXHRcdHBvc2l0aW9uOiBPdmVycmlkZVR5cGUub3ZlcndyaXRlXG5cdH0pO1xuXHQvLyA3LiBSZXBsYWNlIG9yaWdpbmFsIG1lbnUgaXRlbXMgd2l0aCB0aGVpciBjb3JyZXNwb25kaW5nIG92ZXJyaWRkZW4gbWVudSBpdGVtc1xuXHRwcmVwYXJlTWVudUFjdGlvbnMoYWN0aW9ucywgb3ZlcndyaXR0ZW5NZW51QWN0aW9uSXRlbXMpO1xuXHQvLyA4LiBSZW1vdmUgZHVwbGljYXRlIGFjdGlvbnMgd2hpY2ggYXJlIG1lbnUgaXRlbXNcblx0YWN0aW9ucyA9IHJlbW92ZUR1cGxpY2F0ZUFjdGlvbnMoYWN0aW9ucyk7XG5cdC8vIDkuIEhpZGUgbWVudXMgd2hlcmUgYWxsIG1lbnUgaXRlbXMgYXJlIGhpZGRlblxuXHRhY3Rpb25zID0gZ2V0VmlzaWJpbGl0eUVuYWJsZW1lbnRNZW51QWN0aW9ucyhhY3Rpb25zKTtcblx0Ly8gMTAuIEFkZCB0aGUgY29sbGFib3JhdGlvbiBjb25kaXRpb24gZm9yIGFjdGlvbnMgb3RoZXIgdGhhbiBuYXZpZ2F0aW9uXG5cdGlmIChpc0NvbGxhYm9yYXRpb25FbmFibGVkKSB7XG5cdFx0YWRkQ29sbGFib3JhdGlvbkNvbmRpdGlvbihhY3Rpb25zKTtcblx0fVxuXG5cdHJldHVybiB7XG5cdFx0YWN0aW9uczogYWN0aW9ucyxcblx0XHRjb21tYW5kQWN0aW9uczogbWFuaWZlc3RBY3Rpb25zLmNvbW1hbmRBY3Rpb25zXG5cdH07XG59XG5cbi8vUmV0dXJucyB0aGUgQ29udGV4dERlZmluaW5nUHJvcGVydGllcyBmcm9tIHRoZSBjdXN0b20gYWdncmVnYXRlIGFubm90YXRpb24gb3IgZnJvbSB0aGUgYWdncmVnYXRpb24gYW5ub3RhdGlvbiBvbiB0aGUgcHJvcGVydHkgaXRzZWxmLlxuZnVuY3Rpb24gZ2V0Q29udGV4dERlZmluaW5nUHJvcGVydGllc0Zyb21BZ2dyZWdhdGlvbkFubm90YXRpb24oYWdncmVnYXRpb25IZWxwZXI6IEFnZ3JlZ2F0aW9uSGVscGVyKTogUmVjb3JkPHN0cmluZywgc3RyaW5nW10+IHtcblx0Y29uc3QgY3VzdG9tQWdncmVnYXRlQW5ub3RhdGlvbnMgPSBhZ2dyZWdhdGlvbkhlbHBlci5nZXRDdXN0b21BZ2dyZWdhdGVEZWZpbml0aW9ucygpO1xuXHRjb25zdCBjdXN0b21BZ2dyZWdhdGVkZWZpbml0aW9uczogUmVjb3JkPHN0cmluZywgc3RyaW5nW10+ID0ge307XG5cdGN1c3RvbUFnZ3JlZ2F0ZUFubm90YXRpb25zLmZvckVhY2goKGFubm90YXRpb24pID0+IHtcblx0XHRjb25zdCBhZ2dyZWdhdGVkUHJvcGVydHkgPSBhZ2dyZWdhdGlvbkhlbHBlci5fZW50aXR5VHlwZS5lbnRpdHlQcm9wZXJ0aWVzLmZpbmQoKHByb3BlcnR5KSA9PiB7XG5cdFx0XHRyZXR1cm4gcHJvcGVydHkubmFtZSA9PT0gYW5ub3RhdGlvbi5xdWFsaWZpZXI7XG5cdFx0fSk7XG5cdFx0aWYgKGFnZ3JlZ2F0ZWRQcm9wZXJ0eSkge1xuXHRcdFx0Y29uc3QgY29udGV4dERlZmluaW5nUHJvcGVydGllcyA9XG5cdFx0XHRcdGFubm90YXRpb24uYW5ub3RhdGlvbnM/LkFnZ3JlZ2F0aW9uPy5Db250ZXh0RGVmaW5pbmdQcm9wZXJ0aWVzID8/XG5cdFx0XHRcdGFnZ3JlZ2F0ZWRQcm9wZXJ0eS5hbm5vdGF0aW9ucy5BZ2dyZWdhdGlvbj8uQ29udGV4dERlZmluaW5nUHJvcGVydGllcztcblx0XHRcdGN1c3RvbUFnZ3JlZ2F0ZWRlZmluaXRpb25zW2FnZ3JlZ2F0ZWRQcm9wZXJ0eS5uYW1lXSA9XG5cdFx0XHRcdGNvbnRleHREZWZpbmluZ1Byb3BlcnRpZXM/Lm1hcCgoY3R4RGVmUHJvcGVydHkpID0+IGN0eERlZlByb3BlcnR5LnZhbHVlKSA/PyBbXTtcblx0XHR9XG5cdH0pO1xuXHRyZXR1cm4gY3VzdG9tQWdncmVnYXRlZGVmaW5pdGlvbnM7XG59XG5cbi8qKlxuICogUmV0cmlldmUgdGhlIGV4dGVuc2lvbiBpbmZvcm1hdGlvbiBmb3IgYWxsIGFnZ3JlZ2FibGUgcHJvcGVydGllcyAuXG4gKiBAcGFyYW0gZW50aXR5VHlwZSBUaGUgdGFyZ2V0IGVudGl0eSB0eXBlLlxuICogQHBhcmFtIHRhYmxlQ29sdW1ucyBUaGUgYXJyYXkgb2YgY29sdW1ucyBmb3IgdGhlIGVudGl0eSB0eXBlLlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0LlxuICogQHJldHVybnMgVGhlIGFnZ3JlZ2F0ZSBkZWZpbml0aW9ucyBmcm9tIHRoZSBlbnRpdHlUeXBlLCBvciB1bmRlZmluZWQgaWYgdGhlIGVudGl0eSBkb2Vzbid0IHN1cHBvcnQgYW5hbHl0aWNhbCBxdWVyaWVzLlxuICovXG5leHBvcnQgY29uc3QgZ2V0RXh0ZW5zaW9uSW5mb0Zyb21FbnRpdHlUeXBlID0gZnVuY3Rpb24gKFxuXHRlbnRpdHlUeXBlOiBFbnRpdHlUeXBlLFxuXHR0YWJsZUNvbHVtbnM6IFRhYmxlQ29sdW1uW10sXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0PlxuKTogUmVjb3JkPHN0cmluZywgSW50ZXJuYWxFeHRlbnNpb25Gb3JBbmFseXRpY3M+IHwgdW5kZWZpbmVkIHtcblx0Y29uc3QgYWdncmVnYXRpb25IZWxwZXIgPSBuZXcgQWdncmVnYXRpb25IZWxwZXIoZW50aXR5VHlwZSwgY29udmVydGVyQ29udGV4dCk7XG5cdGlmICghYWdncmVnYXRpb25IZWxwZXIuaXNBbmFseXRpY3NTdXBwb3J0ZWQoKSkge1xuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblx0Ly8gS2VlcCBhIHNldCBvZiBhbGwgY3VycmVuY3kvdW5pdCBwcm9wZXJ0aWVzLCBhcyB3ZSBkb24ndCB3YW50IHRvIGNvbnNpZGVyIHRoZW0gYXMgYWdncmVnYXRlc1xuXHQvLyBUaGV5IGFyZSBhZ2dyZWdhdGVzIGZvciB0ZWNobmljYWwgcmVhc29ucyAodG8gbWFuYWdlIG11bHRpLXVuaXRzIHNpdHVhdGlvbnMpIGJ1dCBpdCBkb2Vzbid0IG1ha2Ugc2Vuc2UgZnJvbSBhIHVzZXIgc3RhbmRwb2ludFxuXHRjb25zdCBjdXJyZW5jeU9yVW5pdFByb3BlcnRpZXMgPSBuZXcgU2V0KCk7XG5cdHRhYmxlQ29sdW1ucy5mb3JFYWNoKChjb2x1bW4pID0+IHtcblx0XHRjb25zdCB0YWJsZUNvbHVtbiA9IGNvbHVtbiBhcyBBbm5vdGF0aW9uVGFibGVDb2x1bW47XG5cdFx0aWYgKHRhYmxlQ29sdW1uLnVuaXQpIHtcblx0XHRcdGNvbnN0IHRhcmdldFVuaXRQcm9wZXJ0eSA9IHRhYmxlQ29sdW1ucy5maW5kKChwcm9wKSA9PiBwcm9wLm5hbWUgPT09IHRhYmxlQ29sdW1uLnVuaXQpIGFzIEFubm90YXRpb25UYWJsZUNvbHVtbjtcblx0XHRcdGN1cnJlbmN5T3JVbml0UHJvcGVydGllcy5hZGQodGFyZ2V0VW5pdFByb3BlcnR5LnJlbGF0aXZlUGF0aCk7XG5cdFx0fVxuXHR9KTtcblx0Y29uc3QgY29udGV4dERlZmluaW5nUHJvcGVydGllc0Zyb21BZ2dyZWdhdGlvbiA9IGdldENvbnRleHREZWZpbmluZ1Byb3BlcnRpZXNGcm9tQWdncmVnYXRpb25Bbm5vdGF0aW9uKGFnZ3JlZ2F0aW9uSGVscGVyKTtcblx0Y29uc3QgcmVzdWx0OiBSZWNvcmQ8c3RyaW5nLCBJbnRlcm5hbEV4dGVuc2lvbkZvckFuYWx5dGljcz4gPSB7fTtcblx0dGFibGVDb2x1bW5zLmZvckVhY2goKGNvbHVtbikgPT4ge1xuXHRcdGNvbnN0IHRhYmxlQ29sdW1uID0gY29sdW1uIGFzIEFubm90YXRpb25UYWJsZUNvbHVtbjtcblx0XHRjb25zdCBwcm9wZXJ0eSA9IGVudGl0eVR5cGUuZW50aXR5UHJvcGVydGllcy5maW5kKChwcm9wKSA9PiBwcm9wLm5hbWUgPT09IHRhYmxlQ29sdW1uLnJlbGF0aXZlUGF0aCk7XG5cblx0XHRpZiAodGFibGVDb2x1bW4ucHJvcGVydHlJbmZvcyAhPT0gdW5kZWZpbmVkIHx8ICF0YWJsZUNvbHVtbi5yZWxhdGl2ZVBhdGgpIHtcblx0XHRcdC8vIElnbm9yZSBjb21wbGV4IGNvbHVtbnNcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRsZXQgcmF3Q29udGV4dERlZmluaW5nUHJvcGVydGllcyA9IGNvbnRleHREZWZpbmluZ1Byb3BlcnRpZXNGcm9tQWdncmVnYXRpb25bdGFibGVDb2x1bW4ucmVsYXRpdmVQYXRoXSBhcyBzdHJpbmdbXSB8IHVuZGVmaW5lZDtcblxuXHRcdC8vIGlmIHRoZXJlIGlzIG5vIGN1c3RvbSBhZ2dyZWdhdGUgZGVmaW5pdGlvbiwgYW5kIHRoZSBwcm9wZXJ0eSBpcyBncm91cGFibGUsIHRoZW4gd2UgY2FuIHVzZSB0aGUgZGVmYXVsdCBjb250ZXh0IGRlZmluaW5nIHByb3BlcnRpZXNcblx0XHRsZXQgZnJvbUdyb3VwYWJsZVByb3BlcnR5ID0gZmFsc2U7XG5cdFx0aWYgKCFyYXdDb250ZXh0RGVmaW5pbmdQcm9wZXJ0aWVzICYmIHByb3BlcnR5ICYmICEhYWdncmVnYXRpb25IZWxwZXIuaXNQcm9wZXJ0eUdyb3VwYWJsZShwcm9wZXJ0eSkpIHtcblx0XHRcdGZyb21Hcm91cGFibGVQcm9wZXJ0eSA9IHRydWU7XG5cdFx0XHRyYXdDb250ZXh0RGVmaW5pbmdQcm9wZXJ0aWVzID0gcHJvcGVydHkuYW5ub3RhdGlvbnMuQWdncmVnYXRpb24/LkNvbnRleHREZWZpbmluZ1Byb3BlcnRpZXM/Lm1hcChcblx0XHRcdFx0KGN0eERlZlByb3BlcnR5KSA9PiBjdHhEZWZQcm9wZXJ0eS52YWx1ZVxuXHRcdFx0KTtcblx0XHR9XG5cblx0XHRpZiAoIXJhd0NvbnRleHREZWZpbmluZ1Byb3BlcnRpZXMgfHwgY3VycmVuY3lPclVuaXRQcm9wZXJ0aWVzLmhhcyh0YWJsZUNvbHVtbi5yZWxhdGl2ZVBhdGgpKSB7XG5cdFx0XHQvLyBJZ25vcmUgYWdncmVnYXRlcyBjb3JyZXNwb25kaW5nIHRvIGN1cnJlbmNpZXMgb3IgdW5pdHMgb2YgbWVhc3VyZVxuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHJlc3VsdFt0YWJsZUNvbHVtbi5uYW1lXSA9IHtcblx0XHRcdGZyb21Hcm91cGFibGVQcm9wZXJ0eTogZnJvbUdyb3VwYWJsZVByb3BlcnR5LFxuXHRcdFx0cmVsYXRpdmVQYXRoOiB0YWJsZUNvbHVtbi5yZWxhdGl2ZVBhdGhcblx0XHR9O1xuXHRcdGNvbnN0IGNvbnRleHREZWZpbmluZ1Byb3BlcnRpZXM6IHN0cmluZ1tdID0gW107XG5cdFx0cmF3Q29udGV4dERlZmluaW5nUHJvcGVydGllcy5mb3JFYWNoKChjb250ZXh0RGVmaW5pbmdQcm9wZXJ0eU5hbWUpID0+IHtcblx0XHRcdC8vIElnbm9yZSBjb250ZXh0LWRlZmluaW5nIHByb3BlcnRpZXMgY29ycmVzcG9uZGluZyB0byBjdXJyZW5jaWVzIG9yIHVuaXRzIG9mIG1lYXN1cmUgb2YgYWdncmVnYXRhYmxlIHByb3BlcnRpZXNcblx0XHRcdC8vIChidXQgdGhpcyBpcyBhbGxvd2VkIGZvciBncm91cGFibGUgcHJvcGVydGllcylcblx0XHRcdGlmICghZnJvbUdyb3VwYWJsZVByb3BlcnR5ICYmIGN1cnJlbmN5T3JVbml0UHJvcGVydGllcy5oYXMoY29udGV4dERlZmluaW5nUHJvcGVydHlOYW1lKSkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IGZvdW5kQ29sdW1uID0gZmluZENvbHVtbkJ5UGF0aChjb250ZXh0RGVmaW5pbmdQcm9wZXJ0eU5hbWUsIHRhYmxlQ29sdW1ucyk7XG5cdFx0XHRpZiAoZm91bmRDb2x1bW4pIHtcblx0XHRcdFx0Y29udGV4dERlZmluaW5nUHJvcGVydGllcy5wdXNoKGZvdW5kQ29sdW1uLm5hbWUpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdGlmIChjb250ZXh0RGVmaW5pbmdQcm9wZXJ0aWVzLmxlbmd0aCkge1xuXHRcdFx0cmVzdWx0W3RhYmxlQ29sdW1uLm5hbWVdLmFkZGl0aW9uYWxQcm9wZXJ0aWVzID0gY29udGV4dERlZmluaW5nUHJvcGVydGllcztcblx0XHR9XG5cdH0pO1xuXHRyZXR1cm4gcmVzdWx0O1xufTtcbi8qKlxuICogVXBkYXRlcyBhIHRhYmxlIHZpc3VhbGl6YXRpb24gZm9yIGFuYWx5dGljYWwgdXNlIGNhc2VzLlxuICogQHBhcmFtIHRhYmxlVmlzdWFsaXphdGlvbiBUaGUgdmlzdWFsaXphdGlvbiB0byBiZSB1cGRhdGVkXG4gKiBAcGFyYW0gZW50aXR5VHlwZSBUaGUgZW50aXR5IHR5cGUgZGlzcGxheWVkIGluIHRoZSB0YWJsZVxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcGFyYW0gcHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb24gVGhlIHByZXNlbnRhdGlvblZhcmlhbnQgYW5ub3RhdGlvbiAoaWYgYW55KVxuICovXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlVGFibGVWaXN1YWxpemF0aW9uRm9yVHlwZShcblx0dGFibGVWaXN1YWxpemF0aW9uOiBUYWJsZVZpc3VhbGl6YXRpb24sXG5cdGVudGl0eVR5cGU6IEVudGl0eVR5cGUsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0cHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb24/OiBQcmVzZW50YXRpb25WYXJpYW50VHlwZVxuKTogdm9pZCB7XG5cdGlmICh0YWJsZVZpc3VhbGl6YXRpb24uY29udHJvbC50eXBlID09PSBcIkFuYWx5dGljYWxUYWJsZVwiKSB7XG5cdFx0Y29uc3QgYWdncmVnYXRpb25EYXRhID0gZ2V0RXh0ZW5zaW9uSW5mb0Zyb21FbnRpdHlUeXBlKGVudGl0eVR5cGUsIHRhYmxlVmlzdWFsaXphdGlvbi5jb2x1bW5zLCBjb252ZXJ0ZXJDb250ZXh0KSxcblx0XHRcdGFnZ3JlZ2F0aW9uSGVscGVyID0gbmV3IEFnZ3JlZ2F0aW9uSGVscGVyKGVudGl0eVR5cGUsIGNvbnZlcnRlckNvbnRleHQpO1xuXHRcdGlmIChhZ2dyZWdhdGlvbkRhdGEpIHtcblx0XHRcdHRhYmxlVmlzdWFsaXphdGlvbi5lbmFibGVBbmFseXRpY3MgPSB0cnVlO1xuXHRcdFx0dGFibGVWaXN1YWxpemF0aW9uLmVuYWJsZSRzZWxlY3QgPSBmYWxzZTtcblx0XHRcdHRhYmxlVmlzdWFsaXphdGlvbi5lbmFibGUkJGdldEtlZXBBbGl2ZUNvbnRleHQgPSBmYWxzZTtcblx0XHRcdHRhYmxlVmlzdWFsaXphdGlvbi5hbmFseXRpY3NFeHRlbnNpb25zID0gYWdncmVnYXRpb25EYXRhO1xuXHRcdFx0X3VwZGF0ZVByb3BlcnR5SW5mb3NXaXRoQWdncmVnYXRlc0RlZmluaXRpb25zKHRhYmxlVmlzdWFsaXphdGlvbik7XG5cdFx0XHRjb25zdCBhbGxvd2VkVHJhbnNmb3JtYXRpb25zID0gYWdncmVnYXRpb25IZWxwZXIuZ2V0QWxsb3dlZFRyYW5zZm9ybWF0aW9ucygpO1xuXHRcdFx0dGFibGVWaXN1YWxpemF0aW9uLmVuYWJsZUJhc2ljU2VhcmNoID0gYWxsb3dlZFRyYW5zZm9ybWF0aW9ucyA/IGFsbG93ZWRUcmFuc2Zvcm1hdGlvbnMuaW5jbHVkZXMoXCJzZWFyY2hcIikgOiB0cnVlO1xuXHRcdFx0Ly8gQWRkIGdyb3VwIGFuZCBzb3J0IGNvbmRpdGlvbnMgZnJvbSB0aGUgcHJlc2VudGF0aW9uIHZhcmlhbnRcblx0XHRcdHRhYmxlVmlzdWFsaXphdGlvbi5hbm5vdGF0aW9uLmdyb3VwQ29uZGl0aW9ucyA9IGdldEdyb3VwQ29uZGl0aW9ucyhcblx0XHRcdFx0cHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb24sXG5cdFx0XHRcdHRhYmxlVmlzdWFsaXphdGlvbi5jb2x1bW5zLFxuXHRcdFx0XHR0YWJsZVZpc3VhbGl6YXRpb24uY29udHJvbC50eXBlXG5cdFx0XHQpO1xuXHRcdFx0dGFibGVWaXN1YWxpemF0aW9uLmFubm90YXRpb24uYWdncmVnYXRlQ29uZGl0aW9ucyA9IGdldEFnZ3JlZ2F0ZUNvbmRpdGlvbnMoXG5cdFx0XHRcdHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uLFxuXHRcdFx0XHR0YWJsZVZpc3VhbGl6YXRpb24uY29sdW1ucyxcblx0XHRcdFx0YWdncmVnYXRpb25EYXRhXG5cdFx0XHQpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRMb2cuZXJyb3IoYEFnZ3JlZ2F0aW9uIG5vdCBzdXBwb3J0ZWQgZm9yIHRoaXMgZW50aXR5IHR5cGU6ICR7ZW50aXR5VHlwZS5uYW1lfWApO1xuXHRcdH1cblx0XHR0YWJsZVZpc3VhbGl6YXRpb24uY29udHJvbC50eXBlID0gXCJHcmlkVGFibGVcIjsgLy8gQW5hbHl0aWNhbFRhYmxlIGlzbid0IGEgcmVhbCB0eXBlIGZvciB0aGUgTURDOlRhYmxlLCBzbyB3ZSBhbHdheXMgc3dpdGNoIGJhY2sgdG8gR3JpZFxuXHR9IGVsc2UgaWYgKHRhYmxlVmlzdWFsaXphdGlvbi5jb250cm9sLnR5cGUgPT09IFwiUmVzcG9uc2l2ZVRhYmxlXCIpIHtcblx0XHR0YWJsZVZpc3VhbGl6YXRpb24uYW5ub3RhdGlvbi5ncm91cENvbmRpdGlvbnMgPSBnZXRHcm91cENvbmRpdGlvbnMoXG5cdFx0XHRwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbixcblx0XHRcdHRhYmxlVmlzdWFsaXphdGlvbi5jb2x1bW5zLFxuXHRcdFx0dGFibGVWaXN1YWxpemF0aW9uLmNvbnRyb2wudHlwZVxuXHRcdCk7XG5cdH0gZWxzZSBpZiAodGFibGVWaXN1YWxpemF0aW9uLmNvbnRyb2wudHlwZSA9PT0gXCJUcmVlVGFibGVcIikge1xuXHRcdGNvbnN0IGFnZ3JlZ2F0aW9uSGVscGVyID0gbmV3IEFnZ3JlZ2F0aW9uSGVscGVyKGVudGl0eVR5cGUsIGNvbnZlcnRlckNvbnRleHQpO1xuXHRcdGNvbnN0IGFsbG93ZWRUcmFuc2Zvcm1hdGlvbnMgPSBhZ2dyZWdhdGlvbkhlbHBlci5nZXRBbGxvd2VkVHJhbnNmb3JtYXRpb25zKCk7XG5cdFx0dGFibGVWaXN1YWxpemF0aW9uLmVuYWJsZUJhc2ljU2VhcmNoID0gYWxsb3dlZFRyYW5zZm9ybWF0aW9ucyA/IGFsbG93ZWRUcmFuc2Zvcm1hdGlvbnMuaW5jbHVkZXMoXCJzZWFyY2hcIikgOiB0cnVlO1xuXHRcdHRhYmxlVmlzdWFsaXphdGlvbi5lbmFibGUkJGdldEtlZXBBbGl2ZUNvbnRleHQgPSB0cnVlO1xuXHRcdHRhYmxlVmlzdWFsaXphdGlvbi5hbm5vdGF0aW9uLmNoYW5nZVNpYmxpbmdGb3JSb290c1N1cHBvcnRlZCA9IChlbnRpdHlUeXBlPy5hbm5vdGF0aW9ucy5IaWVyYXJjaHk/Lltcblx0XHRcdGBSZWN1cnNpdmVIaWVyYXJjaHlBY3Rpb25zIyR7dGFibGVWaXN1YWxpemF0aW9uLmNvbnRyb2wuaGllcmFyY2h5UXVhbGlmaWVyID8/IFwiXCJ9YFxuXHRcdF0/LkNoYW5nZVNpYmxpbmdGb3JSb290c1N1cHBvcnRlZCA/PyB0cnVlKSBhcyBib29sZWFuO1xuXG5cdFx0dGFibGVWaXN1YWxpemF0aW9uLmFubm90YXRpb24uYWxsb3dEcm9wQmV0d2Vlbk5vZGVzID1cblx0XHRcdCEhZW50aXR5VHlwZS5hbm5vdGF0aW9ucy5IaWVyYXJjaHk/LltgUmVjdXJzaXZlSGllcmFyY2h5QWN0aW9ucyMke3RhYmxlVmlzdWFsaXphdGlvbi5jb250cm9sLmhpZXJhcmNoeVF1YWxpZmllciA/PyBcIlwifWBdXG5cdFx0XHRcdD8uQ2hhbmdlTmV4dFNpYmxpbmdBY3Rpb247XG5cdH1cblxuXHQvLyBTb21lIHByb3BlcnRpZXMgYXJlIGFsd2F5cyBsb2FkZWQgYmVjYXVzZSB0aGV5IGFyZSBuZWVkZWQgYnkgb3VyIGludGVybmFsIGxvZ2ljXG5cdC8vIC0gSGFzQWN0aXZlRW50aXR5IGlzIG5lZWRlZCBmb3IgdGhlIHJvdyBjcml0aWNhbGl0eSBleHByZXNzaW9uXG5cdC8vIC0gSGFzRHJhZnRFbnRpdHkgaXMgbmVlZGVkIGluIExSIHdpdGggVHJlZVRhYmxlIGFuZCBBbmFseXRpY2FsIFRhYmxlIHRvIG5hdmlnYXRlIHRvIHRoZSBkcmFmdCBpbnN0YW5jZSBpZiB0aGVyZSdzIG9uZSB3aGVuIGNsaWNraW5nIG9uIHRoZSBhY3RpdmUgaW5zdGFuY2Vcblx0Ly8gLSBIYXNEcmFmdEVudGl0eSBhbmQgRHJhZnRBZG1pbmlzdHJhdGl2ZURhdGEuSW5Qcm9jZXNzQnlVc2VyIGFyZSBuZWVkZWQgaW4gdGhlIExSIGZvciB0aGUgZGVsZXRlIGxvZ2ljXG5cdGlmIChNb2RlbEhlbHBlci5pc09iamVjdFBhdGhEcmFmdFN1cHBvcnRlZChjb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKSkpIHtcblx0XHR0YWJsZVZpc3VhbGl6YXRpb24ucmVxdWVzdEF0TGVhc3RbXCJIYXNBY3RpdmVFbnRpdHlcIl0gPSBbXCJkcmFmdEtleXNcIl07XG5cdFx0aWYgKHRhYmxlVmlzdWFsaXphdGlvbi5jb250cm9sLmFuYWx5dGljYWxDb25maWd1cmF0aW9uPy5hZ2dyZWdhdGlvbk9uTGVhZkxldmVsKSB7XG5cdFx0XHQvLyBJc0FjdGl2ZUVudGl0eSBrZXkgaXMgbmVlZGVkIGZvciBuYXZpZ2F0aW9uIHRvIHRoZSBkcmFmdCBpbnN0YW5jZVxuXHRcdFx0dGFibGVWaXN1YWxpemF0aW9uLnJlcXVlc3RBdExlYXN0W1wiSXNBY3RpdmVFbnRpdHlcIl0gPSBbXCJkcmFmdEtleXNcIl07XG5cdFx0fVxuXG5cdFx0aWYgKE1vZGVsSGVscGVyLmlzRHJhZnRSb290KGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0KCkpKSB7XG5cdFx0XHR0YWJsZVZpc3VhbGl6YXRpb24ucmVxdWVzdEF0TGVhc3RbXCJIYXNEcmFmdEVudGl0eVwiXSA9IFtcImRyYWZ0S2V5c1wiXTtcblx0XHRcdGlmICh0YWJsZVZpc3VhbGl6YXRpb24uZW5hYmxlQW5hbHl0aWNzICE9PSB0cnVlICYmIHRhYmxlVmlzdWFsaXphdGlvbi5jb250cm9sLnR5cGUgIT09IFwiVHJlZVRhYmxlXCIpIHtcblx0XHRcdFx0Ly8gV2UgZG9uJ3QgbG9hZCBEcmFmdEFkbWluaXN0cmF0aXZlRGF0YSBmb3IgQW5hbHl0aWNhbCBhbmQgVHJlZSB0YWJsZXMgaW4gTFIgYmVjYXVzZSB0aGV5IGRpc3BsYXkgYWN0aXZlIGluc3RhbmNlcyBvbmx5XG5cdFx0XHRcdC8vICh0aGVyZWZvcmUgbm8gRHJhZnRBZG1pbmlzdHJhdGl2ZURhdGEgaXMgYXZhaWxhYmxlKVxuXHRcdFx0XHR0YWJsZVZpc3VhbGl6YXRpb24ucmVxdWVzdEF0TGVhc3RbXCJEcmFmdEFkbWluaXN0cmF0aXZlRGF0YS9JblByb2Nlc3NCeVVzZXJcIl0gPSBbXCJkcmFmdEtleXNcIl07XG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHRNb2RlbEhlbHBlci5pc0NvbGxhYm9yYXRpb25EcmFmdFN1cHBvcnRlZEZyb21Db252ZXJ0ZXJDb250ZXh0KGNvbnZlcnRlckNvbnRleHQpICYmXG5cdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKS5pc0ZjbEVuYWJsZWQoKVxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHR0YWJsZVZpc3VhbGl6YXRpb24ucmVxdWVzdEF0TGVhc3RbXCJEcmFmdEFkbWluaXN0cmF0aXZlRGF0YS9EcmFmdEFkbWluaXN0cmF0aXZlVXNlclwiXSA9IFtcImRyYWZ0S2V5c1wiXTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGlmICh0YWJsZVZpc3VhbGl6YXRpb24uY29udHJvbC5lbmFibGVVcGxvYWRQbHVnaW4pIHtcblx0XHRjb25zdCBzdHJlYW1Qcm9wZXJ0eSA9IGNvbnZlcnRlckNvbnRleHQuZ2V0QW5ub3RhdGlvbkVudGl0eVR5cGUoKS5hbm5vdGF0aW9ucz8uVUk/Lk1lZGlhUmVzb3VyY2U/LlN0cmVhbT8uJHRhcmdldDtcblx0XHRpZiAoIXN0cmVhbVByb3BlcnR5KSB7XG5cdFx0XHR0aHJvdyBcIlVJLk1lZGlhUmVzb3VyY2UgYW5ub3RhdGlvbiB3aXRoIFN0cmVhbSBwcm9wZXJ0eSBtaXNzaW5nXCI7XG5cdFx0fVxuXG5cdFx0Ly8gdGhlIHVwbG9hZCBhY3Rpb24gaXMgdHJlYXRlZCBhcyB0aGUgY3JlYXRlIGFjdGlvblxuXHRcdGNvbnN0IHVwbG9hZEFjdGlvbiA9IHRhYmxlVmlzdWFsaXphdGlvbi5hY3Rpb25zLmZpbmQoKGEpID0+IGEua2V5ID09PSBTdGFuZGFyZEFjdGlvbktleXMuQ3JlYXRlKSBhcyBTdGFuZGFyZEFjdGlvbjtcblxuXHRcdHRhYmxlVmlzdWFsaXphdGlvbi5hbm5vdGF0aW9uLnVwbG9hZFRhYmxlID0ge1xuXHRcdFx0c3RyZWFtOiBzdHJlYW1Qcm9wZXJ0eS5uYW1lLFxuXHRcdFx0ZmlsZU5hbWU6IChzdHJlYW1Qcm9wZXJ0eS5hbm5vdGF0aW9ucy5Db3JlPy5Db250ZW50RGlzcG9zaXRpb24/LkZpbGVuYW1lIGFzIFBhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbjxzdHJpbmc+IHwgdW5kZWZpbmVkKT8ucGF0aCxcblx0XHRcdGZpbGVOYW1lTWF4TGVuZ3RoOiBzdHJlYW1Qcm9wZXJ0eS5hbm5vdGF0aW9ucy5Db3JlPy5Db250ZW50RGlzcG9zaXRpb24/LkZpbGVuYW1lPy4kdGFyZ2V0Py5tYXhMZW5ndGgsXG5cdFx0XHRhY2NlcHRhYmxlTWVkaWFUeXBlczogc3RyZWFtUHJvcGVydHkuYW5ub3RhdGlvbnMuQ29yZT8uQWNjZXB0YWJsZU1lZGlhVHlwZXMsXG5cdFx0XHRtYXhMZW5ndGg6IHN0cmVhbVByb3BlcnR5Lm1heExlbmd0aCxcblx0XHRcdHVwbG9hZEFjdGlvbjogdXBsb2FkQWN0aW9uXG5cdFx0fTtcblx0fVxufVxuXG50eXBlIGZpZWxkT3JpZ2luID1cblx0fCBcInNlbWFudGljS2V5XCJcblx0fCBcInJlc3RyaWN0aW9uXCJcblx0fCBcInNlY29uZGFyeUtleVwiXG5cdHwgXCJwcmVzZW50YXRpb25WYXJpYW50XCJcblx0fCBcIm5hdmlnYXRpb25cIlxuXHR8IFwib3BlcmF0aW9uXCJcblx0fCBcImFsdGVybmF0ZUFuZFNlY29uZGFyeUtleXNcIlxuXHR8IFwiZHJhZnRLZXlzXCI7XG5leHBvcnQgdHlwZSBSZXF1ZXN0QXRMZWFzdCA9IFJlY29yZDxzdHJpbmcsIGZpZWxkT3JpZ2luW10+O1xuXG4vKipcbiAqIENyZWF0ZXMgYW5kIHJldHVybnMgYSBzZWxlY3QgcXVlcnkgd2l0aCB0aGUgc2VsZWN0ZWQgZmllbGRzIGZyb20gdGhlIHBhcmFtZXRlcnMgdGhhdCB3ZXJlIHBhc3NlZC5cbiAqIEBwYXJhbSBsaW5lSXRlbSBUaGUgTGluZUl0ZW0gd2Ugd2FudCB0aGUgcmVxdWVzdGVkIHByb3BlcnRpZXMgZnJvbS5cbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBjb252ZXJ0ZXIgY29udGV4dC5cbiAqIEBwYXJhbSBvcGVyYXRpb25BdmFpbGFibGUgQSBzdHJpbmcgY29udGFpbmluZyB0aGUgYXZhaWxhYmxlIG9wZXJhdGlvbiwgd2hpY2ggd2UnbGwgdGFrZSB0aGUgcHJvcGVydGllcyB0byBhZGQgdG8gdGhlIHNlbGVjdCBxdWVyeS5cbiAqIEBwYXJhbSBwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbiBUaGUgcHJlc2VudGF0aW9uIHZhcmlhbnQgYW5ub3RhdGlvbiB3aGljaCB3ZSdsbCB0YWtlIHRoZSBSZXF1ZXN0QXRMZWFzdCBwcm9wZXJ0aWVzIGZyb20uXG4gKiBAcmV0dXJucyBUaGUgJ3NlbGVjdCcgcXVlcnkgdGhhdCBoYXMgdGhlIHNlbGVjdGVkIGZpZWxkcyBmcm9tIHRoZSBwYXJhbWV0ZXJzIHRoYXQgd2VyZSBwYXNzZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVSZXF1ZXN0ZWRQcm9wZXJ0aWVzKFxuXHRsaW5lSXRlbTogTGluZUl0ZW0sXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdG9wZXJhdGlvbkF2YWlsYWJsZT86IHN0cmluZyxcblx0cHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb24/OiBQcmVzZW50YXRpb25WYXJpYW50VHlwZVxuKTogUmVxdWVzdEF0TGVhc3Qge1xuXHRjb25zdCBlbnRpdHlUeXBlID0gY29udmVydGVyQ29udGV4dC5nZXRBbm5vdGF0aW9uRW50aXR5VHlwZShsaW5lSXRlbSk7XG5cdGNvbnN0IHNlbGVjdGVkRmllbGRzOiBSZXF1ZXN0QXRMZWFzdCA9IHt9O1xuXHRmdW5jdGlvbiBwdXNoRmllbGQoZmllbGROYW1lOiBzdHJpbmcsIG9yaWdpbjogZmllbGRPcmlnaW4pOiB2b2lkIHtcblx0XHRpZiAoZmllbGROYW1lICYmIGZpZWxkTmFtZS5pbmRleE9mKFwiL1wiKSAhPT0gMCkge1xuXHRcdFx0Ly8gRG8gbm90IGFkZCBzaW5nbGV0b24gcHJvcGVydHkgKHdpdGggYWJzb2x1dGUgcGF0aCkgdG8gJHNlbGVjdFxuXHRcdFx0aWYgKCFzZWxlY3RlZEZpZWxkc1tmaWVsZE5hbWVdKSB7XG5cdFx0XHRcdHNlbGVjdGVkRmllbGRzW2ZpZWxkTmFtZV0gPSBbb3JpZ2luXTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHNlbGVjdGVkRmllbGRzW2ZpZWxkTmFtZV0ucHVzaChvcmlnaW4pO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGZ1bmN0aW9uIHB1c2hGaWVsZExpc3QoZmllbGRzOiBzdHJpbmdbXSwgb3JpZ2luOiBmaWVsZE9yaWdpbik6IHZvaWQge1xuXHRcdGlmIChmaWVsZHM/Lmxlbmd0aCkge1xuXHRcdFx0ZmllbGRzLmZvckVhY2goKGZpZWxkKSA9PiBwdXNoRmllbGQoZmllbGQsIG9yaWdpbikpO1xuXHRcdH1cblx0fVxuXG5cdGNvbnN0IG9wZXJhdGlvbkF2YWlsYWJsZVByb3BlcnRpZXMgPSAob3BlcmF0aW9uQXZhaWxhYmxlIHx8IFwiXCIpLnNwbGl0KFwiLFwiKTtcblx0Y29uc3QgdmFsaWRQcm9wZXJ0aWVzID0gb3BlcmF0aW9uQXZhaWxhYmxlUHJvcGVydGllcy5maWx0ZXIoZnVuY3Rpb24gKHByb3BOYW1lOiBzdHJpbmcpIHtcblx0XHRyZXR1cm4gZW50aXR5VHlwZS5yZXNvbHZlUGF0aChwcm9wTmFtZSk7XG5cdH0pO1xuXHRjb25zdCBzZW1hbnRpY0tleXM6IHN0cmluZ1tdID0gKGVudGl0eVR5cGUuYW5ub3RhdGlvbnMuQ29tbW9uPy5TZW1hbnRpY0tleSB8fCBbXSkubWFwKChzZW1hbnRpY0tleSkgPT4gc2VtYW50aWNLZXkudmFsdWUpO1xuXHRjb25zdCBjYXBhYmlsaXRpZXNBbm5vdGF0aW9uID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXQoKT8uYW5ub3RhdGlvbnM/LkNhcGFiaWxpdGllcztcblx0Y29uc3QgYWx0ZXJuYXRlQW5kU2Vjb25kYXJ5S2V5cyA9IE1vZGVsSGVscGVyLmdldEFsdGVybmF0ZUFuZFNlY29uZGFyeUtleXMoZW50aXR5VHlwZSwgY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXQoKSBhcyBFbnRpdHlTZXQpO1xuXHRpZiAocHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb24pIHtcblx0XHRwdXNoRmllbGRMaXN0KHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uLlJlcXVlc3RBdExlYXN0Py5tYXAoKHByb3BlcnR5UGF0aCkgPT4gcHJvcGVydHlQYXRoLnZhbHVlKSwgXCJwcmVzZW50YXRpb25WYXJpYW50XCIpO1xuXHR9XG5cdHB1c2hGaWVsZExpc3QoZ2V0TmF2aWdhdGlvbkF2YWlsYWJsZUZpZWxkc0Zyb21MaW5lSXRlbShsaW5lSXRlbSwgZW50aXR5VHlwZSksIFwibmF2aWdhdGlvblwiKTtcblx0cHVzaEZpZWxkTGlzdCh2YWxpZFByb3BlcnRpZXMsIFwib3BlcmF0aW9uXCIpO1xuXHRwdXNoRmllbGRMaXN0KHNlbWFudGljS2V5cywgXCJzZW1hbnRpY0tleVwiKTtcblx0cHVzaEZpZWxkTGlzdChhbHRlcm5hdGVBbmRTZWNvbmRhcnlLZXlzLCBcImFsdGVybmF0ZUFuZFNlY29uZGFyeUtleXNcIik7XG5cdGlmIChjYXBhYmlsaXRpZXNBbm5vdGF0aW9uKSB7XG5cdFx0cHVzaEZpZWxkKChjYXBhYmlsaXRpZXNBbm5vdGF0aW9uLkRlbGV0ZVJlc3RyaWN0aW9ucz8uRGVsZXRhYmxlIGFzIFBhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbjxib29sZWFuPik/LnBhdGgsIFwicmVzdHJpY3Rpb25cIik7XG5cdFx0cHVzaEZpZWxkKChjYXBhYmlsaXRpZXNBbm5vdGF0aW9uLlVwZGF0ZVJlc3RyaWN0aW9ucz8uVXBkYXRhYmxlIGFzIFBhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbjxib29sZWFuPik/LnBhdGgsIFwicmVzdHJpY3Rpb25cIik7XG5cdH1cblxuXHRyZXR1cm4gc2VsZWN0ZWRGaWVsZHM7XG59XG5cbi8qKlxuICogVGhpcyByZXR1cm4gdGhlIHByb3BlcnR5IHRoYXQgYXJlIGF2YWlsYWJsZSBmcm9tIHRoZSBOYXZpZ2F0aW9uQXZhaWxhYmxlIGFubm90YXRpb24gb24gSUJOIEZpZWxkcy5cbiAqIEBwYXJhbSBsaW5lSXRlbSBUaGUgbGluZSBpdGVtIGFubm90YXRpb24uXG4gKiBAcGFyYW0gZW50aXR5VHlwZSBUaGUgRW50aXR5IFR5cGUuXG4gKiBAcmV0dXJucyBBbiBhcnJheSBjb250YWluaW5nIHRoZSBwcm9wZXJ0aWVzIG5hbWUuXG4gKi9cbmZ1bmN0aW9uIGdldE5hdmlnYXRpb25BdmFpbGFibGVGaWVsZHNGcm9tTGluZUl0ZW0obGluZUl0ZW06IExpbmVJdGVtLCBlbnRpdHlUeXBlOiBFbnRpdHlUeXBlKTogc3RyaW5nW10ge1xuXHRjb25zdCBzZWxlY3RlZEZpZWxkczogc3RyaW5nW10gPSBbXTtcblx0bGluZUl0ZW0uZm9yRWFjaChmdW5jdGlvbiAocmVjb3JkKSB7XG5cdFx0aWYgKFxuXHRcdFx0cmVjb3JkLiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24gJiZcblx0XHRcdCFyZWNvcmQuSW5saW5lICYmXG5cdFx0XHQhcmVjb3JkLkRldGVybWluaW5nICYmXG5cdFx0XHRpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbihyZWNvcmQuTmF2aWdhdGlvbkF2YWlsYWJsZSlcblx0XHQpIHtcblx0XHRcdGNvbnN0IHBhdGggPSAocmVjb3JkLk5hdmlnYXRpb25BdmFpbGFibGUgYXMgdW5rbm93biBhcyB7IHBhdGg6IHN0cmluZyB9KS5wYXRoO1xuXHRcdFx0aWYgKGVudGl0eVR5cGUucmVzb2x2ZVBhdGgocGF0aCkpIHtcblx0XHRcdFx0c2VsZWN0ZWRGaWVsZHMucHVzaChwYXRoKTtcblx0XHRcdH1cblx0XHR9XG5cdH0pO1xuXHRyZXR1cm4gc2VsZWN0ZWRGaWVsZHM7XG59XG5cbi8qKlxuICogR2V0IHRoZSBuYXZpZ2F0aW9uIHRhcmdldCBwYXRoIGZyb20gbWFuaWZlc3Qgc2V0dGluZ3MuXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgY29udmVydGVyIGNvbnRleHRcbiAqIEBwYXJhbSBuYXZpZ2F0aW9uUHJvcGVydHlQYXRoIFRoZSBuYXZpZ2F0aW9uIHBhdGggdG8gY2hlY2sgaW4gdGhlIG1hbmlmZXN0IHNldHRpbmdzXG4gKiBAcmV0dXJucyBOYXZpZ2F0aW9uIHBhdGggZnJvbSBtYW5pZmVzdCBzZXR0aW5nc1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TmF2aWdhdGlvblRhcmdldFBhdGgoY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LCBuYXZpZ2F0aW9uUHJvcGVydHlQYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuXHRjb25zdCBtYW5pZmVzdFdyYXBwZXIgPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpO1xuXHRpZiAobmF2aWdhdGlvblByb3BlcnR5UGF0aCAmJiBtYW5pZmVzdFdyYXBwZXIuZ2V0TmF2aWdhdGlvbkNvbmZpZ3VyYXRpb24obmF2aWdhdGlvblByb3BlcnR5UGF0aCkpIHtcblx0XHRjb25zdCBuYXZDb25maWcgPSBtYW5pZmVzdFdyYXBwZXIuZ2V0TmF2aWdhdGlvbkNvbmZpZ3VyYXRpb24obmF2aWdhdGlvblByb3BlcnR5UGF0aCk7XG5cdFx0aWYgKE9iamVjdC5rZXlzKG5hdkNvbmZpZykubGVuZ3RoID4gMCkge1xuXHRcdFx0cmV0dXJuIG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGg7XG5cdFx0fVxuXHR9XG5cdGNvbnN0IGRhdGFNb2RlbFBhdGggPSBjb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKTtcblx0Y29uc3QgY29udGV4dFBhdGggPSBjb252ZXJ0ZXJDb250ZXh0LmdldENvbnRleHRQYXRoKCk7XG5cdGNvbnN0IG5hdkNvbmZpZ0ZvckNvbnRleHRQYXRoID0gbWFuaWZlc3RXcmFwcGVyLmdldE5hdmlnYXRpb25Db25maWd1cmF0aW9uKGNvbnRleHRQYXRoKTtcblx0aWYgKG5hdkNvbmZpZ0ZvckNvbnRleHRQYXRoICYmIE9iamVjdC5rZXlzKG5hdkNvbmZpZ0ZvckNvbnRleHRQYXRoKS5sZW5ndGggPiAwKSB7XG5cdFx0cmV0dXJuIGNvbnRleHRQYXRoO1xuXHR9XG5cdHJldHVybiBkYXRhTW9kZWxQYXRoLnRhcmdldEVudGl0eVNldCA/IGRhdGFNb2RlbFBhdGgudGFyZ2V0RW50aXR5U2V0Lm5hbWUgOiBkYXRhTW9kZWxQYXRoLnN0YXJ0aW5nRW50aXR5U2V0Lm5hbWU7XG59XG5cbmZ1bmN0aW9uIGdldFNlbWFudGljS2V5c0FuZFRpdGxlSW5mbyhjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4pOiB7XG5cdGhlYWRlckluZm9UaXRsZVBhdGg6IHN0cmluZztcblx0c2VtYW50aWNLZXlDb2x1bW5zOiBzdHJpbmdbXTtcblx0aGVhZGVySW5mb1R5cGVOYW1lOiBQcm9wZXJ0eUFubm90YXRpb25WYWx1ZTxTdHJpbmc+IHwgdW5kZWZpbmVkO1xufSB7XG5cdGNvbnN0IGhlYWRlckluZm9UaXRsZVBhdGggPSAoY29udmVydGVyQ29udGV4dC5nZXRBbm5vdGF0aW9uRW50aXR5VHlwZSgpPy5hbm5vdGF0aW9ucz8uVUk/LkhlYWRlckluZm8/LlRpdGxlIGFzIERhdGFGaWVsZFR5cGVzKT8uVmFsdWVcblx0XHQ/LnBhdGg7XG5cdGNvbnN0IHNlbWFudGljS2V5QW5ub3RhdGlvbnMgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEFubm90YXRpb25FbnRpdHlUeXBlKCk/LmFubm90YXRpb25zPy5Db21tb24/LlNlbWFudGljS2V5O1xuXHRjb25zdCBoZWFkZXJJbmZvVHlwZU5hbWUgPSBjb252ZXJ0ZXJDb250ZXh0Py5nZXRBbm5vdGF0aW9uRW50aXR5VHlwZSgpPy5hbm5vdGF0aW9ucz8uVUk/LkhlYWRlckluZm8/LlR5cGVOYW1lO1xuXHRjb25zdCBzZW1hbnRpY0tleUNvbHVtbnM6IHN0cmluZ1tdID0gW107XG5cdGlmIChzZW1hbnRpY0tleUFubm90YXRpb25zKSB7XG5cdFx0c2VtYW50aWNLZXlBbm5vdGF0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uIChvQ29sdW1uKSB7XG5cdFx0XHRzZW1hbnRpY0tleUNvbHVtbnMucHVzaChvQ29sdW1uLnZhbHVlKTtcblx0XHR9KTtcblx0fVxuXHRyZXR1cm4geyBoZWFkZXJJbmZvVGl0bGVQYXRoLCBzZW1hbnRpY0tleUNvbHVtbnMsIGhlYWRlckluZm9UeXBlTmFtZSB9O1xufVxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVRhYmxlVmlzdWFsaXphdGlvbihcblx0bGluZUl0ZW1Bbm5vdGF0aW9uOiBMaW5lSXRlbSxcblx0dmlzdWFsaXphdGlvblBhdGg6IHN0cmluZyxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHRwYXJhbXM/OiBQYXJ0aWFsPHtcblx0XHRwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbjogUHJlc2VudGF0aW9uVmFyaWFudFR5cGU7XG5cdFx0c2VsZWN0aW9uVmFyaWFudEFubm90YXRpb246IFNlbGVjdGlvblZhcmlhbnRUeXBlO1xuXHRcdGlzQ29uZGVuc2VkVGFibGVMYXlvdXRDb21wbGlhbnQ6IGJvb2xlYW47XG5cdH0+XG4pOiBUYWJsZVZpc3VhbGl6YXRpb24ge1xuXHRjb25zdCB7IHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uLCBpc0NvbmRlbnNlZFRhYmxlTGF5b3V0Q29tcGxpYW50LCBzZWxlY3Rpb25WYXJpYW50QW5ub3RhdGlvbiB9ID0gcGFyYW1zID8/IHt9O1xuXHRjb25zdCB0YWJsZU1hbmlmZXN0Q29uZmlnID0gZ2V0VGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24oXG5cdFx0bGluZUl0ZW1Bbm5vdGF0aW9uLFxuXHRcdHZpc3VhbGl6YXRpb25QYXRoLFxuXHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0aXNDb25kZW5zZWRUYWJsZUxheW91dENvbXBsaWFudCxcblx0XHRzZWxlY3Rpb25WYXJpYW50QW5ub3RhdGlvblxuXHQpO1xuXHRjb25zdCB7IG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGggfSA9IHNwbGl0UGF0aCh2aXN1YWxpemF0aW9uUGF0aCk7XG5cdGNvbnN0IG5hdmlnYXRpb25UYXJnZXRQYXRoID0gZ2V0TmF2aWdhdGlvblRhcmdldFBhdGgoY29udmVydGVyQ29udGV4dCwgbmF2aWdhdGlvblByb3BlcnR5UGF0aCk7XG5cdGNvbnN0IG5hdmlnYXRpb25TZXR0aW5ncyA9IGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCkuZ2V0TmF2aWdhdGlvbkNvbmZpZ3VyYXRpb24obmF2aWdhdGlvblRhcmdldFBhdGgpO1xuXHRjb25zdCBjb2x1bW5zID0gZ2V0VGFibGVDb2x1bW5zKGxpbmVJdGVtQW5ub3RhdGlvbiwgdGFibGVNYW5pZmVzdENvbmZpZy50eXBlLCB2aXN1YWxpemF0aW9uUGF0aCwgY29udmVydGVyQ29udGV4dCk7XG5cdGNvbnN0IG9wZXJhdGlvbkF2YWlsYWJsZU1hcCA9IGdldE9wZXJhdGlvbkF2YWlsYWJsZU1hcChsaW5lSXRlbUFubm90YXRpb24sIGNvbnZlcnRlckNvbnRleHQpO1xuXHRjb25zdCBzZW1hbnRpY0tleXNBbmRIZWFkZXJJbmZvVGl0bGUgPSBnZXRTZW1hbnRpY0tleXNBbmRUaXRsZUluZm8oY29udmVydGVyQ29udGV4dCk7XG5cdGNvbnN0IHN0YW5kYXJkQWN0aW9uc0NvbmZpZ3VyYXRpb24gPSBnZXRTdGFuZGFyZEFjdGlvbnNDb25maWd1cmF0aW9uKFxuXHRcdGxpbmVJdGVtQW5ub3RhdGlvbixcblx0XHR2aXN1YWxpemF0aW9uUGF0aCxcblx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdHRhYmxlTWFuaWZlc3RDb25maWcsXG5cdFx0bmF2aWdhdGlvblNldHRpbmdzXG5cdCk7XG5cdGNvbnN0IHRhYmxlQW5ub3RhdGlvbiA9IGdldFRhYmxlQW5ub3RhdGlvbkNvbmZpZ3VyYXRpb24oXG5cdFx0bGluZUl0ZW1Bbm5vdGF0aW9uLFxuXHRcdHZpc3VhbGl6YXRpb25QYXRoLFxuXHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0dGFibGVNYW5pZmVzdENvbmZpZyxcblx0XHRjb2x1bW5zLFxuXHRcdG5hdmlnYXRpb25TZXR0aW5ncyxcblx0XHRzdGFuZGFyZEFjdGlvbnNDb25maWd1cmF0aW9uLFxuXHRcdHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uXG5cdCk7XG5cdGNvbnN0IHRhYmxlQWN0aW9ucyA9IGdldFRhYmxlQWN0aW9ucyhcblx0XHRsaW5lSXRlbUFubm90YXRpb24sXG5cdFx0dmlzdWFsaXphdGlvblBhdGgsXG5cdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHRzdGFuZGFyZEFjdGlvbnNDb25maWd1cmF0aW9uLnN0YW5kYXJkQWN0aW9ucyxcblx0XHRuYXZpZ2F0aW9uU2V0dGluZ3Ncblx0KTtcblx0Y29uc3Qgb3BlcmF0aW9uQXZhaWxhYmxlID0gZ2V0T3BlcmF0aW9uQXZhaWxhYmxlUHJvcGVydGllcyhvcGVyYXRpb25BdmFpbGFibGVNYXAsIGNvbnZlcnRlckNvbnRleHQpO1xuXHRsZXQgaGVhZGVyID0gdGFibGVNYW5pZmVzdENvbmZpZy5oZWFkZXI7XG5cdGhlYWRlciA/Pz0gdGFibGVBbm5vdGF0aW9uLnRpdGxlID09PSBcIlwiID8gdW5kZWZpbmVkIDogdGFibGVBbm5vdGF0aW9uLnRpdGxlO1xuXHRjb25zdCBvVmlzdWFsaXphdGlvbjogVGFibGVWaXN1YWxpemF0aW9uID0ge1xuXHRcdHR5cGU6IFZpc3VhbGl6YXRpb25UeXBlLlRhYmxlLFxuXHRcdGFubm90YXRpb246IHRhYmxlQW5ub3RhdGlvbixcblx0XHRjb250cm9sOiB0YWJsZU1hbmlmZXN0Q29uZmlnLFxuXHRcdGFjdGlvbnM6IHRhYmxlQWN0aW9ucy5hY3Rpb25zLFxuXHRcdGNvbW1hbmRBY3Rpb25zOiB0YWJsZUFjdGlvbnMuY29tbWFuZEFjdGlvbnMsXG5cdFx0Y29sdW1uczogY29sdW1ucyxcblx0XHRvcGVyYXRpb25BdmFpbGFibGVNYXA6IEpTT04uc3RyaW5naWZ5KG9wZXJhdGlvbkF2YWlsYWJsZU1hcCksXG5cdFx0b3BlcmF0aW9uQXZhaWxhYmxlUHJvcGVydGllczogb3BlcmF0aW9uQXZhaWxhYmxlLFxuXHRcdGhlYWRlckluZm9UaXRsZTogc2VtYW50aWNLZXlzQW5kSGVhZGVySW5mb1RpdGxlLmhlYWRlckluZm9UaXRsZVBhdGgsXG5cdFx0c2VtYW50aWNLZXlzOiBzZW1hbnRpY0tleXNBbmRIZWFkZXJJbmZvVGl0bGUuc2VtYW50aWNLZXlDb2x1bW5zLFxuXHRcdGhlYWRlckluZm9UeXBlTmFtZTogc2VtYW50aWNLZXlzQW5kSGVhZGVySW5mb1RpdGxlLmhlYWRlckluZm9UeXBlTmFtZSxcblx0XHRlbmFibGUkc2VsZWN0OiB0cnVlLFxuXHRcdGVuYWJsZSQkZ2V0S2VlcEFsaXZlQ29udGV4dDogdHJ1ZSxcblx0XHRoZWFkZXI6IGhlYWRlcixcblx0XHRoZWFkZXJWaXNpYmxlOiB0YWJsZU1hbmlmZXN0Q29uZmlnLmhlYWRlclZpc2libGUsXG5cdFx0cmVxdWVzdEF0TGVhc3Q6IGNyZWF0ZVJlcXVlc3RlZFByb3BlcnRpZXMobGluZUl0ZW1Bbm5vdGF0aW9uLCBjb252ZXJ0ZXJDb250ZXh0LCBvcGVyYXRpb25BdmFpbGFibGUsIHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uKSxcblx0XHRoYW5kbGVQYXRjaFNlbnQ6IGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCkuZ2V0VGVtcGxhdGVUeXBlKCkgIT09IFRlbXBsYXRlVHlwZS5MaXN0UmVwb3J0XG5cdH07XG5cdHVwZGF0ZUxpbmtlZFByb3BlcnRpZXMoY29udmVydGVyQ29udGV4dCwgY29sdW1ucyk7XG5cdHVwZGF0ZVRhYmxlVmlzdWFsaXphdGlvbkZvclR5cGUoXG5cdFx0b1Zpc3VhbGl6YXRpb24sXG5cdFx0Y29udmVydGVyQ29udGV4dC5nZXRBbm5vdGF0aW9uRW50aXR5VHlwZShsaW5lSXRlbUFubm90YXRpb24pLFxuXHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0cHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb25cblx0KTtcblx0cmV0dXJuIG9WaXN1YWxpemF0aW9uO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZURlZmF1bHRUYWJsZVZpc3VhbGl6YXRpb24oXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0aXNCbGFua1RhYmxlPzogYm9vbGVhblxuKTogVGFibGVWaXN1YWxpemF0aW9uIHtcblx0Y29uc3QgdGFibGVNYW5pZmVzdENvbmZpZyA9IGdldFRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uKHVuZGVmaW5lZCwgXCJcIiwgY29udmVydGVyQ29udGV4dCwgZmFsc2UpO1xuXHRjb25zdCBjb2x1bW5zID0gZ2V0Q29sdW1uc0Zyb21FbnRpdHlUeXBlKFxuXHRcdHt9LFxuXHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpLFxuXHRcdFtdLFxuXHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0dGFibGVNYW5pZmVzdENvbmZpZy50eXBlLFxuXHRcdHRhYmxlTWFuaWZlc3RDb25maWcuY3JlYXRpb25Nb2RlLFxuXHRcdHt9XG5cdCk7XG5cdGNvbnN0IG9wZXJhdGlvbkF2YWlsYWJsZU1hcCA9IGdldE9wZXJhdGlvbkF2YWlsYWJsZU1hcCh1bmRlZmluZWQsIGNvbnZlcnRlckNvbnRleHQpO1xuXHRjb25zdCBzZW1hbnRpY0tleXNBbmRIZWFkZXJJbmZvVGl0bGUgPSBnZXRTZW1hbnRpY0tleXNBbmRUaXRsZUluZm8oY29udmVydGVyQ29udGV4dCk7XG5cdGNvbnN0IG5hdmlnYXRpb25UYXJnZXRQYXRoID0gZ2V0TmF2aWdhdGlvblRhcmdldFBhdGgoY29udmVydGVyQ29udGV4dCwgXCJcIik7XG5cdGNvbnN0IG5hdmlnYXRpb25TZXR0aW5ncyA9IGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCkuZ2V0TmF2aWdhdGlvbkNvbmZpZ3VyYXRpb24obmF2aWdhdGlvblRhcmdldFBhdGgpO1xuXHRjb25zdCBzdGFuZGFyZEFjdGlvbnNDb25maWd1cmF0aW9uID0gZ2V0U3RhbmRhcmRBY3Rpb25zQ29uZmlndXJhdGlvbihcblx0XHR1bmRlZmluZWQsXG5cdFx0XCJcIixcblx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdHRhYmxlTWFuaWZlc3RDb25maWcsXG5cdFx0bmF2aWdhdGlvblNldHRpbmdzXG5cdCk7XG5cdGNvbnN0IG9WaXN1YWxpemF0aW9uOiBUYWJsZVZpc3VhbGl6YXRpb24gPSB7XG5cdFx0dHlwZTogVmlzdWFsaXphdGlvblR5cGUuVGFibGUsXG5cdFx0YW5ub3RhdGlvbjogZ2V0VGFibGVBbm5vdGF0aW9uQ29uZmlndXJhdGlvbihcblx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdFwiXCIsXG5cdFx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdFx0dGFibGVNYW5pZmVzdENvbmZpZyxcblx0XHRcdGlzQmxhbmtUYWJsZSA/IFtdIDogY29sdW1ucyxcblx0XHRcdG5hdmlnYXRpb25TZXR0aW5ncyxcblx0XHRcdHN0YW5kYXJkQWN0aW9uc0NvbmZpZ3VyYXRpb25cblx0XHQpLFxuXHRcdGNvbnRyb2w6IHRhYmxlTWFuaWZlc3RDb25maWcsXG5cdFx0YWN0aW9uczogW10sXG5cdFx0Y29sdW1uczogY29sdW1ucyxcblx0XHRvcGVyYXRpb25BdmFpbGFibGVNYXA6IEpTT04uc3RyaW5naWZ5KG9wZXJhdGlvbkF2YWlsYWJsZU1hcCksXG5cdFx0b3BlcmF0aW9uQXZhaWxhYmxlUHJvcGVydGllczogZ2V0T3BlcmF0aW9uQXZhaWxhYmxlUHJvcGVydGllcyhvcGVyYXRpb25BdmFpbGFibGVNYXAsIGNvbnZlcnRlckNvbnRleHQpLFxuXHRcdGhlYWRlckluZm9UaXRsZTogc2VtYW50aWNLZXlzQW5kSGVhZGVySW5mb1RpdGxlLmhlYWRlckluZm9UaXRsZVBhdGgsXG5cdFx0c2VtYW50aWNLZXlzOiBzZW1hbnRpY0tleXNBbmRIZWFkZXJJbmZvVGl0bGUuc2VtYW50aWNLZXlDb2x1bW5zLFxuXHRcdGhlYWRlckluZm9UeXBlTmFtZTogc2VtYW50aWNLZXlzQW5kSGVhZGVySW5mb1RpdGxlLmhlYWRlckluZm9UeXBlTmFtZSxcblx0XHRlbmFibGUkc2VsZWN0OiB0cnVlLFxuXHRcdGVuYWJsZSQkZ2V0S2VlcEFsaXZlQ29udGV4dDogdHJ1ZSxcblx0XHRoZWFkZXI6IHRhYmxlTWFuaWZlc3RDb25maWcuaGVhZGVyLFxuXHRcdGhlYWRlclZpc2libGU6IHRhYmxlTWFuaWZlc3RDb25maWcuaGVhZGVyVmlzaWJsZSxcblx0XHRoYW5kbGVQYXRjaFNlbnQ6IGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCkuZ2V0VGVtcGxhdGVUeXBlKCkgIT09IFRlbXBsYXRlVHlwZS5MaXN0UmVwb3J0LFxuXHRcdHJlcXVlc3RBdExlYXN0OiB7fVxuXHR9O1xuXHR1cGRhdGVMaW5rZWRQcm9wZXJ0aWVzKGNvbnZlcnRlckNvbnRleHQsIGNvbHVtbnMpO1xuXHR1cGRhdGVUYWJsZVZpc3VhbGl6YXRpb25Gb3JUeXBlKG9WaXN1YWxpemF0aW9uLCBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKSwgY29udmVydGVyQ29udGV4dCk7XG5cdHJldHVybiBvVmlzdWFsaXphdGlvbjtcbn1cbi8qKlxuICogR2V0cyB0aGUgbWFwIG9mIENvcmUuT3BlcmF0aW9uQXZhaWxhYmxlIHByb3BlcnR5IHBhdGhzIGZvciBhbGwgRGF0YUZpZWxkRm9yQWN0aW9ucy5cbiAqIEBwYXJhbSBsaW5lSXRlbUFubm90YXRpb24gVGhlIGluc3RhbmNlIG9mIHRoZSBsaW5lIGl0ZW1cbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBpbnN0YW5jZSBvZiB0aGUgY29udmVydGVyIGNvbnRleHRcbiAqIEByZXR1cm5zIFRoZSByZWNvcmQgY29udGFpbmluZyBhbGwgYWN0aW9uIG5hbWVzIGFuZCB0aGVpciBjb3JyZXNwb25kaW5nIENvcmUuT3BlcmF0aW9uQXZhaWxhYmxlIHByb3BlcnR5IHBhdGhzXG4gKi9cbmZ1bmN0aW9uIGdldE9wZXJhdGlvbkF2YWlsYWJsZU1hcChcblx0bGluZUl0ZW1Bbm5vdGF0aW9uOiBMaW5lSXRlbSB8IHVuZGVmaW5lZCxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+XG4pOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG5cdHJldHVybiBBY3Rpb25IZWxwZXIuZ2V0T3BlcmF0aW9uQXZhaWxhYmxlTWFwKGxpbmVJdGVtQW5ub3RhdGlvbiwgXCJ0YWJsZVwiLCBjb252ZXJ0ZXJDb250ZXh0KTtcbn1cbi8qKlxuICogR2V0cyB1cGRhdGFibGUgcHJvcGVydHlQYXRoIGZvciB0aGUgY3VycmVudCBlbnRpdHlzZXQgaWYgdmFsaWQuXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgaW5zdGFuY2Ugb2YgdGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcmV0dXJucyBUaGUgdXBkYXRhYmxlIHByb3BlcnR5IGZvciB0aGUgcm93c1xuICovXG5mdW5jdGlvbiBnZXRDdXJyZW50RW50aXR5U2V0VXBkYXRhYmxlUGF0aChjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4pOiBzdHJpbmcge1xuXHRjb25zdCByZXN0cmljdGlvbnMgPSBnZXRSZXN0cmljdGlvbnMoY29udmVydGVyQ29udGV4dCk7XG5cdGNvbnN0IGVudGl0eVNldCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0KCk7XG5cdGNvbnN0IHVwZGF0YWJsZSA9IHJlc3RyaWN0aW9ucy5pc1VwZGF0YWJsZTtcblx0Y29uc3QgaXNPbmx5RHluYW1pY09uQ3VycmVudEVudGl0eSA9ICFpc0NvbnN0YW50KHVwZGF0YWJsZS5leHByZXNzaW9uKSAmJiB1cGRhdGFibGUubmF2aWdhdGlvbkV4cHJlc3Npb24uX3R5cGUgPT09IFwiVW5yZXNvbHZhYmxlXCI7XG5cdGNvbnN0IHVwZGF0YWJsZUV4cHJlc3Npb24gPSBlbnRpdHlTZXQ/LmFubm90YXRpb25zLkNhcGFiaWxpdGllcz8uVXBkYXRlUmVzdHJpY3Rpb25zPy5VcGRhdGFibGU7XG5cdGNvbnN0IHVwZGF0YWJsZVByb3BlcnR5UGF0aCA9IGlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uKHVwZGF0YWJsZUV4cHJlc3Npb24pICYmIHVwZGF0YWJsZUV4cHJlc3Npb24ucGF0aDtcblx0cmV0dXJuIGlzT25seUR5bmFtaWNPbkN1cnJlbnRFbnRpdHkgPyAodXBkYXRhYmxlUHJvcGVydHlQYXRoIGFzIHN0cmluZykgOiBcIlwiO1xufVxuLyoqXG4gKiBNZXRob2QgdG8gcmV0cmlldmUgYWxsIHByb3BlcnR5IHBhdGhzIGFzc2lnbmVkIHRvIHRoZSBDb3JlLk9wZXJhdGlvbkF2YWlsYWJsZSBhbm5vdGF0aW9uLlxuICogQHBhcmFtIG9wZXJhdGlvbkF2YWlsYWJsZU1hcCBUaGUgcmVjb3JkIGNvbnNpc3Rpbmcgb2YgYWN0aW9ucyBhbmQgdGhlaXIgQ29yZS5PcGVyYXRpb25BdmFpbGFibGUgcHJvcGVydHkgcGF0aHNcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBpbnN0YW5jZSBvZiB0aGUgY29udmVydGVyIGNvbnRleHRcbiAqIEByZXR1cm5zIFRoZSBDU1Ygc3RyaW5nIG9mIGFsbCBwcm9wZXJ0eSBwYXRocyBhc3NvY2lhdGVkIHdpdGggdGhlIENvcmUuT3BlcmF0aW9uQXZhaWxhYmxlIGFubm90YXRpb25cbiAqL1xuZnVuY3Rpb24gZ2V0T3BlcmF0aW9uQXZhaWxhYmxlUHJvcGVydGllcyhcblx0b3BlcmF0aW9uQXZhaWxhYmxlTWFwOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+XG4pOiBzdHJpbmcge1xuXHRjb25zdCBwcm9wZXJ0aWVzID0gbmV3IFNldCgpO1xuXHRmb3IgKGNvbnN0IGFjdGlvbk5hbWUgaW4gb3BlcmF0aW9uQXZhaWxhYmxlTWFwKSB7XG5cdFx0Y29uc3QgcHJvcGVydHlOYW1lID0gb3BlcmF0aW9uQXZhaWxhYmxlTWFwW2FjdGlvbk5hbWVdO1xuXHRcdGlmIChwcm9wZXJ0eU5hbWUgPT09IG51bGwpIHtcblx0XHRcdC8vIEFubm90YXRpb24gY29uZmlndXJlZCB3aXRoIGV4cGxpY2l0ICdudWxsJyAoYWN0aW9uIGFkdmVydGlzZW1lbnQgcmVsZXZhbnQpXG5cdFx0XHRwcm9wZXJ0aWVzLmFkZChhY3Rpb25OYW1lKTtcblx0XHR9IGVsc2UgaWYgKHR5cGVvZiBwcm9wZXJ0eU5hbWUgPT09IFwic3RyaW5nXCIpIHtcblx0XHRcdC8vIEFkZCBwcm9wZXJ0eSBwYXRocyBhbmQgbm90IENvbnN0YW50IHZhbHVlcy5cblx0XHRcdHByb3BlcnRpZXMuYWRkKHByb3BlcnR5TmFtZSk7XG5cdFx0fVxuXHR9XG5cdGlmIChwcm9wZXJ0aWVzLnNpemUpIHtcblx0XHQvLyBTb21lIGFjdGlvbnMgaGF2ZSBhbiBvcGVyYXRpb24gYXZhaWxhYmxlIGJhc2VkIG9uIHByb3BlcnR5IC0tPiB3ZSBuZWVkIHRvIGxvYWQgdGhlIEhlYWRlckluZm8uVGl0bGUgcHJvcGVydHlcblx0XHQvLyBzbyB0aGF0IHRoZSBkaWFsb2cgb24gcGFydGlhbCBhY3Rpb25zIGlzIGRpc3BsYXllZCBwcm9wZXJseSAoQkNQIDIxODAyNzE0MjUpXG5cdFx0Y29uc3QgZW50aXR5VHlwZSA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpO1xuXHRcdGNvbnN0IHRpdGxlUHJvcGVydHkgPSAoZW50aXR5VHlwZS5hbm5vdGF0aW9ucz8uVUk/LkhlYWRlckluZm8/LlRpdGxlIGFzIERhdGFGaWVsZFR5cGVzKT8uVmFsdWU/LnBhdGg7XG5cdFx0aWYgKHRpdGxlUHJvcGVydHkpIHtcblx0XHRcdHByb3BlcnRpZXMuYWRkKHRpdGxlUHJvcGVydHkpO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gQXJyYXkuZnJvbShwcm9wZXJ0aWVzKS5qb2luKFwiLFwiKTtcbn1cbi8qKlxuICogSXRlcmF0ZXMgb3ZlciB0aGUgRGF0YUZpZWxkRm9yQWN0aW9uIGFuZCBEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24gb2YgYSBsaW5lIGl0ZW0gYW5kXG4gKiByZXR1cm5zIGFsbCB0aGUgVUkuSGlkZGVuIGFubm90YXRpb24gZXhwcmVzc2lvbnMuXG4gKiBAcGFyYW0gbGluZUl0ZW1Bbm5vdGF0aW9uIENvbGxlY3Rpb24gb2YgZGF0YSBmaWVsZHMgdXNlZCBmb3IgcmVwcmVzZW50YXRpb24gaW4gYSB0YWJsZSBvciBsaXN0XG4gKiBAcGFyYW0gY3VycmVudEVudGl0eVR5cGUgQ3VycmVudCBlbnRpdHkgdHlwZVxuICogQHBhcmFtIGNvbnRleHREYXRhTW9kZWxPYmplY3RQYXRoIE9iamVjdCBwYXRoIG9mIHRoZSBkYXRhIG1vZGVsXG4gKiBAcmV0dXJucyBBbGwgdGhlIGBVSS5IaWRkZW5gIHBhdGggZXhwcmVzc2lvbnMgZm91bmQgaW4gdGhlIHJlbGV2YW50IGFjdGlvbnNcbiAqL1xuZnVuY3Rpb24gZ2V0VUlIaWRkZW5FeHBGb3JBY3Rpb25zUmVxdWlyaW5nQ29udGV4dChcblx0bGluZUl0ZW1Bbm5vdGF0aW9uOiBMaW5lSXRlbSxcblx0Y3VycmVudEVudGl0eVR5cGU6IEVudGl0eVR5cGUsXG5cdGNvbnRleHREYXRhTW9kZWxPYmplY3RQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPFBhZ2VDb250ZXh0UGF0aFRhcmdldD5cbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPltdIHtcblx0Y29uc3QgYVVpSGlkZGVuUGF0aEV4cHJlc3Npb25zOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj5bXSA9IFtdO1xuXHRsaW5lSXRlbUFubm90YXRpb24uZm9yRWFjaCgoZGF0YUZpZWxkKSA9PiB7XG5cdFx0Ly8gQ2hlY2sgaWYgdGhlIGxpbmVJdGVtIGNvbnRleHQgaXMgdGhlIHNhbWUgYXMgdGhhdCBvZiB0aGUgYWN0aW9uOlxuXHRcdGlmIChcblx0XHRcdChkYXRhRmllbGQuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFjdGlvbiAmJlxuXHRcdFx0XHRkYXRhRmllbGQ/LkFjdGlvblRhcmdldD8uaXNCb3VuZCAmJlxuXHRcdFx0XHRjdXJyZW50RW50aXR5VHlwZSA9PT0gZGF0YUZpZWxkPy5BY3Rpb25UYXJnZXQuc291cmNlRW50aXR5VHlwZSkgfHxcblx0XHRcdChkYXRhRmllbGQuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbiAmJlxuXHRcdFx0XHRkYXRhRmllbGQuUmVxdWlyZXNDb250ZXh0ICYmXG5cdFx0XHRcdGRhdGFGaWVsZD8uSW5saW5lPy52YWx1ZU9mKCkgIT09IHRydWUpXG5cdFx0KSB7XG5cdFx0XHRpZiAodHlwZW9mIGRhdGFGaWVsZC5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbj8udmFsdWVPZigpID09PSBcIm9iamVjdFwiKSB7XG5cdFx0XHRcdGFVaUhpZGRlblBhdGhFeHByZXNzaW9ucy5wdXNoKGVxdWFsKGdldEhpZGRlbkV4cHJlc3Npb25BdFRhYmxlTGV2ZWwoZGF0YUZpZWxkLCBjb250ZXh0RGF0YU1vZGVsT2JqZWN0UGF0aCksIGZhbHNlKSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9KTtcblx0cmV0dXJuIGFVaUhpZGRlblBhdGhFeHByZXNzaW9ucztcbn1cbi8qKlxuICogVGhpcyBtZXRob2QgaXMgdXNlZCB0byBnZXQgdGhlIGJpbmRpbmcgZXhwcmVzc2lvbiBvZiB0aGUgcGF0aCBvZiBhIERhdGFGaWVsZC5cbiAqIEBwYXJhbSBleHByZXNzaW9uIENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uXG4gKiBAcmV0dXJucyBUaGUgYmluZGluZyBleHByZXNzaW9uXG4gKi9cbmZ1bmN0aW9uIGdldFBhdGhGcm9tQWN0aW9uQW5ub3RhdGlvbihleHByZXNzaW9uOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbik6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIHtcblx0bGV0IHBhdGg6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uO1xuXHRpZiAoaXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24oZXhwcmVzc2lvbikpIHtcblx0XHRwYXRoID0gZXhwcmVzc2lvbi5wYXRoO1xuXHR9IGVsc2Uge1xuXHRcdHBhdGggPSBleHByZXNzaW9uO1xuXHR9XG5cdHJldHVybiBwYXRoO1xufVxuLyoqXG4gKiBUaGlzIG1ldGhvZCBpcyB1c2VkIHRvIGNoYW5nZSB0aGUgY29udGV4dCBjdXJyZW50bHkgcmVmZXJlbmNlZCBieSB0aGlzIGJpbmRpbmcgYnkgcmVtb3ZpbmcgdGhlIGxhc3QgbmF2aWdhdGlvbiBwcm9wZXJ0eS5cbiAqXG4gKiBJdCBpcyB1c2VkIChzcGVjaWZpY2FsbHkgaW4gdGhpcyBjYXNlKSwgdG8gdHJhbnNmb3JtIGEgYmluZGluZyBtYWRlIGZvciBhIE5hdlByb3AgY29udGV4dCAvTWFpbk9iamVjdC9OYXZQcm9wMS9OYXZQcm9wMixcbiAqIGludG8gYSBiaW5kaW5nIG9uIHRoZSBwcmV2aW91cyBjb250ZXh0IC9NYWluT2JqZWN0L05hdlByb3AxLlxuICogQHBhcmFtIHNvdXJjZSBEYXRhRmllbGRGb3JBY3Rpb24gfCBEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24gfCBDdXN0b21BY3Rpb25cbiAqIEBwYXJhbSBjb250ZXh0RGF0YU1vZGVsT2JqZWN0UGF0aCBEYXRhTW9kZWxPYmplY3RQYXRoXG4gKiBAcmV0dXJucyBUaGUgYmluZGluZyBleHByZXNzaW9uXG4gKi9cbmZ1bmN0aW9uIGdldEhpZGRlbkV4cHJlc3Npb25BdFRhYmxlTGV2ZWwoXG5cdHNvdXJjZTogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcyxcblx0Y29udGV4dERhdGFNb2RlbE9iamVjdFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8UGFnZUNvbnRleHRQYXRoVGFyZ2V0PlxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHVua25vd24+IHtcblx0Y29uc3QgZXhwcmVzc2lvbiA9IHNvdXJjZS5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbiBhcyBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjtcblx0bGV0IHBhdGggPSBnZXRQYXRoRnJvbUFjdGlvbkFubm90YXRpb24oZXhwcmVzc2lvbik7XG5cdGlmICh0eXBlb2YgcGF0aCA9PT0gXCJvYmplY3RcIikge1xuXHRcdHJldHVybiBjb25zdGFudChmYWxzZSk7XG5cdH0gZWxzZSBpZiAodHlwZW9mIHBhdGggPT09IFwic3RyaW5nXCIpIHtcblx0XHRpZiAoXCJ2aXNpYmxlXCIgaW4gc291cmNlKSB7XG5cdFx0XHRwYXRoID0gcGF0aC5zdWJzdHJpbmcoMSwgcGF0aC5sZW5ndGggLSAxKTtcblx0XHR9XG5cdFx0aWYgKHBhdGguaW5kZXhPZihcIi9cIikgPiAwKSB7XG5cdFx0XHQvL2NoZWNrIGlmIHRoZSBuYXZpZ2F0aW9uIHByb3BlcnR5IGlzIGNvcnJlY3Q6XG5cdFx0XHRjb25zdCBzcGxpdFBhdGhGb3JOYXZpZ2F0aW9uUHJvcGVydHkgPSBwYXRoLnNwbGl0KFwiL1wiKTtcblx0XHRcdGNvbnN0IG5hdmlnYXRpb25QYXRoID0gc3BsaXRQYXRoRm9yTmF2aWdhdGlvblByb3BlcnR5WzBdO1xuXHRcdFx0aWYgKFxuXHRcdFx0XHRpc05hdmlnYXRpb25Qcm9wZXJ0eShjb250ZXh0RGF0YU1vZGVsT2JqZWN0UGF0aD8udGFyZ2V0T2JqZWN0KSAmJlxuXHRcdFx0XHRjb250ZXh0RGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRPYmplY3QucGFydG5lciA9PT0gbmF2aWdhdGlvblBhdGhcblx0XHRcdCkge1xuXHRcdFx0XHRyZXR1cm4gcGF0aEluTW9kZWwoc3BsaXRQYXRoRm9yTmF2aWdhdGlvblByb3BlcnR5LnNsaWNlKDEpLmpvaW4oXCIvXCIpKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJldHVybiBjb25zdGFudCh0cnVlKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIGNvbnN0YW50KGZhbHNlKTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGNvbnN0YW50KHRydWUpO1xufVxuLyoqXG4gKiBMb29wIHRocm91Z2ggdGhlIG1hbmlmZXN0IGFjdGlvbnMgYW5kIGNoZWNrIHRoZSBmb2xsb3dpbmc6XG4gKlxuICogSWYgdGhlIGRhdGEgZmllbGQgaXMgYWxzbyByZWZlcmVuY2VkIGFzIGEgY3VzdG9tIGFjdGlvbi5cbiAqIElmIHRoZSB1bmRlcmx5aW5nIG1hbmlmZXN0IGFjdGlvbiBpcyBlaXRoZXIgYSBib3VuZCBhY3Rpb24gb3IgaGFzIHRoZSAnUmVxdWlyZXNDb250ZXh0JyBwcm9wZXJ0eSBzZXQgdG8gdHJ1ZS5cbiAqXG4gKiBJZiBzbywgdGhlICdyZXF1aXJlc1NlbGVjdGlvbicgcHJvcGVydHkgaXMgZm9yY2VkIHRvICd0cnVlJyBpbiB0aGUgbWFuaWZlc3QuXG4gKiBAcGFyYW0gZGF0YUZpZWxkSWQgSWQgb2YgdGhlIERhdGFGaWVsZCBldmFsdWF0ZWRcbiAqIEBwYXJhbSBkYXRhRmllbGQgRGF0YUZpZWxkIGV2YWx1YXRlZFxuICogQHBhcmFtIG1hbmlmZXN0QWN0aW9ucyBUaGUgYWN0aW9ucyBkZWZpbmVkIGluIHRoZSBtYW5pZmVzdFxuICogQHJldHVybnMgYHRydWVgIGlmIHRoZSBEYXRhRmllbGQgaXMgZm91bmQgYW1vbmcgdGhlIG1hbmlmZXN0IGFjdGlvbnNcbiAqL1xuZnVuY3Rpb24gdXBkYXRlTWFuaWZlc3RBY3Rpb25BbmRUYWdJdChcblx0ZGF0YUZpZWxkSWQ6IHN0cmluZyxcblx0ZGF0YUZpZWxkOiBEYXRhRmllbGRGb3JBY3Rpb24gfCBEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24sXG5cdG1hbmlmZXN0QWN0aW9uczogUmVjb3JkPHN0cmluZywgQ3VzdG9tQWN0aW9uPlxuKTogYm9vbGVhbiB7XG5cdHJldHVybiBPYmplY3Qua2V5cyhtYW5pZmVzdEFjdGlvbnMpLnNvbWUoKGFjdGlvbktleSkgPT4ge1xuXHRcdGlmIChhY3Rpb25LZXkgPT09IGRhdGFGaWVsZElkKSB7XG5cdFx0XHRpZiAoXG5cdFx0XHRcdChkYXRhRmllbGQgYXMgRGF0YUZpZWxkRm9yQWN0aW9uKT8uQWN0aW9uVGFyZ2V0Py5pc0JvdW5kIHx8XG5cdFx0XHRcdChkYXRhRmllbGQgYXMgRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uKT8uUmVxdWlyZXNDb250ZXh0XG5cdFx0XHQpIHtcblx0XHRcdFx0bWFuaWZlc3RBY3Rpb25zW2RhdGFGaWVsZElkXS5yZXF1aXJlc1NlbGVjdGlvbiA9IHRydWU7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9KTtcbn1cbi8qKlxuICogTG9vcCB0aHJvdWdoIHRoZSBEYXRhRmllbGRGb3JBY3Rpb24gYW5kIERhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbiBvZiBhIGxpbmUgaXRlbSBhbmRcbiAqIGNoZWNrIHRoZSBmb2xsb3dpbmc6XG4gKiBJZiBhdCBsZWFzdCBvbmUgb2YgdGhlbSBpcyBhbHdheXMgdmlzaWJsZSBpbiB0aGUgdGFibGUgdG9vbGJhciBhbmQgcmVxdWlyZXMgYSBjb250ZXh0XG4gKiBJZiBhbiBhY3Rpb24gaXMgYWxzbyBkZWZpbmVkIGluIHRoZSBtYW5pZmVzdCwgaXQgaXMgc2V0IGFzaWRlIGFuZCB3aWxsIGJlIGNvbnNpZGVyZWRcbiAqIHdoZW4gZ29pbmcgdGhyb3VnaCB0aGUgbWFuaWZlc3QuXG4gKiBAcGFyYW0gbGluZUl0ZW1Bbm5vdGF0aW9uIENvbGxlY3Rpb24gb2YgZGF0YSBmaWVsZHMgZm9yIHJlcHJlc2VudGF0aW9uIGluIGEgdGFibGUgb3IgbGlzdFxuICogQHBhcmFtIG1hbmlmZXN0QWN0aW9ucyBUaGUgYWN0aW9ucyBkZWZpbmVkIGluIHRoZSBtYW5pZmVzdFxuICogQHBhcmFtIGN1cnJlbnRFbnRpdHlUeXBlIEN1cnJlbnQgRW50aXR5IFR5cGVcbiAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGVyZSBpcyBhdCBsZWFzdCAxIGFjdGlvbiB0aGF0IG1lZXRzIHRoZSBjcml0ZXJpYVxuICovXG5mdW5jdGlvbiBoYXNCb3VuZEFjdGlvbnNBbHdheXNWaXNpYmxlSW5Ub29sQmFyKFxuXHRsaW5lSXRlbUFubm90YXRpb246IExpbmVJdGVtIHwgRGF0YUZpZWxkRm9yQWN0aW9uQWJzdHJhY3RUeXBlc1tdLFxuXHRtYW5pZmVzdEFjdGlvbnM6IFJlY29yZDxzdHJpbmcsIEN1c3RvbUFjdGlvbj4sXG5cdGN1cnJlbnRFbnRpdHlUeXBlOiBFbnRpdHlUeXBlXG4pOiBib29sZWFuIHtcblx0cmV0dXJuIGxpbmVJdGVtQW5ub3RhdGlvbi5zb21lKChkYXRhRmllbGQpID0+IHtcblx0XHRpZiAoXG5cdFx0XHQoZGF0YUZpZWxkLiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBY3Rpb24gfHxcblx0XHRcdFx0ZGF0YUZpZWxkLiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24pICYmXG5cdFx0XHRkYXRhRmllbGQ/LklubGluZT8udmFsdWVPZigpICE9PSB0cnVlICYmXG5cdFx0XHQoZGF0YUZpZWxkLmFubm90YXRpb25zPy5VST8uSGlkZGVuPy52YWx1ZU9mKCkgPT09IGZhbHNlIHx8IGRhdGFGaWVsZC5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbj8udmFsdWVPZigpID09PSB1bmRlZmluZWQpXG5cdFx0KSB7XG5cdFx0XHRpZiAoZGF0YUZpZWxkLiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBY3Rpb24pIHtcblx0XHRcdFx0Y29uc3QgbWFuaWZlc3RBY3Rpb25JZCA9IGdlbmVyYXRlKFtcIkRhdGFGaWVsZEZvckFjdGlvblwiLCBkYXRhRmllbGQuQWN0aW9uIGFzIHN0cmluZ10pO1xuXHRcdFx0XHQvLyBpZiB0aGUgRGF0YUZpZWxkRm9yQWN0b24gZnJvbSBhbm5vdGF0aW9uIGFsc28gZXhpc3RzIGluIHRoZSBtYW5pZmVzdCwgaXRzIHZpc2liaWxpdHkgd2lsbCBiZSBldmFsdWF0ZWQgbGF0ZXIgb25cblx0XHRcdFx0aWYgKHVwZGF0ZU1hbmlmZXN0QWN0aW9uQW5kVGFnSXQobWFuaWZlc3RBY3Rpb25JZCwgZGF0YUZpZWxkLCBtYW5pZmVzdEFjdGlvbnMpKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdC8vIENoZWNrIGlmIHRoZSBsaW5lSXRlbSBjb250ZXh0IGlzIHRoZSBzYW1lIGFzIHRoYXQgb2YgdGhlIGFjdGlvbjpcblx0XHRcdFx0cmV0dXJuIGRhdGFGaWVsZD8uQWN0aW9uVGFyZ2V0Py5pc0JvdW5kICYmIGN1cnJlbnRFbnRpdHlUeXBlID09PSBkYXRhRmllbGQ/LkFjdGlvblRhcmdldC5zb3VyY2VFbnRpdHlUeXBlO1xuXHRcdFx0fSBlbHNlIGlmIChkYXRhRmllbGQuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbikge1xuXHRcdFx0XHQvLyBpZiB0aGUgRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uIGZyb20gYW5ub3RhdGlvbiBhbHNvIGV4aXN0cyBpbiB0aGUgbWFuaWZlc3QsIGl0cyB2aXNpYmlsaXR5IHdpbGwgYmUgZXZhbHVhdGVkIGxhdGVyIG9uXG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHR1cGRhdGVNYW5pZmVzdEFjdGlvbkFuZFRhZ0l0KFxuXHRcdFx0XHRcdFx0YERhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbjo6JHtkYXRhRmllbGQuU2VtYW50aWNPYmplY3R9Ojoke2RhdGFGaWVsZC5BY3Rpb259YCxcblx0XHRcdFx0XHRcdGRhdGFGaWVsZCxcblx0XHRcdFx0XHRcdG1hbmlmZXN0QWN0aW9uc1xuXHRcdFx0XHRcdClcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBkYXRhRmllbGQuUmVxdWlyZXNDb250ZXh0O1xuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAoXG5cdFx0XHRkYXRhRmllbGQuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFjdGlvbkdyb3VwICYmXG5cdFx0XHQoZGF0YUZpZWxkLmFubm90YXRpb25zPy5VST8uSGlkZGVuPy52YWx1ZU9mKCkgPT09IGZhbHNlIHx8IGRhdGFGaWVsZC5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbj8udmFsdWVPZigpID09PSB1bmRlZmluZWQpXG5cdFx0KSB7XG5cdFx0XHRyZXR1cm4gaGFzQm91bmRBY3Rpb25zQWx3YXlzVmlzaWJsZUluVG9vbEJhcihkYXRhRmllbGQuQWN0aW9ucywgbWFuaWZlc3RBY3Rpb25zLCBjdXJyZW50RW50aXR5VHlwZSk7XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fSk7XG59XG4vKipcbiAqIENoZWNrcyBpZiBhIGN1c3RvbSBhY3Rpb24gdGhhdCByZXF1aXJlcyBhIGNvbnRleHQgaXMgYWx3YXlzIHZpc2libGUgaW4gdGhlIHRvb2xiYXIuXG4gKiBAcGFyYW0gbWFuaWZlc3RBY3Rpb25zIFRoZSBhY3Rpb25zIGRlZmluZWQgaW4gdGhlIG1hbmlmZXN0XG4gKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhlcmUgaXMgYXQgbGVhc3QgMSBhY3Rpb24gdGhhdCBtZWV0cyB0aGUgY3JpdGVyaWFcbiAqL1xuZnVuY3Rpb24gaGFzQ3VzdG9tQWN0aW9uc0Fsd2F5c1Zpc2libGVJblRvb2xCYXIobWFuaWZlc3RBY3Rpb25zOiBSZWNvcmQ8c3RyaW5nLCBDdXN0b21BY3Rpb24+KTogYm9vbGVhbiB7XG5cdGNvbnN0IGN1c3RvbUFjdGlvbnMgPSBPYmplY3Qua2V5cyhtYW5pZmVzdEFjdGlvbnMpLnJlZHVjZSgoYWN0aW9uczogQ3VzdG9tQWN0aW9uW10sIGFjdGlvbktleSkgPT4ge1xuXHRcdGNvbnN0IGFjdGlvbiA9IG1hbmlmZXN0QWN0aW9uc1thY3Rpb25LZXldO1xuXHRcdGlmICghYWN0aW9uLm1lbnUpIHtcblx0XHRcdC8vc2ltcGxlIGN1c3RvbSBhY3Rpb25cblx0XHRcdGFjdGlvbnMucHVzaChhY3Rpb24pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBncm91cGVkIGFjdGlvbnNcblx0XHRcdGFjdGlvbnMgPSBbLi4uYWN0aW9ucywgLi4uKGFjdGlvbi5tZW51LmZpbHRlcigobWVudUFjdGlvbikgPT4gdHlwZW9mIG1lbnVBY3Rpb24gIT09IFwic3RyaW5nXCIpIGFzIEN1c3RvbUFjdGlvbltdKV07XG5cdFx0fVxuXHRcdHJldHVybiBhY3Rpb25zO1xuXHR9LCBbXSk7XG5cdHJldHVybiAhIWN1c3RvbUFjdGlvbnMuZmluZChcblx0XHQoYWN0aW9uKSA9PiBhY3Rpb24ucmVxdWlyZXNTZWxlY3Rpb24gJiYgKGFjdGlvbi52aXNpYmxlID09PSB1bmRlZmluZWQgfHwgYWN0aW9uLnZpc2libGU/LnRvU3RyaW5nKCkgPT09IFwidHJ1ZVwiKVxuXHQpO1xufVxuLyoqXG4gKiBJdGVyYXRlcyBvdmVyIHRoZSBjdXN0b20gYWN0aW9ucyAod2l0aCBrZXkgcmVxdWlyZXNTZWxlY3Rpb24pIGRlY2xhcmVkIGluIHRoZSBtYW5pZmVzdCBmb3IgdGhlIGN1cnJlbnQgbGluZSBpdGVtIGFuZCByZXR1cm5zIGFsbCB0aGVcbiAqIHZpc2libGUga2V5IHZhbHVlcyBhcyBhbiBleHByZXNzaW9uLlxuICogQHBhcmFtIG1hbmlmZXN0QWN0aW9ucyBUaGUgYWN0aW9ucyBkZWZpbmVkIGluIHRoZSBtYW5pZmVzdFxuICogQHJldHVybnMgQXJyYXk8RXhwcmVzc2lvbjxib29sZWFuPj4gQWxsIHRoZSB2aXNpYmxlIHBhdGggZXhwcmVzc2lvbnMgb2YgdGhlIGFjdGlvbnMgdGhhdCBtZWV0IHRoZSBjcml0ZXJpYVxuICovXG5mdW5jdGlvbiBnZXRWaXNpYmxlRXhwRm9yQ3VzdG9tQWN0aW9uc1JlcXVpcmluZ0NvbnRleHQobWFuaWZlc3RBY3Rpb25zOiBSZWNvcmQ8c3RyaW5nLCBDdXN0b21BY3Rpb24+KTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+W10ge1xuXHRjb25zdCBhVmlzaWJsZVBhdGhFeHByZXNzaW9uczogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+W10gPSBbXTtcblx0aWYgKG1hbmlmZXN0QWN0aW9ucykge1xuXHRcdE9iamVjdC5rZXlzKG1hbmlmZXN0QWN0aW9ucykuZm9yRWFjaCgoYWN0aW9uS2V5KSA9PiB7XG5cdFx0XHRjb25zdCBhY3Rpb24gPSBtYW5pZmVzdEFjdGlvbnNbYWN0aW9uS2V5XTtcblx0XHRcdGlmIChhY3Rpb24ucmVxdWlyZXNTZWxlY3Rpb24gPT09IHRydWUgJiYgYWN0aW9uLnZpc2libGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRpZiAodHlwZW9mIGFjdGlvbi52aXNpYmxlID09PSBcInN0cmluZ1wiKSB7XG5cdFx0XHRcdFx0LypUaGUgZmluYWwgYWltIHdvdWxkIGJlIHRvIGNoZWNrIGlmIHRoZSBwYXRoIGV4cHJlc3Npb24gZGVwZW5kcyBvbiB0aGUgcGFyZW50IGNvbnRleHRcblx0XHRcdFx0XHRhbmQgY29uc2lkZXJzIG9ubHkgdGhvc2UgZXhwcmVzc2lvbnMgZm9yIHRoZSBleHByZXNzaW9uIGV2YWx1YXRpb24sXG5cdFx0XHRcdFx0YnV0IGN1cnJlbnRseSBub3QgcG9zc2libGUgZnJvbSB0aGUgbWFuaWZlc3QgYXMgdGhlIHZpc2libGUga2V5IGlzIGJvdW5kIG9uIHRoZSBwYXJlbnQgZW50aXR5LlxuXHRcdFx0XHRcdFRyaWNreSB0byBkaWZmZXJlbnRpYXRlIHRoZSBwYXRoIGFzIGl0J3MgZG9uZSBmb3IgdGhlIEhpZGRlbiBhbm5vdGF0aW9uLlxuXHRcdFx0XHRcdEZvciB0aGUgdGltZSBiZWluZyB3ZSBjb25zaWRlciBhbGwgdGhlIHBhdGhzIG9mIHRoZSBtYW5pZmVzdCovXG5cdFx0XHRcdFx0YVZpc2libGVQYXRoRXhwcmVzc2lvbnMucHVzaChyZXNvbHZlQmluZGluZ1N0cmluZyhhY3Rpb24/LnZpc2libGU/LnZhbHVlT2YoKSwgXCJib29sZWFuXCIpKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cdHJldHVybiBhVmlzaWJsZVBhdGhFeHByZXNzaW9ucztcbn1cbi8qKlxuICogRXZhbHVhdGUgaWYgdGhlIHBhdGggaXMgc3RhdGljYWxseSBkZWxldGFibGUgb3IgdXBkYXRhYmxlLlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEByZXR1cm5zIFRoZSB0YWJsZSBjYXBhYmlsaXRpZXNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldENhcGFiaWxpdHlSZXN0cmljdGlvbihjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4pOiBUYWJsZUNhcGFiaWxpdHlSZXN0cmljdGlvbiB7XG5cdGNvbnN0IGlzRGVsZXRhYmxlID0gaXNQYXRoRGVsZXRhYmxlKGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpKTtcblx0Y29uc3QgaXNVcGRhdGFibGUgPSBpc1BhdGhVcGRhdGFibGUoY29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCkpO1xuXHRyZXR1cm4ge1xuXHRcdGlzRGVsZXRhYmxlOiAhKGlzQ29uc3RhbnQoaXNEZWxldGFibGUpICYmIGlzRGVsZXRhYmxlLnZhbHVlID09PSBmYWxzZSksXG5cdFx0aXNVcGRhdGFibGU6ICEoaXNDb25zdGFudChpc1VwZGF0YWJsZSkgJiYgaXNVcGRhdGFibGUudmFsdWUgPT09IGZhbHNlKVxuXHR9O1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldFNlbGVjdGlvbk1vZGUoXG5cdGxpbmVJdGVtQW5ub3RhdGlvbjogTGluZUl0ZW0gfCB1bmRlZmluZWQsXG5cdHZpc3VhbGl6YXRpb25QYXRoOiBzdHJpbmcsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0aXNFbnRpdHlTZXQ6IGJvb2xlYW4sXG5cdHRhcmdldENhcGFiaWxpdGllczogVGFibGVDYXBhYmlsaXR5UmVzdHJpY3Rpb24sXG5cdGRlbGV0ZUJ1dHRvblZpc2liaWxpdHlFeHByZXNzaW9uPzogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+LFxuXHRtYXNzRWRpdFZpc2liaWxpdHlFeHByZXNzaW9uOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4gPSBjb25zdGFudChmYWxzZSksXG5cdGN1dEJ1dHRvblZpc2liaWxpdHlFeHByZXNzaW9uOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4gPSBjb25zdGFudChmYWxzZSlcbik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdGNvbnN0IHRhYmxlTWFuaWZlc3RTZXR0aW5ncyA9IGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RDb250cm9sQ29uZmlndXJhdGlvbjxUYWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbj4odmlzdWFsaXphdGlvblBhdGgpO1xuXHRjb25zdCB0YWJsZVR5cGUgPSB0YWJsZU1hbmlmZXN0U2V0dGluZ3MudGFibGVTZXR0aW5ncz8udHlwZTtcblx0bGV0IHNlbGVjdGlvbk1vZGUgPSB0YWJsZU1hbmlmZXN0U2V0dGluZ3MudGFibGVTZXR0aW5ncz8uc2VsZWN0aW9uTW9kZTtcblxuXHQvLyBUaGUgY29sbGFwc2UvRXhwYW5kIGFjdGlvbiBvZiBhIHRyZWUgdGFibGUgaXMgYSBib3VuZCBhY3Rpb24sIGFzIGEgcmVzdWx0LCBhIHRyZWUgdGFibGUgc2hvdWxkIGFsd2F5cyBoYXZlIGEgc2VsZWN0aW9uIG1vZGUgdG8gXCJNdWx0aVwiIHdoZW4gbm8gc2VsZWN0aW9uTW9kZSBoYXMgYmVlbiBzZXQgaW4gdGhlIG1hbmlmZXN0XG5cdGlmICh0YWJsZVR5cGUgPT09IFwiVHJlZVRhYmxlXCIgJiYgIXNlbGVjdGlvbk1vZGUpIHtcblx0XHRyZXR1cm4gU2VsZWN0aW9uTW9kZS5NdWx0aTtcblx0fVxuXG5cdC8vIElmIHRoZSBzZWxlY3Rpb24gbW9kZSBpcyBmb3JjZWQgdG8gJ05vbmUnIGluIHRoZSBtYW5pZmVzdC9tYWNybyB0YWJsZSBwYXJhbWV0ZXJzLCB3ZSBrZWVwIGl0IHVubGVzcyBoZXJlIGlzIGEgZGVsZXRlIGJ1dHRvblxuXHRpZiAoIWxpbmVJdGVtQW5ub3RhdGlvbiB8fCBzZWxlY3Rpb25Nb2RlID09PSBTZWxlY3Rpb25Nb2RlLk5vbmUpIHtcblx0XHRpZiAodGFyZ2V0Q2FwYWJpbGl0aWVzLmlzRGVsZXRhYmxlICYmIGRlbGV0ZUJ1dHRvblZpc2liaWxpdHlFeHByZXNzaW9uKSB7XG5cdFx0XHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24oaWZFbHNlKGRlbGV0ZUJ1dHRvblZpc2liaWxpdHlFeHByZXNzaW9uLCBjb25zdGFudChTZWxlY3Rpb25Nb2RlLk11bHRpKSwgY29uc3RhbnQoU2VsZWN0aW9uTW9kZS5Ob25lKSkpO1xuXHRcdH1cblx0XHRyZXR1cm4gU2VsZWN0aW9uTW9kZS5Ob25lO1xuXHR9XG5cdGlmIChzZWxlY3Rpb25Nb2RlID09PSBTZWxlY3Rpb25Nb2RlLkZvcmNlTXVsdGkpIHtcblx0XHRyZXR1cm4gU2VsZWN0aW9uTW9kZS5NdWx0aTtcblx0fSBlbHNlIGlmIChzZWxlY3Rpb25Nb2RlID09PSBTZWxlY3Rpb25Nb2RlLkZvcmNlU2luZ2xlKSB7XG5cdFx0cmV0dXJuIFNlbGVjdGlvbk1vZGUuU2luZ2xlO1xuXHR9XG5cdGxldCBhSGlkZGVuQmluZGluZ0V4cHJlc3Npb25zOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj5bXSA9IFtdLFxuXHRcdGFWaXNpYmxlQmluZGluZ0V4cHJlc3Npb25zOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj5bXSA9IFtdO1xuXHRjb25zdCBtYW5pZmVzdEFjdGlvbnMgPSBnZXRBY3Rpb25zRnJvbU1hbmlmZXN0KFxuXHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RDb250cm9sQ29uZmlndXJhdGlvbjxUYWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbj4odmlzdWFsaXphdGlvblBhdGgpLmFjdGlvbnMsXG5cdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHRbXSxcblx0XHR1bmRlZmluZWQsXG5cdFx0ZmFsc2Vcblx0KTtcblx0bGV0IGlzUGFyZW50RGVsZXRhYmxlLCBwYXJlbnRFbnRpdHlTZXREZWxldGFibGU7XG5cdGlmIChjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpID09PSBUZW1wbGF0ZVR5cGUuT2JqZWN0UGFnZSkge1xuXHRcdGlzUGFyZW50RGVsZXRhYmxlID0gaXNQYXRoRGVsZXRhYmxlKGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpKTtcblx0XHRwYXJlbnRFbnRpdHlTZXREZWxldGFibGUgPSBpc1BhcmVudERlbGV0YWJsZSA/IGNvbXBpbGVFeHByZXNzaW9uKGlzUGFyZW50RGVsZXRhYmxlLCB0cnVlKSA6IGlzUGFyZW50RGVsZXRhYmxlO1xuXHR9XG5cdGNvbnN0IGJNYXNzRWRpdEVuYWJsZWQ6IGJvb2xlYW4gPSAhaXNDb25zdGFudChtYXNzRWRpdFZpc2liaWxpdHlFeHByZXNzaW9uKSB8fCBtYXNzRWRpdFZpc2liaWxpdHlFeHByZXNzaW9uLnZhbHVlICE9PSBmYWxzZTtcblx0aWYgKCFzZWxlY3Rpb25Nb2RlIHx8IHNlbGVjdGlvbk1vZGUgPT09IFNlbGVjdGlvbk1vZGUuQXV0bykge1xuXHRcdHNlbGVjdGlvbk1vZGUgPSBTZWxlY3Rpb25Nb2RlLk11bHRpO1xuXHR9XG5cdGlmIChiTWFzc0VkaXRFbmFibGVkKSB7XG5cdFx0Ly8gT3ZlcnJpZGUgZGVmYXVsdCBzZWxlY3Rpb24gbW9kZSB3aGVuIG1hc3MgZWRpdCBpcyB2aXNpYmxlXG5cdFx0c2VsZWN0aW9uTW9kZSA9IHNlbGVjdGlvbk1vZGUgPT09IFNlbGVjdGlvbk1vZGUuU2luZ2xlID8gU2VsZWN0aW9uTW9kZS5TaW5nbGUgOiBTZWxlY3Rpb25Nb2RlLk11bHRpO1xuXHR9XG5cdGlmIChcblx0XHRoYXNCb3VuZEFjdGlvbnNBbHdheXNWaXNpYmxlSW5Ub29sQmFyKGxpbmVJdGVtQW5ub3RhdGlvbiwgbWFuaWZlc3RBY3Rpb25zLmFjdGlvbnMsIGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpKSB8fFxuXHRcdGhhc0N1c3RvbUFjdGlvbnNBbHdheXNWaXNpYmxlSW5Ub29sQmFyKG1hbmlmZXN0QWN0aW9ucy5hY3Rpb25zKVxuXHQpIHtcblx0XHRyZXR1cm4gc2VsZWN0aW9uTW9kZTtcblx0fVxuXHRhSGlkZGVuQmluZGluZ0V4cHJlc3Npb25zID0gZ2V0VUlIaWRkZW5FeHBGb3JBY3Rpb25zUmVxdWlyaW5nQ29udGV4dChcblx0XHRsaW5lSXRlbUFubm90YXRpb24sXG5cdFx0Y29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCksXG5cdFx0Y29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKClcblx0KTtcblx0YVZpc2libGVCaW5kaW5nRXhwcmVzc2lvbnMgPSBnZXRWaXNpYmxlRXhwRm9yQ3VzdG9tQWN0aW9uc1JlcXVpcmluZ0NvbnRleHQobWFuaWZlc3RBY3Rpb25zLmFjdGlvbnMpO1xuXHQvLyBObyBhY3Rpb24gcmVxdWlyaW5nIGEgY29udGV4dDpcblx0aWYgKFxuXHRcdGFIaWRkZW5CaW5kaW5nRXhwcmVzc2lvbnMubGVuZ3RoID09PSAwICYmXG5cdFx0YVZpc2libGVCaW5kaW5nRXhwcmVzc2lvbnMubGVuZ3RoID09PSAwICYmXG5cdFx0KGN1dEJ1dHRvblZpc2liaWxpdHlFeHByZXNzaW9uIHx8IGRlbGV0ZUJ1dHRvblZpc2liaWxpdHlFeHByZXNzaW9uIHx8IGJNYXNzRWRpdEVuYWJsZWQpXG5cdCkge1xuXHRcdGlmICghaXNFbnRpdHlTZXQpIHtcblx0XHRcdC8vIEV4YW1wbGU6IE9QIGNhc2Vcblx0XHRcdGlmICh0YXJnZXRDYXBhYmlsaXRpZXMuaXNEZWxldGFibGUgfHwgcGFyZW50RW50aXR5U2V0RGVsZXRhYmxlICE9PSBcImZhbHNlXCIgfHwgYk1hc3NFZGl0RW5hYmxlZCkge1xuXHRcdFx0XHQvLyBCdWlsZGluZyBleHByZXNzaW9uIGZvciBkZWxldGUgYW5kIG1hc3MgZWRpdFxuXHRcdFx0XHRjb25zdCBidXR0b25WaXNpYmlsaXR5RXhwcmVzc2lvbiA9IG9yKFxuXHRcdFx0XHRcdGN1dEJ1dHRvblZpc2liaWxpdHlFeHByZXNzaW9uIHx8IHRydWUsXG5cdFx0XHRcdFx0ZGVsZXRlQnV0dG9uVmlzaWJpbGl0eUV4cHJlc3Npb24gfHwgdHJ1ZSwgLy8gZGVmYXVsdCBkZWxldGUgdmlzaWJpbGl0eSBhcyB0cnVlXG5cdFx0XHRcdFx0bWFzc0VkaXRWaXNpYmlsaXR5RXhwcmVzc2lvblxuXHRcdFx0XHQpO1xuXHRcdFx0XHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24oXG5cdFx0XHRcdFx0aWZFbHNlKGFuZChVSS5Jc0VkaXRhYmxlLCBidXR0b25WaXNpYmlsaXR5RXhwcmVzc2lvbiksIGNvbnN0YW50KHNlbGVjdGlvbk1vZGUpLCBjb25zdGFudChTZWxlY3Rpb25Nb2RlLk5vbmUpKVxuXHRcdFx0XHQpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKFxuXHRcdFx0XHRcdGlmRWxzZShjdXRCdXR0b25WaXNpYmlsaXR5RXhwcmVzc2lvbiwgY29uc3RhbnQoU2VsZWN0aW9uTW9kZS5TaW5nbGUpLCBjb25zdGFudChTZWxlY3Rpb25Nb2RlLk5vbmUpKVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdFx0Ly8gRW50aXR5U2V0IGRlbGV0YWJsZTpcblx0XHR9IGVsc2UgaWYgKGJNYXNzRWRpdEVuYWJsZWQpIHtcblx0XHRcdC8vIGV4YW1wbGU6IExSIHNjZW5hcmlvXG5cdFx0XHRyZXR1cm4gc2VsZWN0aW9uTW9kZTtcblx0XHR9IGVsc2UgaWYgKHRhcmdldENhcGFiaWxpdGllcy5pc0RlbGV0YWJsZSAmJiBkZWxldGVCdXR0b25WaXNpYmlsaXR5RXhwcmVzc2lvbikge1xuXHRcdFx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKGlmRWxzZShkZWxldGVCdXR0b25WaXNpYmlsaXR5RXhwcmVzc2lvbiwgY29uc3RhbnQoc2VsZWN0aW9uTW9kZSksIGNvbnN0YW50KFNlbGVjdGlvbk1vZGUuTm9uZSkpKTtcblx0XHRcdC8vIEVudGl0eVNldCBub3QgZGVsZXRhYmxlOlxuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gU2VsZWN0aW9uTW9kZS5Ob25lO1xuXHRcdH1cblx0XHQvLyBUaGVyZSBhcmUgYWN0aW9ucyByZXF1aXJpbmcgYSBjb250ZXh0OlxuXHR9IGVsc2UgaWYgKCFpc0VudGl0eVNldCkge1xuXHRcdC8vIEV4YW1wbGU6IE9QIGNhc2Vcblx0XHRpZiAodGFyZ2V0Q2FwYWJpbGl0aWVzLmlzRGVsZXRhYmxlIHx8IHBhcmVudEVudGl0eVNldERlbGV0YWJsZSAhPT0gXCJmYWxzZVwiIHx8IGJNYXNzRWRpdEVuYWJsZWQpIHtcblx0XHRcdC8vIFVzZSBzZWxlY3Rpb25Nb2RlIGluIGVkaXQgbW9kZSBpZiBkZWxldGUgaXMgZW5hYmxlZCBvciBtYXNzIGVkaXQgaXMgdmlzaWJsZVxuXHRcdFx0Y29uc3QgZWRpdE1vZGVidXR0b25WaXNpYmlsaXR5RXhwcmVzc2lvbiA9IGlmRWxzZShcblx0XHRcdFx0Yk1hc3NFZGl0RW5hYmxlZCAmJiAhdGFyZ2V0Q2FwYWJpbGl0aWVzLmlzRGVsZXRhYmxlLFxuXHRcdFx0XHRtYXNzRWRpdFZpc2liaWxpdHlFeHByZXNzaW9uLFxuXHRcdFx0XHRjb25zdGFudCh0cnVlKVxuXHRcdFx0KTtcblx0XHRcdHJldHVybiBjb21waWxlRXhwcmVzc2lvbihcblx0XHRcdFx0aWZFbHNlKFxuXHRcdFx0XHRcdGFuZChVSS5Jc0VkaXRhYmxlLCBlZGl0TW9kZWJ1dHRvblZpc2liaWxpdHlFeHByZXNzaW9uKSxcblx0XHRcdFx0XHRjb25zdGFudChzZWxlY3Rpb25Nb2RlKSxcblx0XHRcdFx0XHRpZkVsc2UoXG5cdFx0XHRcdFx0XHRvciguLi5hSGlkZGVuQmluZGluZ0V4cHJlc3Npb25zLmNvbmNhdChhVmlzaWJsZUJpbmRpbmdFeHByZXNzaW9ucykpLFxuXHRcdFx0XHRcdFx0Y29uc3RhbnQoc2VsZWN0aW9uTW9kZSksXG5cdFx0XHRcdFx0XHRjb25zdGFudChTZWxlY3Rpb25Nb2RlLk5vbmUpXG5cdFx0XHRcdFx0KVxuXHRcdFx0XHQpXG5cdFx0XHQpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24oXG5cdFx0XHRcdGlmRWxzZShcblx0XHRcdFx0XHRvciguLi5hSGlkZGVuQmluZGluZ0V4cHJlc3Npb25zLmNvbmNhdChhVmlzaWJsZUJpbmRpbmdFeHByZXNzaW9ucykpLFxuXHRcdFx0XHRcdGNvbnN0YW50KHNlbGVjdGlvbk1vZGUpLFxuXHRcdFx0XHRcdGNvbnN0YW50KFNlbGVjdGlvbk1vZGUuTm9uZSlcblx0XHRcdFx0KVxuXHRcdFx0KTtcblx0XHR9XG5cdFx0Ly9FbnRpdHlTZXQgZGVsZXRhYmxlOlxuXHR9IGVsc2UgaWYgKHRhcmdldENhcGFiaWxpdGllcy5pc0RlbGV0YWJsZSB8fCBiTWFzc0VkaXRFbmFibGVkKSB7XG5cdFx0Ly8gRXhhbXBsZTogTFIgc2NlbmFyaW9cblx0XHRyZXR1cm4gc2VsZWN0aW9uTW9kZTtcblx0XHQvL0VudGl0eVNldCBub3QgZGVsZXRhYmxlOlxuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBjb21waWxlRXhwcmVzc2lvbihcblx0XHRcdGlmRWxzZShcblx0XHRcdFx0b3IoLi4uYUhpZGRlbkJpbmRpbmdFeHByZXNzaW9ucy5jb25jYXQoYVZpc2libGVCaW5kaW5nRXhwcmVzc2lvbnMpLCBtYXNzRWRpdFZpc2liaWxpdHlFeHByZXNzaW9uKSxcblx0XHRcdFx0Y29uc3RhbnQoc2VsZWN0aW9uTW9kZSksXG5cdFx0XHRcdGNvbnN0YW50KFNlbGVjdGlvbk1vZGUuTm9uZSlcblx0XHRcdClcblx0XHQpO1xuXHR9XG59XG5cbi8qKlxuICogTWV0aG9kIHRvIHJldHJpZXZlIGFsbCB0YWJsZSBhY3Rpb25zIGZyb20gYW5ub3RhdGlvbnMuXG4gKiBAcGFyYW0gbGluZUl0ZW1Bbm5vdGF0aW9uXG4gKiBAcGFyYW0gdmlzdWFsaXphdGlvblBhdGhcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcmV0dXJucyBUaGUgdGFibGUgYW5ub3RhdGlvbiBhY3Rpb25zXG4gKi9cbmZ1bmN0aW9uIGdldFRhYmxlQW5ub3RhdGlvbkFjdGlvbnMoXG5cdGxpbmVJdGVtQW5ub3RhdGlvbjogTGluZUl0ZW0sXG5cdHZpc3VhbGl6YXRpb25QYXRoOiBzdHJpbmcsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0PlxuKTogeyB0YWJsZUFjdGlvbnM6IEFycmF5PEFubm90YXRpb25BY3Rpb24gfCBBbm5vdGF0aW9uQWN0aW9uR3JvdXA+IH0ge1xuXHRjb25zdCB0YWJsZUFjdGlvbnM6IEFycmF5PEFubm90YXRpb25BY3Rpb24gfCBBbm5vdGF0aW9uQWN0aW9uR3JvdXA+ID0gW107XG5cdGNvbnN0IGNvcHlEYXRhRmllbGQgPSBnZXRDb3B5QWN0aW9uKFxuXHRcdGxpbmVJdGVtQW5ub3RhdGlvbi5maWx0ZXIoKGRhdGFGaWVsZCkgPT4ge1xuXHRcdFx0cmV0dXJuIGRhdGFGaWVsZElzQ29weUFjdGlvbihkYXRhRmllbGQgYXMgRGF0YUZpZWxkRm9yQWN0aW9uVHlwZXMpO1xuXHRcdH0pIGFzIERhdGFGaWVsZEZvckFjdGlvblR5cGVzW11cblx0KTtcblx0aWYgKGNvcHlEYXRhRmllbGQpIHtcblx0XHR0YWJsZUFjdGlvbnMucHVzaCh7XG5cdFx0XHR0eXBlOiBBY3Rpb25UeXBlLkNvcHksXG5cdFx0XHRhbm5vdGF0aW9uUGF0aDogY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXRCYXNlZEFubm90YXRpb25QYXRoKGNvcHlEYXRhRmllbGQuZnVsbHlRdWFsaWZpZWROYW1lKSxcblx0XHRcdGtleTogS2V5SGVscGVyLmdlbmVyYXRlS2V5RnJvbURhdGFGaWVsZChjb3B5RGF0YUZpZWxkKSxcblx0XHRcdHZpc2libGU6IGNvbXBpbGVFeHByZXNzaW9uKHZpc2libGVFeHByZXNzaW9uKGNvcHlEYXRhRmllbGQsIGNvbnZlcnRlckNvbnRleHQpKSxcblx0XHRcdHZpc2libGVGb3JDb250ZXh0TWVudTogY29tcGlsZUV4cHJlc3Npb24odmlzaWJsZUZvckNvbnRleHRNZW51RXhwcmVzc2lvbihjb3B5RGF0YUZpZWxkLCBjb252ZXJ0ZXJDb250ZXh0KSksXG5cdFx0XHR0ZXh0OiBjb3B5RGF0YUZpZWxkLkxhYmVsPy50b1N0cmluZygpID8/IExpYnJhcnkuZ2V0UmVzb3VyY2VCdW5kbGVGb3IoXCJzYXAuZmUuY29yZVwiKSEuZ2V0VGV4dChcIkNfQ09NTU9OX0NPUFlcIiksXG5cdFx0XHRpc05hdmlnYWJsZTogdHJ1ZVxuXHRcdH0pO1xuXHR9XG5cdGxpbmVJdGVtQW5ub3RhdGlvblxuXHRcdC5maWx0ZXIoKGRhdGFGaWVsZCkgPT4ge1xuXHRcdFx0cmV0dXJuICFkYXRhRmllbGRJc0NvcHlBY3Rpb24oZGF0YUZpZWxkIGFzIERhdGFGaWVsZEZvckFjdGlvbik7XG5cdFx0fSlcblx0XHQuZm9yRWFjaCgoZGF0YUZpZWxkOiBEYXRhRmllbGRBYnN0cmFjdFR5cGVzKSA9PiB7XG5cdFx0XHRpZiAoXG5cdFx0XHRcdGlzRGF0YUZpZWxkRm9yQWN0aW9uQWJzdHJhY3QoZGF0YUZpZWxkKSAmJlxuXHRcdFx0XHRkYXRhRmllbGQuSW5saW5lPy52YWx1ZU9mKCkgIT09IHRydWUgJiZcblx0XHRcdFx0ZGF0YUZpZWxkLkRldGVybWluaW5nPy52YWx1ZU9mKCkgIT09IHRydWVcblx0XHRcdCkge1xuXHRcdFx0XHRjb25zdCB0YWJsZUFjdGlvbiA9IGdldERhdGFGaWVsZEFubm90YXRpb25BY3Rpb24oZGF0YUZpZWxkLCBjb252ZXJ0ZXJDb250ZXh0KTtcblx0XHRcdFx0aWYgKHRhYmxlQWN0aW9uKSB7XG5cdFx0XHRcdFx0dGFibGVBY3Rpb25zLnB1c2godGFibGVBY3Rpb24pO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2UgaWYgKGlzRGF0YUZpZWxkRm9yQWN0aW9uR3JvdXAoZGF0YUZpZWxkKSkge1xuXHRcdFx0XHRjb25zdCBkYXRhRmllbGRHcm91cCA9IGdldERhdGFGaWVsZEFubm90YXRpb25BY3Rpb24oZGF0YUZpZWxkLCBjb252ZXJ0ZXJDb250ZXh0KTtcblx0XHRcdFx0aWYgKGRhdGFGaWVsZEdyb3VwKSB7XG5cdFx0XHRcdFx0dGFibGVBY3Rpb25zLnB1c2goZGF0YUZpZWxkR3JvdXApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0cmV0dXJuIHtcblx0XHR0YWJsZUFjdGlvbnNcblx0fTtcbn1cblxuLy8gRm9yIHRoZSBjb250ZXh0IG1lbnUsIHRoZSB2aXNpYmlsaXR5IHNob3VsZCBhbHNvIGNvbnNpZGVyIHRoZSAnaW5hY3RpdmVDb250ZXh0JyBwcm9wZXJ0eTpcbi8vIG9ubHkgd2hlbiBhdCBsZWFzdCBvbmUgc2VsZWN0ZWQgY29udGV4dCBpcyBhY3RpdmUgKGkuZS4gXCJjb250ZXh0bWVudS9pbmFjdGl2ZUNvbnRleHRcIiBpcyBmYWxzZSksIHRoZSBhY3Rpb24gc2hvdWxkIGJlIHZpc2libGUgaW4gdGhlIGNvbnRleHQgbWVudVxuLy8gVGhpcyBpcyBvbmx5IHJlbGV2YW50IHdoZW4gdGhlIHRhYmxlIG1hbmlmZXN0IHNldHRpbmcgXCJjcmVhdGlvbk1vZGVcIiBpcyBcIklubGluZUNyZWF0aW9uUm93c1wiXG5mdW5jdGlvbiB2aXNpYmxlRm9yQ29udGV4dE1lbnVFeHByZXNzaW9uKFxuXHRkYXRhRmllbGQ6IERhdGFGaWVsZEZvckFjdGlvbiB8IERhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbiB8IERhdGFGaWVsZEZvckFjdGlvbkdyb3VwIHwgdW5kZWZpbmVkLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD5cbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdHJldHVybiBhbmQodmlzaWJsZUV4cHJlc3Npb24oZGF0YUZpZWxkLCBjb252ZXJ0ZXJDb250ZXh0KSwgZXF1YWwocGF0aEluTW9kZWwoXCJjb250ZXh0bWVudS9pbmFjdGl2ZUNvbnRleHRcIiwgXCJpbnRlcm5hbFwiKSwgZmFsc2UpKTtcbn1cblxuZnVuY3Rpb24gZ2V0RGF0YUZpZWxkQW5ub3RhdGlvbkFjdGlvbihcblx0ZGF0YUZpZWxkOiBEYXRhRmllbGRBYnN0cmFjdFR5cGVzLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD5cbik6IEFubm90YXRpb25BY3Rpb24gfCBBbm5vdGF0aW9uQWN0aW9uR3JvdXAgfCB2b2lkIHtcblx0bGV0IHRhYmxlQWN0aW9uOiBBbm5vdGF0aW9uQWN0aW9uO1xuXHRsZXQgZW50aXR5VHlwZTtcblx0c3dpdGNoIChkYXRhRmllbGQuJFR5cGUpIHtcblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFjdGlvbjpcblx0XHRcdHRhYmxlQWN0aW9uID0ge1xuXHRcdFx0XHR0eXBlOiBBY3Rpb25UeXBlLkRhdGFGaWVsZEZvckFjdGlvbixcblx0XHRcdFx0YW5ub3RhdGlvblBhdGg6IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0QmFzZWRBbm5vdGF0aW9uUGF0aChkYXRhRmllbGQuZnVsbHlRdWFsaWZpZWROYW1lKSxcblx0XHRcdFx0a2V5OiBLZXlIZWxwZXIuZ2VuZXJhdGVLZXlGcm9tRGF0YUZpZWxkKGRhdGFGaWVsZCksXG5cdFx0XHRcdHZpc2libGU6IGNvbXBpbGVFeHByZXNzaW9uKHZpc2libGVFeHByZXNzaW9uKGRhdGFGaWVsZCwgY29udmVydGVyQ29udGV4dCkpLFxuXHRcdFx0XHR2aXNpYmxlRm9yQ29udGV4dE1lbnU6IGNvbXBpbGVFeHByZXNzaW9uKHZpc2libGVGb3JDb250ZXh0TWVudUV4cHJlc3Npb24oZGF0YUZpZWxkLCBjb252ZXJ0ZXJDb250ZXh0KSksXG5cdFx0XHRcdGlzTmF2aWdhYmxlOiB0cnVlLFxuXHRcdFx0XHRpc0FJT3BlcmF0aW9uOiBpc0FjdGlvbkFJT3BlcmF0aW9uKGRhdGFGaWVsZCkgPT09IHRydWUgfHwgdW5kZWZpbmVkXG5cdFx0XHR9O1xuXHRcdFx0ZW50aXR5VHlwZSA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpLmZ1bGx5UXVhbGlmaWVkTmFtZTtcblx0XHRcdGlmIChfdXNlRW5hYmxlZEV4cHJlc3Npb24oZGF0YUZpZWxkLCBlbnRpdHlUeXBlKSkge1xuXHRcdFx0XHR0YWJsZUFjdGlvbi5lbmFibGVkID0gZ2V0RW5hYmxlZEZvckFubm90YXRpb25BY3Rpb24oY29udmVydGVyQ29udGV4dCwgZGF0YUZpZWxkLkFjdGlvblRhcmdldCwgdHJ1ZSk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdGFibGVBY3Rpb247XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb246XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHR0eXBlOiBBY3Rpb25UeXBlLkRhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbixcblx0XHRcdFx0YW5ub3RhdGlvblBhdGg6IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0QmFzZWRBbm5vdGF0aW9uUGF0aChkYXRhRmllbGQuZnVsbHlRdWFsaWZpZWROYW1lKSxcblx0XHRcdFx0a2V5OiBLZXlIZWxwZXIuZ2VuZXJhdGVLZXlGcm9tRGF0YUZpZWxkKGRhdGFGaWVsZCksXG5cdFx0XHRcdHZpc2libGU6IGNvbXBpbGVFeHByZXNzaW9uKHZpc2libGVFeHByZXNzaW9uKGRhdGFGaWVsZCwgY29udmVydGVyQ29udGV4dCkpLFxuXHRcdFx0XHR2aXNpYmxlRm9yQ29udGV4dE1lbnU6IGNvbXBpbGVFeHByZXNzaW9uKHZpc2libGVGb3JDb250ZXh0TWVudUV4cHJlc3Npb24oZGF0YUZpZWxkLCBjb252ZXJ0ZXJDb250ZXh0KSlcblx0XHRcdH07XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBY3Rpb25Hcm91cDpcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdHR5cGU6IEFjdGlvblR5cGUuTWVudSxcblx0XHRcdFx0a2V5OiBLZXlIZWxwZXIuZ2VuZXJhdGVLZXlGcm9tRGF0YUZpZWxkKGRhdGFGaWVsZCksXG5cdFx0XHRcdGlkOiBLZXlIZWxwZXIuZ2VuZXJhdGVLZXlGcm9tRGF0YUZpZWxkKGRhdGFGaWVsZCksXG5cdFx0XHRcdHRleHQ6IGRhdGFGaWVsZC5MYWJlbD8udG9TdHJpbmcoKSxcblx0XHRcdFx0dmlzaWJsZTogY29tcGlsZUV4cHJlc3Npb24odmlzaWJsZUV4cHJlc3Npb24oZGF0YUZpZWxkLCBjb252ZXJ0ZXJDb250ZXh0KSksXG5cdFx0XHRcdHZpc2libGVGb3JDb250ZXh0TWVudTogY29tcGlsZUV4cHJlc3Npb24odmlzaWJsZUZvckNvbnRleHRNZW51RXhwcmVzc2lvbihkYXRhRmllbGQsIGNvbnZlcnRlckNvbnRleHQpKSxcblx0XHRcdFx0aXNBSU9wZXJhdGlvbjogaXNNZW51QUlPcGVyYXRpb24oZGF0YUZpZWxkLkFjdGlvbnMpID09PSB0cnVlIHx8IHVuZGVmaW5lZCxcblx0XHRcdFx0bWVudTogZGF0YUZpZWxkLkFjdGlvbnMubWFwKChhY3Rpb24pID0+IGdldERhdGFGaWVsZEFubm90YXRpb25BY3Rpb24oYWN0aW9uLCBjb252ZXJ0ZXJDb250ZXh0KSlcblx0XHRcdH0gYXMgQW5ub3RhdGlvbkFjdGlvbkdyb3VwO1xuXHRcdGRlZmF1bHQ6XG5cdFx0XHRyZXR1cm47XG5cdH1cbn1cblxuLyoqXG4gKiBHZW5lcmF0ZSB0aGUgYmluZGluZ0V4cHJlc3Npb24gZm9yIHRoZSBoaWdobGlnaHQgcm93U2V0dGluZyBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0gY3JpdGljYWxpdHlBbm5vdGF0aW9uIFBhdGggb3IgdmFsdWUgb2YgdGhlIGNyaXRpY2FsaXR5XG4gKiBAcGFyYW0gaXNEcmFmdFJvb3RPck5vZGUgIElzIHRoZSBjdXJyZW50IGVudGl0eVNldCBhbiBEcmFmdCByb290IG9yIGEgbm9kZVxuICogQHBhcmFtIHRhcmdldEVudGl0eVR5cGUgVGhlIHRhcmdldGVkIGVudGl0eVR5cGVcbiAqIEByZXR1cm5zIEFuIGV4cHJlc3Npb25CaW5kaW5nXG4gKi9cbmZ1bmN0aW9uIGdldEhpZ2hsaWdodFJvd0JpbmRpbmcoXG5cdGNyaXRpY2FsaXR5QW5ub3RhdGlvbjogQ3JpdGljYWxpdHkgfCB1bmRlZmluZWQsXG5cdGlzRHJhZnRSb290T3JOb2RlOiBib29sZWFuLFxuXHR0YXJnZXRFbnRpdHlUeXBlPzogRW50aXR5VHlwZVxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPE1lc3NhZ2VUeXBlPiB7XG5cdGxldCBkZWZhdWx0SGlnaGxpZ2h0Um93RGVmaW5pdGlvbjogTWVzc2FnZVR5cGUgfCBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248TWVzc2FnZVR5cGU+ID0gTWVzc2FnZVR5cGUuTm9uZTtcblx0aWYgKGNyaXRpY2FsaXR5QW5ub3RhdGlvbikge1xuXHRcdGlmICh0eXBlb2YgY3JpdGljYWxpdHlBbm5vdGF0aW9uID09PSBcIm9iamVjdFwiKSB7XG5cdFx0XHRkZWZhdWx0SGlnaGxpZ2h0Um93RGVmaW5pdGlvbiA9IGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihjcml0aWNhbGl0eUFubm90YXRpb24pIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxNZXNzYWdlVHlwZT47XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIEVudW0gVmFsdWUgc28gd2UgZ2V0IHRoZSBjb3JyZXNwb25kaW5nIHN0YXRpYyBwYXJ0XG5cdFx0XHRkZWZhdWx0SGlnaGxpZ2h0Um93RGVmaW5pdGlvbiA9IGdldE1lc3NhZ2VUeXBlRnJvbUNyaXRpY2FsaXR5VHlwZShjcml0aWNhbGl0eUFubm90YXRpb24pO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gZm9ybWF0UmVzdWx0KFxuXHRcdFtcblx0XHRcdGRlZmF1bHRIaWdobGlnaHRSb3dEZWZpbml0aW9uLFxuXHRcdFx0cGF0aEluTW9kZWwoYGZpbHRlcmVkTWVzc2FnZXNgLCBcImludGVybmFsXCIpLFxuXHRcdFx0aXNEcmFmdFJvb3RPck5vZGUgJiYgRW50aXR5Lkhhc0FjdGl2ZSxcblx0XHRcdGlzRHJhZnRSb290T3JOb2RlICYmIEVudGl0eS5Jc0FjdGl2ZSxcblx0XHRcdGAke2lzRHJhZnRSb290T3JOb2RlfWAsXG5cdFx0XHRwYXRoSW5Nb2RlbChcIkAkdWk1LmZlLmNvbnRleHRQYXRoXCIpLFxuXHRcdFx0VUkuSXNJbmFjdGl2ZVxuXHRcdF0sXG5cdFx0dGFibGVGb3JtYXR0ZXJzLnJvd0hpZ2hsaWdodGluZyxcblx0XHR0YXJnZXRFbnRpdHlUeXBlXG5cdCk7XG59XG5cbi8qKlxuICogR2V0cyB0aGUgZXh0ZXJuYWwgY3JlYXRpb24gYmVoYXZpb3IgaWYgdGhlcmUncyBvbmUuXG4gKiBAcGFyYW0gdGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb25cbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcGFyYW0gbmF2aWdhdGlvblNldHRpbmdzXG4gKiBAcmV0dXJucyBUaGUgZXh0ZXJuYWwgY3JlYXRpb24gYmVoYXZpb3IsIG9yIHVuZGVmaW5lZCBpZiB0aGVyZSdzIG5vbmUuXG4gKi9cbmZ1bmN0aW9uIGdldEV4dGVybmFsQ3JlYXRpb25CZWhhdmlvcihcblx0dGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb246IFRhYmxlQ29udHJvbENvbmZpZ3VyYXRpb24sXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0bmF2aWdhdGlvblNldHRpbmdzOiBOYXZpZ2F0aW9uU2V0dGluZ3NDb25maWd1cmF0aW9uXG4pOiBDcmVhdGVCZWhhdmlvckV4dGVybmFsIHwgdW5kZWZpbmVkIHtcblx0Ly8gTGVnYWN5IHNldHRpbmdzOiB0aGUgb3V0Ym91bmQgaXMgc3BlY2lmaWVkIGluIG5hdmlnYXRpb24vY3JlYXRlXG5cdC8vIE5ldyBzZXR0aW5nczogdGhlIG91dGJvdW5kIGlzIHNwZWNpZmllZCBpbiB0YWJsZVNldHRpbmdzL2NyZWF0aW9uTW9kZVxuXHRjb25zdCBjcmVhdGlvbkRldGFpbHMgPSBuYXZpZ2F0aW9uU2V0dGluZ3M/LmNyZWF0ZTtcblx0Y29uc3Qgb3V0Ym91bmRLZXkgPSB0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbi5vdXRib3VuZENyZWF0aW9uID8/IGNyZWF0aW9uRGV0YWlscz8ub3V0Ym91bmQ7XG5cdGNvbnN0IG91dGJvdW5kRGV0YWlsID0gb3V0Ym91bmRLZXkgPyBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpLmdldE91dGJvdW5kTmF2aWdhdGlvbkVudHJpZXMoKT8uW291dGJvdW5kS2V5XSA6IHVuZGVmaW5lZDtcblx0aWYgKG91dGJvdW5kS2V5ICYmIG91dGJvdW5kRGV0YWlsKSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdG1vZGU6IFwiRXh0ZXJuYWxcIixcblx0XHRcdG91dGJvdW5kOiBvdXRib3VuZEtleSxcblx0XHRcdG91dGJvdW5kRGV0YWlsXG5cdFx0fTtcblx0fSBlbHNlIHtcblx0XHRpZiAodGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24uY3JlYXRpb25Nb2RlID09PSBDcmVhdGlvbk1vZGUuRXh0ZXJuYWwpIHtcblx0XHRcdC8vIE91dGJvdW5kIGNvbmZpZ3VyYXRpb24gaW5jb3JyZWN0IC0tPiBmYWxsYmFjayB0byBOZXdQYWdlXG5cdFx0XHRMb2cud2FybmluZyhgQ2Fubm90IGZpbmQgb3V0Ym91bmQgcGFyYW1ldGVycyBmb3IgXCJFeHRlcm5hbFwiIGNyZWF0aW9uIG1vZGUuIEluc3RlYWQsIHRoZSBkZWZhdWx0IG1vZGUgXCJOZXdQYWdlXCIgaXMgdXNlZC5gKTtcblx0XHRcdHRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uLmNyZWF0aW9uTW9kZSA9IENyZWF0aW9uTW9kZS5OZXdQYWdlO1xuXHRcdFx0ZGVsZXRlIHRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uLm91dGJvdW5kQ3JlYXRpb247XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxufVxuXG5mdW5jdGlvbiBfZ2V0Q3JlYXRpb25CZWhhdmlvdXIoXG5cdGxpbmVJdGVtQW5ub3RhdGlvbjogTGluZUl0ZW0gfCB1bmRlZmluZWQsXG5cdHRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uOiBUYWJsZUNvbnRyb2xDb25maWd1cmF0aW9uLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdG5hdmlnYXRpb25TZXR0aW5nczogTmF2aWdhdGlvblNldHRpbmdzQ29uZmlndXJhdGlvbixcblx0dmlzdWFsaXphdGlvblBhdGg6IHN0cmluZ1xuKTogQ3JlYXRlQmVoYXZpb3IgfCBDcmVhdGVCZWhhdmlvckV4dGVybmFsIHtcblx0Y29uc3QgZXh0ZXJuYWxCZWhhdmlvciA9IGdldEV4dGVybmFsQ3JlYXRpb25CZWhhdmlvcih0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbiwgY29udmVydGVyQ29udGV4dCwgbmF2aWdhdGlvblNldHRpbmdzKTtcblx0aWYgKGV4dGVybmFsQmVoYXZpb3IpIHtcblx0XHR0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbi5jcmVhdGlvbk1vZGUgPSBDcmVhdGlvbk1vZGUuRXh0ZXJuYWw7XG5cdFx0dGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24ub3V0Ym91bmRDcmVhdGlvbiA9IGV4dGVybmFsQmVoYXZpb3Iub3V0Ym91bmQ7XG5cdFx0cmV0dXJuIGV4dGVybmFsQmVoYXZpb3I7XG5cdH1cblxuXHRjb25zdCB0YWJsZU1hbmlmZXN0U2V0dGluZ3M6IFRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdENvbnRyb2xDb25maWd1cmF0aW9uKHZpc3VhbGl6YXRpb25QYXRoKTtcblx0Y29uc3Qgb3JpZ2luYWxUYWJsZVNldHRpbmdzID0gdGFibGVNYW5pZmVzdFNldHRpbmdzPy50YWJsZVNldHRpbmdzID8/IHt9O1xuXHRjb25zdCBuYXZpZ2F0aW9uRGV0YWlscyA9IG5hdmlnYXRpb25TZXR0aW5ncz8uZGV0YWlsO1xuXHRpZiAoXG5cdFx0Y29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSA9PT0gVGVtcGxhdGVUeXBlLkxpc3RSZXBvcnQgJiZcblx0XHQhW0NyZWF0aW9uTW9kZS5OZXdQYWdlLCBDcmVhdGlvbk1vZGUuRXh0ZXJuYWwsIENyZWF0aW9uTW9kZS5DcmVhdGlvbkRpYWxvZ10uaW5jbHVkZXModGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24uY3JlYXRpb25Nb2RlKVxuXHQpIHtcblx0XHQvLyBGYWxsYmFjayB0byBcIk5ld1BhZ2VcIlxuXHRcdExvZy53YXJuaW5nKFxuXHRcdFx0YENyZWF0aW9uIG1vZGUgJyR7dGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24uY3JlYXRpb25Nb2RlfScgY2FuIG5vdCBiZSB1c2VkIHdpdGhpbiB0aGUgTGlzdCBSZXBvcnQuIEluc3RlYWQsIHRoZSBkZWZhdWx0IG1vZGUgXCJOZXdQYWdlXCIgaXMgdXNlZC5gXG5cdFx0KTtcblx0XHR0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbi5jcmVhdGlvbk1vZGUgPSBDcmVhdGlvbk1vZGUuTmV3UGFnZTtcblx0fSBlbHNlIGlmIChcblx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpICE9PSBUZW1wbGF0ZVR5cGUuTGlzdFJlcG9ydCAmJlxuXHRcdHRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uLnR5cGUgPT09IFwiVHJlZVRhYmxlXCIgJiZcblx0XHQhW0NyZWF0aW9uTW9kZS5OZXdQYWdlLCBDcmVhdGlvbk1vZGUuSW5saW5lLCBDcmVhdGlvbk1vZGUuQ3JlYXRpb25EaWFsb2ddLmluY2x1ZGVzKHRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uLmNyZWF0aW9uTW9kZSlcblx0KSB7XG5cdFx0Ly8gRmFsbGJhY2sgdG8gXCJOZXdQYWdlXCIgaW4gY2FzZSBvZiBhIG5vbi1zdXBwb3J0ZWQgbW9kZSBmb3IgYSBUcmVlVGFibGVcblx0XHRMb2cud2FybmluZyhcblx0XHRcdGBDcmVhdGlvbiBtb2RlICcke3RhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uLmNyZWF0aW9uTW9kZX0nIGNhbiBub3QgYmUgdXNlZCB3aXRoIGEgVHJlZSBUYWJsZS4gSW5zdGVhZCwgdGhlIGRlZmF1bHQgbW9kZSBcIk5ld1BhZ2VcIiBpcyB1c2VkLmBcblx0XHQpO1xuXHRcdHRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uLmNyZWF0aW9uTW9kZSA9IENyZWF0aW9uTW9kZS5OZXdQYWdlO1xuXHR9XG5cblx0bGV0IG5ld0FjdGlvbjtcblx0aWYgKGxpbmVJdGVtQW5ub3RhdGlvbikge1xuXHRcdC8vIGluLWFwcFxuXHRcdGNvbnN0IHRhcmdldEFubm90YXRpb25zID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXQoKT8uYW5ub3RhdGlvbnM7XG5cdFx0Y29uc3QgdGFyZ2V0QW5ub3RhdGlvbnNDb21tb24gPSB0YXJnZXRBbm5vdGF0aW9ucz8uQ29tbW9uIGFzIEVudGl0eVNldEFubm90YXRpb25zX0NvbW1vbixcblx0XHRcdHRhcmdldEFubm90YXRpb25zU2Vzc2lvbiA9IHRhcmdldEFubm90YXRpb25zPy5TZXNzaW9uIGFzIEVudGl0eVNldEFubm90YXRpb25zX1Nlc3Npb247XG5cdFx0bmV3QWN0aW9uID0gdGFyZ2V0QW5ub3RhdGlvbnNDb21tb24/LkRyYWZ0Um9vdD8uTmV3QWN0aW9uIHx8IHRhcmdldEFubm90YXRpb25zU2Vzc2lvbj8uU3RpY2t5U2Vzc2lvblN1cHBvcnRlZD8uTmV3QWN0aW9uO1xuXHRcdGlmICh0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbi5jcmVhdGlvbk1vZGUgPT09IENyZWF0aW9uTW9kZS5DcmVhdGlvblJvdyAmJiBuZXdBY3Rpb24pIHtcblx0XHRcdC8vIEEgY29tYmluYXRpb24gb2YgJ0NyZWF0aW9uUm93JyBhbmQgJ05ld0FjdGlvbicgZG9lcyBub3QgbWFrZSBzZW5zZVxuXHRcdFx0dGhyb3cgRXJyb3IoYENyZWF0aW9uIG1vZGUgJyR7Q3JlYXRpb25Nb2RlLkNyZWF0aW9uUm93fScgY2FuIG5vdCBiZSB1c2VkIHdpdGggYSBjdXN0b20gJ25ldycgYWN0aW9uICgke25ld0FjdGlvbn0pYCk7XG5cdFx0fVxuXHRcdGlmIChuYXZpZ2F0aW9uRGV0YWlscz8ucm91dGUpIHtcblx0XHRcdC8vIHJvdXRlIHNwZWNpZmllZFxuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0bW9kZTogdGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24uY3JlYXRpb25Nb2RlLFxuXHRcdFx0XHRhcHBlbmQ6IHRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uLmNyZWF0ZUF0RW5kLFxuXHRcdFx0XHRuZXdBY3Rpb246IG5ld0FjdGlvbj8udG9TdHJpbmcoKSxcblx0XHRcdFx0bmF2aWdhdGVUb1RhcmdldDogdGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24uY3JlYXRpb25Nb2RlID09PSBDcmVhdGlvbk1vZGUuTmV3UGFnZSA/IG5hdmlnYXRpb25EZXRhaWxzLnJvdXRlIDogdW5kZWZpbmVkIC8vIG5hdmlnYXRlIG9ubHkgaW4gTmV3UGFnZSBtb2RlXG5cdFx0XHR9O1xuXHRcdH1cblx0fVxuXHQvLyBubyBuYXZpZ2F0aW9uIG9yIG5vIHJvdXRlIHNwZWNpZmllZCAtIGZhbGxiYWNrIHRvIGlubGluZSBjcmVhdGUgaWYgb3JpZ2luYWwgY3JlYXRpb24gbW9kZSB3YXMgJ05ld1BhZ2UnXG5cdGlmICh0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbi5jcmVhdGlvbk1vZGUgPT09IENyZWF0aW9uTW9kZS5OZXdQYWdlKSB7XG5cdFx0aWYgKGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCkgPT09IFRlbXBsYXRlVHlwZS5MaXN0UmVwb3J0KSB7XG5cdFx0XHRMb2cuZXJyb3IoXCJUaGUgY3JlYXRpb24gbW9kZSAnTmV3UGFnZScgaXMgdXNlZCBidXQgdGhlIG5hdmlnYXRpb24gY29uZmlndXJhdGlvbiB0byB0aGUgc3ViIHBhZ2UgaXMgbWlzc2luZy5cIik7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uLmNyZWF0aW9uTW9kZSA9IENyZWF0aW9uTW9kZS5JbmxpbmU7XG5cdFx0XHQvLyBJbiBjYXNlIHRoZXJlIHdhcyBubyBzcGVjaWZpYyBjb25maWd1cmF0aW9uIGZvciB0aGUgY3JlYXRlQXRFbmQgd2UgZm9yY2UgaXQgdG8gZmFsc2Vcblx0XHRcdGlmIChvcmlnaW5hbFRhYmxlU2V0dGluZ3MuY3JlYXRpb25Nb2RlPy5jcmVhdGVBdEVuZCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdHRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uLmNyZWF0ZUF0RW5kID0gZmFsc2U7XG5cdFx0XHR9XG5cdFx0XHRMb2cuaW5mbyhcIlRoZSBjcmVhdGlvbiBtb2RlIHdhcyBjaGFuZ2VkIGZyb20gJ05ld1BhZ2UnIHRvICdJbmxpbmUnIGR1ZSB0byBtaXNzaW5nIG5hdmlnYXRpb24gY29uZmlndXJhdGlvbiB0byB0aGUgc3ViIHBhZ2UuXCIpO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4ge1xuXHRcdG1vZGU6IHRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uLmNyZWF0aW9uTW9kZSxcblx0XHRhcHBlbmQ6IHRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uLmNyZWF0ZUF0RW5kLFxuXHRcdG5ld0FjdGlvbjogbmV3QWN0aW9uPy50b1N0cmluZygpXG5cdH07XG59XG5jb25zdCBfZ2V0Um93Q29uZmlndXJhdGlvblByb3BlcnR5ID0gZnVuY3Rpb24gKFxuXHRsaW5lSXRlbUFubm90YXRpb246IExpbmVJdGVtIHwgdW5kZWZpbmVkLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdG5hdmlnYXRpb25TZXR0aW5nczogTmF2aWdhdGlvblNldHRpbmdzQ29uZmlndXJhdGlvbixcblx0dGFyZ2V0UGF0aDogc3RyaW5nLFxuXHR0YWJsZVR5cGU6IFRhYmxlVHlwZSxcblx0YWdncmVnYXRpb25PbkxlYWZMZXZlbGVuYWJsZWQ/OiBib29sZWFuXG4pOiBSb3dDb25maWd1cmF0aW9uIHtcblx0bGV0IG5hdmlnYXRpb25JbmZvOiBSb3dOYXZpZ2F0aW9uSW5mbyB8IHVuZGVmaW5lZDtcblx0bGV0IGNyaXRpY2FsaXR5UHJvcGVydHk6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxNZXNzYWdlVHlwZT4gPSBjb25zdGFudChNZXNzYWdlVHlwZS5Ob25lKTtcblx0Y29uc3QgdGFyZ2V0RW50aXR5VHlwZSA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpO1xuXHRjb25zdCBjcml0aWNhbGl0eUFubm90YXRpb24gPSBsaW5lSXRlbUFubm90YXRpb24/LmFubm90YXRpb25zPy5VST8uQ3JpdGljYWxpdHk7XG5cdGlmIChuYXZpZ2F0aW9uU2V0dGluZ3MgJiYgbGluZUl0ZW1Bbm5vdGF0aW9uKSB7XG5cdFx0Y29uc3QgbmF2aWdhdGlvblRhcmdldCA9IG5hdmlnYXRpb25TZXR0aW5ncy5kaXNwbGF5Py50YXJnZXQgfHwgbmF2aWdhdGlvblNldHRpbmdzLmRldGFpbD8ub3V0Ym91bmQ7XG5cdFx0Y29uc3QgdGFyZ2V0RW50aXR5U2V0ID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXQoKTtcblx0XHRjcml0aWNhbGl0eVByb3BlcnR5ID0gZ2V0SGlnaGxpZ2h0Um93QmluZGluZyhcblx0XHRcdGNyaXRpY2FsaXR5QW5ub3RhdGlvbixcblx0XHRcdCEhTW9kZWxIZWxwZXIuZ2V0RHJhZnRSb290KHRhcmdldEVudGl0eVNldCkgfHwgISFNb2RlbEhlbHBlci5nZXREcmFmdE5vZGUodGFyZ2V0RW50aXR5U2V0KSxcblx0XHRcdHRhcmdldEVudGl0eVR5cGVcblx0XHQpO1xuXHRcdGlmIChuYXZpZ2F0aW9uVGFyZ2V0KSB7XG5cdFx0XHRuYXZpZ2F0aW9uSW5mbyA9IHsgdHlwZTogXCJPdXRib3VuZFwiLCBuYXZpZ2F0aW9uVGFyZ2V0IH07XG5cdFx0fVxuXHRcdGlmICghbmF2aWdhdGlvblRhcmdldCAmJiBuYXZpZ2F0aW9uU2V0dGluZ3MuZGV0YWlsPy5yb3V0ZSkge1xuXHRcdFx0Y29uc3QgY2hlY2tFZGl0YWJsZSA9XG5cdFx0XHRcdE1vZGVsSGVscGVyLmdldERyYWZ0Um9vdCh0YXJnZXRFbnRpdHlTZXQpICE9PSB1bmRlZmluZWQgfHwgTW9kZWxIZWxwZXIuZ2V0RHJhZnROb2RlKHRhcmdldEVudGl0eVNldCkgIT09IHVuZGVmaW5lZDtcblx0XHRcdG5hdmlnYXRpb25JbmZvID0ge1xuXHRcdFx0XHR0eXBlOiBcIk5hdmlnYXRpb25cIixcblx0XHRcdFx0cm91dGVQYXRoOiBuYXZpZ2F0aW9uU2V0dGluZ3MuZGV0YWlsLnJvdXRlLFxuXHRcdFx0XHR0YXJnZXRQYXRoLFxuXHRcdFx0XHRjaGVja0VkaXRhYmxlLFxuXHRcdFx0XHRyZWNyZWF0ZUNvbnRleHQ6IHRhYmxlVHlwZSA9PT0gXCJBbmFseXRpY2FsVGFibGVcIlxuXHRcdFx0fTtcblx0XHR9XG5cdH1cblx0Y29uc3Qgcm93TmF2aWdhdGVkRXhwcmVzc2lvbjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+ID0gZm9ybWF0UmVzdWx0KFxuXHRcdFtwYXRoSW5Nb2RlbChcIi9kZWVwZXN0UGF0aFwiLCBcImludGVybmFsXCIpXSxcblx0XHR0YWJsZUZvcm1hdHRlcnMubmF2aWdhdGVkUm93LFxuXHRcdHRhcmdldEVudGl0eVR5cGVcblx0KTtcblx0cmV0dXJuIHtcblx0XHRuYXZpZ2F0aW9uSW5mbyxcblx0XHRhY3Rpb25UeXBlOiBuYXZpZ2F0aW9uSW5mbyA/IFwiTmF2aWdhdGlvblwiIDogdW5kZWZpbmVkLFxuXHRcdHJvd0hpZ2hsaWdodGluZzogY29tcGlsZUV4cHJlc3Npb24oY3JpdGljYWxpdHlQcm9wZXJ0eSksXG5cdFx0cm93TmF2aWdhdGVkOiBjb21waWxlRXhwcmVzc2lvbihyb3dOYXZpZ2F0ZWRFeHByZXNzaW9uKSxcblx0XHRyb3dDcml0aWNhbGl0eUZvckluc2lnaHRzOiBjcml0aWNhbGl0eUFubm90YXRpb24gPyBjcml0aWNhbGl0eUV4cHJlc3Npb25Gb3JJbnRlZ3JhdGlvbkNhcmRzKGNyaXRpY2FsaXR5QW5ub3RhdGlvbikgOiB1bmRlZmluZWQsXG5cdFx0dmlzaWJsZTogY29tcGlsZUV4cHJlc3Npb24oYW5kKG5vdChVSS5Jc0luYWN0aXZlKSwgYWdncmVnYXRpb25PbkxlYWZMZXZlbGVuYWJsZWQgPyBVSS5pc05vZGVMZXZlbE5hdmlnYWJsZSA6IHRydWUpKVxuXHR9O1xufTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgUHJvcGVydHlJbmZvIGZvciB0aGUgaWRlbnRpZmllZCBhZGRpdGlvbmFsIHByb3BlcnR5IGZvciB0aGUgQUxQIHRhYmxlIHVzZS1jYXNlLlxuICpcbiAqIEZvciBlLmcuIElmIFVJLkhpZGRlbiBwb2ludHMgdG8gYSBwcm9wZXJ0eSwgaW5jbHVkZSB0aGlzIHRlY2huaWNhbCBwcm9wZXJ0eSBpbiB0aGUgYWRkaXRpb25hbFByb3BlcnRpZXMgb2YgQ29tcGxleFByb3BlcnR5SW5mbyBvYmplY3QuXG4gKiBAcGFyYW0gbmFtZSBUaGUgbmFtZSBvZiB0aGUgcHJvcGVydHkgdG8gYmUgY3JlYXRlZC5cbiAqIEBwYXJhbSBjb2x1bW5zIFRoZSBsaXN0IG9mIGNvbHVtbnMgY3JlYXRlZCBmb3IgTGluZUl0ZW1zIGFuZCBQcm9wZXJ0aWVzIG9mIGVudGl0eVR5cGUgZnJvbSB0aGUgdGFibGUgdmlzdWFsaXphdGlvbi5cbiAqIEBwYXJhbSByZWxhdGVkQWRkaXRpb25hbFByb3BlcnR5TmFtZU1hcFxuICovXG5jb25zdCBjcmVhdGVUZWNobmljYWxQcm9wZXJ0eSA9IGZ1bmN0aW9uIChcblx0bmFtZTogc3RyaW5nLFxuXHRjb2x1bW5zOiBUYWJsZUNvbHVtbltdLFxuXHRyZWxhdGVkQWRkaXRpb25hbFByb3BlcnR5TmFtZU1hcDogUmVjb3JkPHN0cmluZywgc3RyaW5nPlxuKTogdm9pZCB7XG5cdGNvbnN0IGtleSA9IGBQcm9wZXJ0eV9UZWNobmljYWw6OiR7bmFtZX1gO1xuXHQvLyBWYWxpZGF0ZSBpZiB0aGUgdGVjaG5pY2FsIHByb3BlcnR5IGhhc24ndCB5ZXQgYmVlbiBjcmVhdGVkIG9uIHByZXZpb3VzIGl0ZXJhdGlvbnMuXG5cdGNvbnN0IGNvbHVtbkV4aXN0cyA9IGNvbHVtbnMuZmluZCgoY29sdW1uKSA9PiBjb2x1bW4ua2V5ID09PSBrZXkpO1xuXHQvLyBSZXRyaWV2ZSB0aGUgc2ltcGxlIHByb3BlcnR5IHVzZWQgYnkgdGhlIGhpZGRlbiBhbm5vdGF0aW9uLCBpdCB3aWxsIGJlIHVzZWQgYXMgYSBiYXNlIGZvciB0aGUgbWFuZGF0b3J5IGF0dHJpYnV0ZXMgb2YgbmV3bHkgY3JlYXRlZCB0ZWNobmljYWwgcHJvcGVydHkuIEZvciBlLmcuIHJlbGF0aXZlUGF0aFxuXHRjb25zdCBhZGRpdGlvbmFsUHJvcGVydHkgPVxuXHRcdCFjb2x1bW5FeGlzdHMgJiYgKGNvbHVtbnMuZmluZCgoY29sdW1uKSA9PiBjb2x1bW4ubmFtZSA9PT0gbmFtZSAmJiAhY29sdW1uLnByb3BlcnR5SW5mb3MpIGFzIEFubm90YXRpb25UYWJsZUNvbHVtbikhO1xuXHRpZiAoYWRkaXRpb25hbFByb3BlcnR5KSB7XG5cdFx0Y29uc3QgdGVjaG5pY2FsQ29sdW1uOiBBbm5vdGF0aW9uVGFibGVDb2x1bW4gPSB7XG5cdFx0XHRrZXk6IGtleSxcblx0XHRcdHR5cGU6IENvbHVtblR5cGUuQW5ub3RhdGlvbixcblx0XHRcdGxhYmVsOiBhZGRpdGlvbmFsUHJvcGVydHkubGFiZWwsXG5cdFx0XHRhbm5vdGF0aW9uUGF0aDogYWRkaXRpb25hbFByb3BlcnR5LmFubm90YXRpb25QYXRoLFxuXHRcdFx0ZGF0YVR5cGU6IFwiRWRtLlN0cmluZ1wiLFxuXHRcdFx0YXZhaWxhYmlsaXR5OiBcIkhpZGRlblwiLFxuXHRcdFx0bmFtZToga2V5LFxuXHRcdFx0cmVsYXRpdmVQYXRoOiBhZGRpdGlvbmFsUHJvcGVydHkucmVsYXRpdmVQYXRoLFxuXHRcdFx0c29ydGFibGU6IGZhbHNlLFxuXHRcdFx0aXNHcm91cGFibGU6IGZhbHNlLFxuXHRcdFx0aXNLZXk6IGZhbHNlLFxuXHRcdFx0ZXhwb3J0U2V0dGluZ3M6IG51bGwsXG5cdFx0XHRjYXNlU2Vuc2l0aXZlOiBmYWxzZSxcblx0XHRcdGFnZ3JlZ2F0YWJsZTogZmFsc2UsXG5cdFx0XHRmaWx0ZXJhYmxlOiBmYWxzZSxcblx0XHRcdGV4dGVuc2lvbjoge1xuXHRcdFx0XHR0ZWNobmljYWxseUdyb3VwYWJsZTogdHJ1ZSxcblx0XHRcdFx0dGVjaG5pY2FsbHlBZ2dyZWdhdGFibGU6IHRydWVcblx0XHRcdH1cblx0XHR9O1xuXHRcdGNvbHVtbnMucHVzaCh0ZWNobmljYWxDb2x1bW4pO1xuXHRcdHJlbGF0ZWRBZGRpdGlvbmFsUHJvcGVydHlOYW1lTWFwW25hbWVdID0gdGVjaG5pY2FsQ29sdW1uLm5hbWU7XG5cdH1cbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQMTNuTW9kZShcblx0dmlzdWFsaXphdGlvblBhdGg6IHN0cmluZyxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHR0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbjogVGFibGVDb250cm9sQ29uZmlndXJhdGlvblxuKTogVGFibGVQMTNuTW9kZVtdIHwgdW5kZWZpbmVkIHtcblx0Y29uc3QgbWFuaWZlc3RXcmFwcGVyOiBNYW5pZmVzdFdyYXBwZXIgPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpO1xuXHRjb25zdCB0YWJsZU1hbmlmZXN0U2V0dGluZ3M6IFRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdENvbnRyb2xDb25maWd1cmF0aW9uKHZpc3VhbGl6YXRpb25QYXRoKTtcblx0Y29uc3QgdmFyaWFudE1hbmFnZW1lbnQ6IFZhcmlhbnRNYW5hZ2VtZW50VHlwZSA9IG1hbmlmZXN0V3JhcHBlci5nZXRWYXJpYW50TWFuYWdlbWVudCgpO1xuXHRjb25zdCBtb2RlczogVGFibGVQMTNuTW9kZVtdID0gW107XG5cdGNvbnN0IGlzQW5hbHl0aWNhbFRhYmxlID0gdGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24udHlwZSA9PT0gXCJBbmFseXRpY2FsVGFibGVcIjtcblx0Y29uc3QgaXNSZXNwb25zaXZlVGFibGUgPSB0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbi50eXBlID09PSBcIlJlc3BvbnNpdmVUYWJsZVwiO1xuXHRpZiAodGFibGVNYW5pZmVzdFNldHRpbmdzPy50YWJsZVNldHRpbmdzPy5wZXJzb25hbGl6YXRpb24gIT09IHVuZGVmaW5lZCkge1xuXHRcdC8vIFBlcnNvbmFsaXphdGlvbiBjb25maWd1cmVkIGluIG1hbmlmZXN0LlxuXHRcdGNvbnN0IHBlcnNvbmFsaXphdGlvbiA9IHRhYmxlTWFuaWZlc3RTZXR0aW5ncy50YWJsZVNldHRpbmdzLnBlcnNvbmFsaXphdGlvbjtcblx0XHRpZiAocGVyc29uYWxpemF0aW9uID09PSB0cnVlKSB7XG5cdFx0XHQvLyBUYWJsZSBwZXJzb25hbGl6YXRpb24gZnVsbHkgZW5hYmxlZC5cblx0XHRcdHN3aXRjaCAodGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24udHlwZSkge1xuXHRcdFx0XHRjYXNlIFwiQW5hbHl0aWNhbFRhYmxlXCI6XG5cdFx0XHRcdFx0cmV0dXJuIFtcIlNvcnRcIiwgXCJDb2x1bW5cIiwgXCJGaWx0ZXJcIiwgXCJHcm91cFwiLCBcIkFnZ3JlZ2F0ZVwiXTtcblx0XHRcdFx0Y2FzZSBcIlJlc3BvbnNpdmVUYWJsZVwiOlxuXHRcdFx0XHRcdHJldHVybiBbXCJTb3J0XCIsIFwiQ29sdW1uXCIsIFwiRmlsdGVyXCIsIFwiR3JvdXBcIl07XG5cdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0cmV0dXJuIFtcIlNvcnRcIiwgXCJDb2x1bW5cIiwgXCJGaWx0ZXJcIl07XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmICh0eXBlb2YgcGVyc29uYWxpemF0aW9uID09PSBcIm9iamVjdFwiKSB7XG5cdFx0XHQvLyBTcGVjaWZpYyBwZXJzb25hbGl6YXRpb24gb3B0aW9ucyBlbmFibGVkIGluIG1hbmlmZXN0LiBVc2UgdGhlbSBhcyBpcy5cblx0XHRcdGlmIChwZXJzb25hbGl6YXRpb24uc29ydCkge1xuXHRcdFx0XHRtb2Rlcy5wdXNoKFwiU29ydFwiKTtcblx0XHRcdH1cblx0XHRcdGlmIChwZXJzb25hbGl6YXRpb24uY29sdW1uKSB7XG5cdFx0XHRcdG1vZGVzLnB1c2goXCJDb2x1bW5cIik7XG5cdFx0XHR9XG5cdFx0XHRpZiAocGVyc29uYWxpemF0aW9uLmZpbHRlcikge1xuXHRcdFx0XHRtb2Rlcy5wdXNoKFwiRmlsdGVyXCIpO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHBlcnNvbmFsaXphdGlvbi5ncm91cCAmJiAoaXNBbmFseXRpY2FsVGFibGUgfHwgaXNSZXNwb25zaXZlVGFibGUpKSB7XG5cdFx0XHRcdG1vZGVzLnB1c2goXCJHcm91cFwiKTtcblx0XHRcdH1cblx0XHRcdGlmIChwZXJzb25hbGl6YXRpb24uYWdncmVnYXRlICYmIGlzQW5hbHl0aWNhbFRhYmxlKSB7XG5cdFx0XHRcdG1vZGVzLnB1c2goXCJBZ2dyZWdhdGVcIik7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gbW9kZXMubGVuZ3RoID4gMCA/IG1vZGVzIDogdW5kZWZpbmVkO1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHQvLyBObyBwZXJzb25hbGl6YXRpb24gY29uZmlndXJlZCBpbiBtYW5pZmVzdC5cblx0XHRtb2Rlcy5wdXNoKFwiU29ydFwiKTtcblx0XHRtb2Rlcy5wdXNoKFwiQ29sdW1uXCIpO1xuXHRcdGlmIChjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpID09PSBUZW1wbGF0ZVR5cGUuTGlzdFJlcG9ydCkge1xuXHRcdFx0aWYgKHZhcmlhbnRNYW5hZ2VtZW50ID09PSBWYXJpYW50TWFuYWdlbWVudFR5cGUuQ29udHJvbCB8fCBfaXNGaWx0ZXJCYXJIaWRkZW4obWFuaWZlc3RXcmFwcGVyLCBjb252ZXJ0ZXJDb250ZXh0KSkge1xuXHRcdFx0XHQvLyBGZWF0dXJlIHBhcml0eSB3aXRoIFYyLlxuXHRcdFx0XHQvLyBFbmFibGUgdGFibGUgZmlsdGVyaW5nIGJ5IGRlZmF1bHQgb25seSBpbiBjYXNlIG9mIENvbnRyb2wgbGV2ZWwgdmFyaWFudCBtYW5hZ2VtZW50LlxuXHRcdFx0XHQvLyBPciB3aGVuIHRoZSBMUiBmaWx0ZXIgYmFyIGlzIGhpZGRlbiB2aWEgbWFuaWZlc3Qgc2V0dGluZ1xuXHRcdFx0XHRtb2Rlcy5wdXNoKFwiRmlsdGVyXCIpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRtb2Rlcy5wdXNoKFwiRmlsdGVyXCIpO1xuXHRcdH1cblx0XHRpZiAoaXNBbmFseXRpY2FsVGFibGUpIHtcblx0XHRcdG1vZGVzLnB1c2goXCJHcm91cFwiKTtcblx0XHRcdG1vZGVzLnB1c2goXCJBZ2dyZWdhdGVcIik7XG5cdFx0fVxuXHRcdGlmIChpc1Jlc3BvbnNpdmVUYWJsZSkge1xuXHRcdFx0bW9kZXMucHVzaChcIkdyb3VwXCIpO1xuXHRcdH1cblx0XHRyZXR1cm4gbW9kZXM7XG5cdH1cbn1cbi8qKlxuICogUmV0dXJucyBhIEJvb2xlYW4gdmFsdWUgc3VnZ2VzdGluZyBpZiBhIGZpbHRlciBiYXIgaXMgYmVpbmcgdXNlZCBvbiB0aGUgcGFnZS5cbiAqXG4gKiBDaGFydCBoYXMgYSBkZXBlbmRlbmN5IHRvIGZpbHRlciBiYXIgKGlzc3VlIHdpdGggbG9hZGluZyBkYXRhKS4gT25jZSByZXNvbHZlZCwgdGhlIGNoZWNrIGZvciBjaGFydCBzaG91bGQgYmUgcmVtb3ZlZCBoZXJlLlxuICogVW50aWwgdGhlbiwgaGlkaW5nIGZpbHRlciBiYXIgaXMgbm93IGFsbG93ZWQgaWYgYSBjaGFydCBpcyBiZWluZyB1c2VkIG9uIExSLlxuICogQHBhcmFtIG1hbmlmZXN0V3JhcHBlciBNYW5pZmVzdCBzZXR0aW5ncyBnZXR0ZXIgZm9yIHRoZSBwYWdlXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgaW5zdGFuY2Ugb2YgdGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcmV0dXJucyBCb29sZWFuIHN1Z2dlc3RpbmcgaWYgYSBmaWx0ZXIgYmFyIGlzIGJlaW5nIHVzZWQgb24gdGhlIHBhZ2UuXG4gKi9cbmZ1bmN0aW9uIF9pc0ZpbHRlckJhckhpZGRlbihtYW5pZmVzdFdyYXBwZXI6IE1hbmlmZXN0V3JhcHBlciwgY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+KTogYm9vbGVhbiB7XG5cdHJldHVybiAoXG5cdFx0bWFuaWZlc3RXcmFwcGVyLmlzRmlsdGVyQmFySGlkZGVuKCkgJiZcblx0XHQhY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKS5oYXNNdWx0aXBsZVZpc3VhbGl6YXRpb25zKCkgJiZcblx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpICE9PSBUZW1wbGF0ZVR5cGUuQW5hbHl0aWNhbExpc3RQYWdlXG5cdCk7XG59XG4vKipcbiAqIFJldHVybnMgYSBKU09OIHN0cmluZyBjb250YWluaW5nIHRoZSBzb3J0IGNvbmRpdGlvbnMgZm9yIHRoZSBwcmVzZW50YXRpb24gdmFyaWFudC5cbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBpbnN0YW5jZSBvZiB0aGUgY29udmVydGVyIGNvbnRleHRcbiAqIEBwYXJhbSBwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbiBQcmVzZW50YXRpb24gdmFyaWFudCBhbm5vdGF0aW9uXG4gKiBAcGFyYW0gY29sdW1ucyBUYWJsZSBjb2x1bW5zIHByb2Nlc3NlZCBieSB0aGUgY29udmVydGVyXG4gKiBAcmV0dXJucyBTb3J0IGNvbmRpdGlvbnMgZm9yIGEgcHJlc2VudGF0aW9uIHZhcmlhbnQuXG4gKi9cbmZ1bmN0aW9uIGdldFNvcnRDb25kaXRpb25zKFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uOiBQcmVzZW50YXRpb25WYXJpYW50VHlwZSB8IHVuZGVmaW5lZCxcblx0Y29sdW1uczogVGFibGVDb2x1bW5bXVxuKTogVGFibGVTb3J0Q29uZGl0aW9ucyB8IHVuZGVmaW5lZCB7XG5cdC8vIEN1cnJlbnRseSBuYXZpZ2F0aW9uIHByb3BlcnR5IGlzIG5vdCBzdXBwb3J0ZWQgYXMgc29ydGVyXG5cdGNvbnN0IG5vblNvcnRhYmxlUHJvcGVydGllcyA9IGdldFJlc3RyaWN0aW9uc09uUHJvcGVydGllcyhjb252ZXJ0ZXJDb250ZXh0KS5ub25Tb3J0YWJsZVByb3BlcnRpZXM7XG5cdGNvbnN0IHNvcnRDb25kaXRpb25zOiBUYWJsZVNvcnRDb25kaXRpb25zID0ge1xuXHRcdHNvcnRlcnM6IFtdXG5cdH07XG5cdGlmIChwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbj8uU29ydE9yZGVyKSB7XG5cdFx0cHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb24uU29ydE9yZGVyLmZvckVhY2goKGNvbmRpdGlvbikgPT4ge1xuXHRcdFx0Y29uc3QgY29uZGl0aW9uUHJvcGVydHkgPSBjb25kaXRpb24uUHJvcGVydHk7XG5cdFx0XHRpZiAoY29uZGl0aW9uUHJvcGVydHk/LiR0YXJnZXQgIT09IHVuZGVmaW5lZCAmJiAhbm9uU29ydGFibGVQcm9wZXJ0aWVzLmluY2x1ZGVzKGNvbmRpdGlvblByb3BlcnR5LiR0YXJnZXQubmFtZSkpIHtcblx0XHRcdFx0Y29uc3QgaW5mb05hbWUgPSBjb252ZXJ0UHJvcGVydHlQYXRoc1RvSW5mb05hbWVzKFtjb25kaXRpb25Qcm9wZXJ0eV0sIGNvbHVtbnMpWzBdO1xuXHRcdFx0XHRpZiAoaW5mb05hbWUpIHtcblx0XHRcdFx0XHRzb3J0Q29uZGl0aW9ucy5zb3J0ZXJzLnB1c2goe1xuXHRcdFx0XHRcdFx0bmFtZTogaW5mb05hbWUsXG5cdFx0XHRcdFx0XHRkZXNjZW5kaW5nOiAhIWNvbmRpdGlvbi5EZXNjZW5kaW5nXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXHRyZXR1cm4gc29ydENvbmRpdGlvbnMuc29ydGVycy5sZW5ndGggPyBzb3J0Q29uZGl0aW9ucyA6IHVuZGVmaW5lZDtcbn1cbmZ1bmN0aW9uIGdldEluaXRpYWxFeHBhbnNpb25MZXZlbChwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbjogUHJlc2VudGF0aW9uVmFyaWFudFR5cGUgfCB1bmRlZmluZWQpOiBudW1iZXIgfCB1bmRlZmluZWQge1xuXHRpZiAoIXByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uKSB7XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXHRjb25zdCBsZXZlbCA9IHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uLkluaXRpYWxFeHBhbnNpb25MZXZlbD8udmFsdWVPZigpO1xuXHRyZXR1cm4gdHlwZW9mIGxldmVsID09PSBcIm51bWJlclwiID8gbGV2ZWwgKyAxIDogdW5kZWZpbmVkO1xufVxuLyoqXG4gKiBDb252ZXJ0cyBhbiBhcnJheSBvZiBwcm9wZXJ0eVBhdGggdG8gYW4gYXJyYXkgb2YgcHJvcGVydHlJbmZvIG5hbWVzLlxuICogQHBhcmFtIHBhdGhzIFRoZSBhcnJheSB0byBiZSBjb252ZXJ0ZWRcbiAqIEBwYXJhbSBjb2x1bW5zIFRoZSBhcnJheSBvZiBwcm9wZXJ0eUluZm9zXG4gKiBAcmV0dXJucyBBbiBhcnJheSBvZiBwcm9wZXJ0eUluZm8gbmFtZXNcbiAqL1xuZnVuY3Rpb24gY29udmVydFByb3BlcnR5UGF0aHNUb0luZm9OYW1lcyhwYXRoczogUHJvcGVydHlQYXRoW10sIGNvbHVtbnM6IFRhYmxlQ29sdW1uW10pOiBzdHJpbmdbXSB7XG5cdGNvbnN0IGluZm9OYW1lczogc3RyaW5nW10gPSBbXTtcblx0bGV0IHByb3BlcnR5SW5mbzogVGFibGVDb2x1bW4gfCB1bmRlZmluZWQsIGFubm90YXRpb25Db2x1bW46IEFubm90YXRpb25UYWJsZUNvbHVtbjtcblx0cGF0aHMuZm9yRWFjaCgoY3VycmVudFBhdGgpID0+IHtcblx0XHRpZiAoY3VycmVudFBhdGg/LnZhbHVlKSB7XG5cdFx0XHRwcm9wZXJ0eUluZm8gPSBjb2x1bW5zLmZpbmQoKGNvbHVtbikgPT4ge1xuXHRcdFx0XHRhbm5vdGF0aW9uQ29sdW1uID0gY29sdW1uIGFzIEFubm90YXRpb25UYWJsZUNvbHVtbjtcblx0XHRcdFx0cmV0dXJuICFhbm5vdGF0aW9uQ29sdW1uLnByb3BlcnR5SW5mb3MgJiYgYW5ub3RhdGlvbkNvbHVtbi5yZWxhdGl2ZVBhdGggPT09IGN1cnJlbnRQYXRoPy52YWx1ZTtcblx0XHRcdH0pO1xuXHRcdFx0aWYgKHByb3BlcnR5SW5mbykge1xuXHRcdFx0XHRpbmZvTmFtZXMucHVzaChwcm9wZXJ0eUluZm8ubmFtZSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9KTtcblx0cmV0dXJuIGluZm9OYW1lcztcbn1cbi8qKlxuICogUmV0dXJucyBhIEpTT04gc3RyaW5nIGNvbnRhaW5pbmcgUHJlc2VudGF0aW9uIFZhcmlhbnQgZ3JvdXAgY29uZGl0aW9ucy5cbiAqIEBwYXJhbSBwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbiBQcmVzZW50YXRpb24gdmFyaWFudCBhbm5vdGF0aW9uXG4gKiBAcGFyYW0gY29sdW1ucyBDb252ZXJ0ZXIgcHJvY2Vzc2VkIHRhYmxlIGNvbHVtbnNcbiAqIEBwYXJhbSB0YWJsZVR5cGUgVGhlIHRhYmxlIHR5cGUuXG4gKiBAcmV0dXJucyBHcm91cCBjb25kaXRpb25zIGZvciBhIFByZXNlbnRhdGlvbiB2YXJpYW50LlxuICovXG5mdW5jdGlvbiBnZXRHcm91cENvbmRpdGlvbnMoXG5cdHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uOiBQcmVzZW50YXRpb25WYXJpYW50VHlwZSB8IHVuZGVmaW5lZCxcblx0Y29sdW1uczogVGFibGVDb2x1bW5bXSxcblx0dGFibGVUeXBlOiBzdHJpbmdcbik6IFRhYmxlR3JvdXBDb25kaXRpb25zIHwgdW5kZWZpbmVkIHtcblx0Y29uc3QgZ3JvdXBDb25kaXRpb25zOiBUYWJsZUdyb3VwQ29uZGl0aW9ucyA9IHtcblx0XHRncm91cExldmVsczogW11cblx0fTtcblx0aWYgKHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uPy5Hcm91cEJ5KSB7XG5cdFx0bGV0IGFHcm91cEJ5ID0gcHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb24uR3JvdXBCeTtcblx0XHRpZiAodGFibGVUeXBlID09PSBcIlJlc3BvbnNpdmVUYWJsZVwiKSB7XG5cdFx0XHRhR3JvdXBCeSA9IGFHcm91cEJ5LnNsaWNlKDAsIDEpO1xuXHRcdH1cblx0XHRncm91cENvbmRpdGlvbnMuZ3JvdXBMZXZlbHMgPSBjb252ZXJ0UHJvcGVydHlQYXRoc1RvSW5mb05hbWVzKGFHcm91cEJ5LCBjb2x1bW5zKS5tYXAoKGluZm9OYW1lKSA9PiB7XG5cdFx0XHRyZXR1cm4geyBuYW1lOiBpbmZvTmFtZSB9O1xuXHRcdH0pO1xuXHR9XG5cdHJldHVybiBncm91cENvbmRpdGlvbnMuZ3JvdXBMZXZlbHMubGVuZ3RoID8gZ3JvdXBDb25kaXRpb25zIDogdW5kZWZpbmVkO1xufVxuLyoqXG4gKiBVcGRhdGVzIHRoZSBjb2x1bW4ncyBwcm9wZXJ0eUluZm9zIG9mIGFuIGFuYWx5dGljYWwgdGFibGUgaW50ZWdyYXRpbmcgYWxsIGV4dGVuc2lvbnMgYW5kIGJpbmRpbmctcmVsZXZhbnQgcHJvcGVydHkgaW5mbyBwYXJ0LlxuICogQHBhcmFtIHRhYmxlVmlzdWFsaXphdGlvbiBUaGUgdmlzdWFsaXphdGlvbiB0byBiZSB1cGRhdGVkXG4gKi9cbmZ1bmN0aW9uIF91cGRhdGVQcm9wZXJ0eUluZm9zV2l0aEFnZ3JlZ2F0ZXNEZWZpbml0aW9ucyh0YWJsZVZpc3VhbGl6YXRpb246IFRhYmxlVmlzdWFsaXphdGlvbik6IHZvaWQge1xuXHRjb25zdCByZWxhdGVkQWRkaXRpb25hbFByb3BlcnR5TmFtZU1hcDogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuXHR0YWJsZVZpc3VhbGl6YXRpb24uY29sdW1ucy5mb3JFYWNoKChjb2x1bW4pID0+IHtcblx0XHRjb2x1bW4gPSBjb2x1bW4gYXMgQW5ub3RhdGlvblRhYmxlQ29sdW1uO1xuXHRcdGNvbnN0IHByb3BlcnR5TmFtZUZyb21BbmFseXRpY3NJbmZvID0gX2dldFByb3BlcnR5TmFtZUZyb21BbmFseXRpY3NJbmZvKHRhYmxlVmlzdWFsaXphdGlvbiwgY29sdW1uLm5hbWUpO1xuXHRcdGlmIChwcm9wZXJ0eU5hbWVGcm9tQW5hbHl0aWNzSW5mbykge1xuXHRcdFx0Y29uc3QgYWdncmVnYXRhYmxlUHJvcGVydHlEZWZpbml0aW9uID0gdGFibGVWaXN1YWxpemF0aW9uLmFuYWx5dGljc0V4dGVuc2lvbnMhW3Byb3BlcnR5TmFtZUZyb21BbmFseXRpY3NJbmZvXTtcblx0XHRcdGNvbHVtbi5hZ2dyZWdhdGFibGUgPSAhYWdncmVnYXRhYmxlUHJvcGVydHlEZWZpbml0aW9uLmZyb21Hcm91cGFibGVQcm9wZXJ0eTtcblx0XHRcdGNvbHVtbi5leHRlbnNpb24gPSBhZ2dyZWdhdGFibGVQcm9wZXJ0eURlZmluaXRpb24gPz8ge307XG5cdFx0XHRpZiAoIWNvbHVtbi5pc0dyb3VwYWJsZSAmJiAhY29sdW1uLmFnZ3JlZ2F0YWJsZSkge1xuXHRcdFx0XHQvLyBUaGUgY29sdW1uIGlzIG5laXRoZXIgYWdncmVnYXRhYmxlIG5vciBncm91cGFibGUgLS0+IGl0J3MgYSBoaWRkZW4gY29sdW1uIHRvIGFsbG93IGZpbHRlcmluZyBpbiBQMTNOXG5cdFx0XHRcdC8vIFdlIG5lZWQgdG8gcmVtb3ZlIGFkZGl0aW9uYWxQcm9wZXJ0aWVzLCBhcyBpdCdzIG5vdCBuZWVkZWQgYW5kIGNhdXNlcyBhbiBlcnJvciBpbiB0aGUgTURDIHRhYmxlIGNvZGVcblx0XHRcdFx0ZGVsZXRlIGNvbHVtbi5leHRlbnNpb24uYWRkaXRpb25hbFByb3BlcnRpZXM7XG5cdFx0XHR9XG5cdFx0XHRpZiAoY29sdW1uLmlzR3JvdXBhYmxlICYmIGNvbHVtbi5leHRlbnNpb24uYWRkaXRpb25hbFByb3BlcnRpZXMgJiYgY29sdW1uLmV4dGVuc2lvbi5hZGRpdGlvbmFsUHJvcGVydGllcy5sZW5ndGgpIHtcblx0XHRcdFx0Ly8gRm9yIHRoZSB0aW1lIGJlaW5nLCBwcm9wZXJ0aWVzIHdpdGggY29udGV4dC1kZWZpbmluZyBwcm9wZXJ0aWVzIHNoYWxsIG5vdCBiZSBhbGxvd2VkIGZvciB2aXN1YWwgZ3JvdXBpbmdcblx0XHRcdFx0Ly8gV2UgbmVlZCBhIFVYIGNvbmNlcHQgdG8gc3VwcG9ydCB0aGlzIChhcyB0aGUgZW5kIHVzZXIgd291bGQgbmVlZCB0byBncm91cCBvbiB0aGUgY29udGV4dC1kZWZpbmluZyBwcm9wZXJ0aWVzIGJlZm9yZSBncm91cGluZ1xuXHRcdFx0XHQvLyBvbiB0aGUgcHJvcGVydHkgaXRzZWxmKS5cblx0XHRcdFx0Y29sdW1uLmlzR3JvdXBhYmxlID0gZmFsc2U7XG5cdFx0XHRcdGNvbHVtbi5leHRlbnNpb24udGVjaG5pY2FsbHlHcm91cGFibGUgPSB0cnVlO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRpZiAoY29sdW1uLmFkZGl0aW9uYWxQcm9wZXJ0eUluZm9zPy5sZW5ndGgpIHtcblx0XHRcdGNvbHVtbi5hZGRpdGlvbmFsUHJvcGVydHlJbmZvcy5mb3JFYWNoKChhZGRpdGlvbmFsUHJvcGVydHlJbmZvKSA9PiB7XG5cdFx0XHRcdC8vIENyZWF0ZSBwcm9wZXJ0eUluZm8gZm9yIGVhY2ggYWRkaXRpb25hbCBwcm9wZXJ0eS5cblx0XHRcdFx0Ly8gVGhlIG5ldyBwcm9wZXJ0eSAnbmFtZScgaGFzIGJlZW4gcHJlZml4ZWQgd2l0aCAnUHJvcGVydHlfVGVjaG5pY2FsOjonIGZvciB1bmlxdWVuZXNzIGFuZCBpdCBoYXMgYmVlbiBuYW1lZCB0ZWNobmljYWwgcHJvcGVydHkgYXMgaXQgcmVxdWlyZXMgZGVkaWNhdGVkIE1EQyBhdHRyaWJ1dGVzICh0ZWNobmljYWxseUdyb3VwYWJsZSBhbmQgdGVjaG5pY2FsbHlBZ2dyZWdhdGFibGUpLlxuXHRcdFx0XHRjcmVhdGVUZWNobmljYWxQcm9wZXJ0eShhZGRpdGlvbmFsUHJvcGVydHlJbmZvLCB0YWJsZVZpc3VhbGl6YXRpb24uY29sdW1ucywgcmVsYXRlZEFkZGl0aW9uYWxQcm9wZXJ0eU5hbWVNYXApO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdF91cGRhdGVGb3JUZXh0T25seVByb3BlcnRpZXNXaXRoQ0RQKHRhYmxlVmlzdWFsaXphdGlvbiwgY29sdW1uKTtcblx0fSk7XG5cdHRhYmxlVmlzdWFsaXphdGlvbi5jb2x1bW5zLmZvckVhY2goKGNvbHVtbikgPT4ge1xuXHRcdGNvbHVtbiA9IGNvbHVtbiBhcyBBbm5vdGF0aW9uVGFibGVDb2x1bW47XG5cdFx0aWYgKGNvbHVtbi5hZGRpdGlvbmFsUHJvcGVydHlJbmZvcykge1xuXHRcdFx0Y29sdW1uLmFkZGl0aW9uYWxQcm9wZXJ0eUluZm9zID0gY29sdW1uLmFkZGl0aW9uYWxQcm9wZXJ0eUluZm9zLm1hcChcblx0XHRcdFx0KHByb3BlcnR5SW5mbykgPT4gcmVsYXRlZEFkZGl0aW9uYWxQcm9wZXJ0eU5hbWVNYXBbcHJvcGVydHlJbmZvXSA/PyBwcm9wZXJ0eUluZm9cblx0XHRcdCk7XG5cdFx0XHQvLyBBZGQgYWRkaXRpb25hbCBwcm9wZXJ0aWVzIHRvIHRoZSBjb21wbGV4IHByb3BlcnR5IHVzaW5nIHRoZSBoaWRkZW4gYW5ub3RhdGlvbi5cblx0XHRcdGNvbHVtbi5wcm9wZXJ0eUluZm9zID0gY29sdW1uLnByb3BlcnR5SW5mb3M/LmNvbmNhdChjb2x1bW4uYWRkaXRpb25hbFByb3BlcnR5SW5mb3MpO1xuXHRcdH1cblx0fSk7XG59XG5cbi8qKlxuICogUHJvdmlkZXMgdGhlIHJlZmVyZW5jZWQgcHJvcGVydHkgbmFtZSBmcm9tIHRoZSBhbmFseXRpY3MgZGF0YVxuICogQHBhcmFtIHRhYmxlVmlzdWFsaXphdGlvbiBUaGUgdmlzdWFsaXphdGlvbiB0byBiZSBhbmFseXplZFxuICogQHBhcmFtIG5hbWUgVGhlIHByb3BlcnR5IG5hbWVcbiAqIEByZXR1cm5zIFRoZSBwcm9wZXJ0eSBuYW1lIGZyb20gdGhlIGFuYWx5dGljcyBkYXRhXG4gKi9cblxuZnVuY3Rpb24gX2dldFByb3BlcnR5TmFtZUZyb21BbmFseXRpY3NJbmZvKHRhYmxlVmlzdWFsaXphdGlvbjogVGFibGVWaXN1YWxpemF0aW9uLCBuYW1lOiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRyZXR1cm4gT2JqZWN0LmtleXModGFibGVWaXN1YWxpemF0aW9uLmFuYWx5dGljc0V4dGVuc2lvbnMhKS5maW5kKChhZ2dyZWdhdGUpID0+IGFnZ3JlZ2F0ZSA9PT0gbmFtZSk7XG59XG5cbi8qKlxuICogVXBkYXRlcyB0aGUgY29sdW1uJ3MgcHJvcGVydHlJbmZvcyBvZiBhIGNvbHVtbiBhbm5vdGF0ZWQgd2l0aCB0ZXh0IG9ubHkgb24gYW4gYW5hbHl0aWNhbCB0YWJsZS5cbiAqIFRoZSByZWZlcmVuY2VkIHRleHQgcHJvcGVydHkgY291bGQgZGVmaW5lIGNvbnRleHQtZGVmaW5pbmcgcHJvcGVydGllcyB0byBiZSBpbmNsdWRlZCBpbnRvIHRoZSBjb2x1bW4ncyBwcm9wZXJ0eUluZm9zLlxuICogQHBhcmFtIHRhYmxlVmlzdWFsaXphdGlvbiBUaGUgdmlzdWFsaXphdGlvbiB0byBiZSBhbmFseXplZFxuICogQHBhcmFtIGNvbHVtbiBUaGUgY29sdW1uIGNvbnRhaW5pbmcgdGhlIFwidGV4dEFycmFuZ2VtZW50XCIgb2JqZWN0IHdoZW4gcHJlc2VudFxuICovXG5mdW5jdGlvbiBfdXBkYXRlRm9yVGV4dE9ubHlQcm9wZXJ0aWVzV2l0aENEUCh0YWJsZVZpc3VhbGl6YXRpb246IFRhYmxlVmlzdWFsaXphdGlvbiwgY29sdW1uOiBBbm5vdGF0aW9uVGFibGVDb2x1bW4pOiB2b2lkIHtcblx0Ly8gQ3VycmVudGx5IGEgY29sdW1uIHJlZmVyZW5jaW5nIGEgdGV4dCBvbmx5IHByb3BlcnR5IG9ubHkgY29udGFpbnMgdGhlIHRleHQgcHJvcGVydHkgaW50byBpdHMgcHJvcGVydHlJbmZvcy5cblx0Ly8gUHJvcGVydGllcyByZWZlcmVuY2luZyBjb250ZXh0LWRlZmluaW5nIHByb3BlcnRpZXMgKENEUCkgYXJlbid0IGFsbG93ZWQgZm9yIGdyb3VwaW5nLiBUaGlzIG5lZWQgdG8gY2hhbmdlIGZvciB0ZXh0IG9ubHkgY29sdW1ucywgYXMgaW4gY29tbW9uIGNhc2VzLCB0ZXh0IHByb3BlcnRpZXMgcmVmZXJlbmNlIHRoZWlyIHZhbHVlIHByb3BlcnRpZXMgaW50byB0aGVpciBDRFBzLlxuXHQvLyBTbywgd2Ugbm93IGluY2x1ZGUgdGhlIHZhbHVlIHByb3BlcnR5IGludG8gdGhlIHByb3BlcnR5SW5mb3Mgb2YgdGhlIGNvbHVtbiB0byBhbGxvdyB0aGUgZ3JvdXBpbmcgb24gdGhlIHByb3BlcnR5IHZhbHVlLlxuXHRpZiAoY29sdW1uLnRleHRBcnJhbmdlbWVudD8ubW9kZSA9PT0gXCJEZXNjcmlwdGlvblwiICYmIGNvbHVtbi50ZXh0QXJyYW5nZW1lbnQudGV4dFByb3BlcnR5KSB7XG5cdFx0Y29uc3QgYW5hbHl0aWNzSW5mb1Byb3BlcnR5TmFtZUZvckRlc2MgPSBfZ2V0UHJvcGVydHlOYW1lRnJvbUFuYWx5dGljc0luZm8odGFibGVWaXN1YWxpemF0aW9uLCBjb2x1bW4udGV4dEFycmFuZ2VtZW50LnRleHRQcm9wZXJ0eSk7XG5cdFx0aWYgKGFuYWx5dGljc0luZm9Qcm9wZXJ0eU5hbWVGb3JEZXNjKSB7XG5cdFx0XHRjb25zdCBhZ2dyZWdhdGFibGVQcm9wZXJ0eURlZmluaXRpb24gPSB0YWJsZVZpc3VhbGl6YXRpb24uYW5hbHl0aWNzRXh0ZW5zaW9ucyFbYW5hbHl0aWNzSW5mb1Byb3BlcnR5TmFtZUZvckRlc2NdO1xuXHRcdFx0Ly8gV2UgbmVlZCB0byBtYWtlIHN1cmUgdGhlIHRleHQgcHJvcGVydHkgaGFzIENEUCBwcm9wZXJ0aWVzIGRlZmluZWQgYW5kIHRoZSB2YWx1ZSBwcm9wZXJ0eSBpcyBwYXJ0IG9mIHRoZXNlIHByb3BlcnRpZXMuXG5cdFx0XHRpZiAoXG5cdFx0XHRcdGFnZ3JlZ2F0YWJsZVByb3BlcnR5RGVmaW5pdGlvbi5hZGRpdGlvbmFsUHJvcGVydGllcz8ubGVuZ3RoICYmXG5cdFx0XHRcdGFnZ3JlZ2F0YWJsZVByb3BlcnR5RGVmaW5pdGlvbi5hZGRpdGlvbmFsUHJvcGVydGllcy5pbmNsdWRlcyhjb2x1bW4ubmFtZSlcblx0XHRcdCkge1xuXHRcdFx0XHQvLyBUaGUgcHJvcGVydHkgdmFsdWUgKHNpbmdsZSBwcm9wZXJ0eSkgZXhpc3RzIGFscmVhZHkgb24gdGhlIGxpc3Qgb2YgY29sdW1ucyBmcm9tIHRoZSB0YWJsZSBidXQgaXQgd2FzIG9ubHkgY3JlYXRlZCBmb3IgZmlsdGVyaW5nIHB1cnBvc2VzIGluIFAxM24gYW5kIG5vdCBsaW5rZWQgdG8gdGhlIGNvbHVtbiB3aXRoIHRoZSB0ZXh0IGFycmFuZ2VtZW50ICNUZXh0T25seSxcblx0XHRcdFx0Ly8gdGhlcmVmb3JlIG5vdCBwcm9wb3NlZCBhcyBhIGRlZmF1bHQgdmFsdWUgZm9yIGdyb3VwaW5nIHRoZSBjb2x1bW4gbWVudS4gTm93IGl0J2xsIGJlIGluY2x1ZGVkIGludG8gdGhlIHByb3BlcnR5SW5mb3Mgb2YgdGhlIGNvbHVtbiB0byBhbGxvdyB0aGUgZGVmYXVsdCBncm91cGluZyBvbiB0aGlzIHZhbHVlIHByb3BlcnR5LlxuXHRcdFx0XHRjb25zdCBjb2x1bW5XaXRoVGV4dE9ubHkgPSAodGFibGVWaXN1YWxpemF0aW9uLmNvbHVtbnMgYXMgQW5ub3RhdGlvblRhYmxlQ29sdW1uW10pLmZpbmQoXG5cdFx0XHRcdFx0KHRleHRPbmx5Q29sdW1uKSA9PiB0ZXh0T25seUNvbHVtbi5yZWxhdGl2ZVBhdGggPT09IGNvbHVtbi5yZWxhdGl2ZVBhdGggJiYgdGV4dE9ubHlDb2x1bW4ucHJvcGVydHlJbmZvc1xuXHRcdFx0XHQpO1xuXHRcdFx0XHRjb2x1bW5XaXRoVGV4dE9ubHk/LnByb3BlcnR5SW5mb3M/LnB1c2goY29sdW1uLm5hbWUpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufVxuXG4vKipcbiAqIFJldHVybnMgYSBKU09OIHN0cmluZyBjb250YWluaW5nIFByZXNlbnRhdGlvbiBWYXJpYW50IGFnZ3JlZ2F0ZSBjb25kaXRpb25zLlxuICogQHBhcmFtIHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uIFByZXNlbnRhdGlvbiB2YXJpYW50IGFubm90YXRpb25cbiAqIEBwYXJhbSBjb2x1bW5zIENvbnZlcnRlciBwcm9jZXNzZWQgdGFibGUgY29sdW1uc1xuICogQHBhcmFtIGV4dGVuc2lvbkluZm9NYXBcbiAqIEByZXR1cm5zIEdyb3VwIGNvbmRpdGlvbnMgZm9yIGEgUHJlc2VudGF0aW9uIHZhcmlhbnQuXG4gKi9cbmZ1bmN0aW9uIGdldEFnZ3JlZ2F0ZUNvbmRpdGlvbnMoXG5cdHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uOiBQcmVzZW50YXRpb25WYXJpYW50VHlwZSB8IHVuZGVmaW5lZCxcblx0Y29sdW1uczogVGFibGVDb2x1bW5bXSxcblx0ZXh0ZW5zaW9uSW5mb01hcDogUmVjb3JkPHN0cmluZywgSW50ZXJuYWxFeHRlbnNpb25Gb3JBbmFseXRpY3M+XG4pOiBUYWJsZUFnZ3JlZ2F0ZUNvbmRpdGlvbnMgfCB1bmRlZmluZWQge1xuXHRjb25zdCBhZ2dyZWdhdGVDb25kaXRpb25zOiBUYWJsZUFnZ3JlZ2F0ZUNvbmRpdGlvbnMgPSB7fTtcblx0aWYgKHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uPy5Ub3RhbCkge1xuXHRcdGNvbnN0IGFUb3RhbHMgPSBwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbi5Ub3RhbDtcblx0XHRjb252ZXJ0UHJvcGVydHlQYXRoc1RvSW5mb05hbWVzKGFUb3RhbHMsIGNvbHVtbnMpLmZvckVhY2goKGluZm9OYW1lKSA9PiB7XG5cdFx0XHRhZ2dyZWdhdGVDb25kaXRpb25zW2luZm9OYW1lXSA9IHt9O1xuXHRcdH0pO1xuXHR9IGVsc2Uge1xuXHRcdGZvciAoY29uc3Qga2V5IGluIGV4dGVuc2lvbkluZm9NYXApIHtcblx0XHRcdGlmICghZXh0ZW5zaW9uSW5mb01hcFtrZXldLmZyb21Hcm91cGFibGVQcm9wZXJ0eSkge1xuXHRcdFx0XHRhZ2dyZWdhdGVDb25kaXRpb25zW2tleV0gPSB7fTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblx0cmV0dXJuIE9iamVjdC5rZXlzKGFnZ3JlZ2F0ZUNvbmRpdGlvbnMpLmxlbmd0aCA/IGFnZ3JlZ2F0ZUNvbmRpdGlvbnMgOiB1bmRlZmluZWQ7XG59XG5leHBvcnQgdHlwZSBTdGFuZGFyZEFjdGlvbnNDb25maWd1cmF0aW9uID0ge1xuXHRjcmVhdGlvbkJlaGF2aW91cjogVGFibGVBbm5vdGF0aW9uQ29uZmlndXJhdGlvbltcImNyZWF0ZVwiXTtcblx0Y3V0QnV0dG9uVmlzaWJpbGl0eUV4cHJlc3Npb246IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPjtcblx0ZGVsZXRlQnV0dG9uVmlzaWJpbGl0eUV4cHJlc3Npb246IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPjtcblx0bWFzc0VkaXRCdXR0b25WaXNpYmlsaXR5RXhwcmVzc2lvbjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+O1xuXHRpc0luc2VydFVwZGF0ZUFjdGlvbnNUZW1wbGF0ZWQ6IGJvb2xlYW47XG5cdHN0YW5kYXJkQWN0aW9uczoge1xuXHRcdGNyZWF0ZTogU3RhbmRhcmRBY3Rpb247XG5cdFx0ZGVsZXRlOiBTdGFuZGFyZEFjdGlvbjtcblx0XHRwYXN0ZTogU3RhbmRhcmRBY3Rpb247XG5cdFx0bWFzc0VkaXQ6IFN0YW5kYXJkQWN0aW9uO1xuXHRcdGluc2lnaHRzOiBTdGFuZGFyZEFjdGlvbjtcblx0XHRjcmVhdGlvblJvdzogU3RhbmRhcmRBY3Rpb247XG5cdFx0Y3V0OiBTdGFuZGFyZEFjdGlvbjtcblx0XHRjb3B5OiBTdGFuZGFyZEFjdGlvbjtcblx0XHRtb3ZlVXA/OiBTdGFuZGFyZEFjdGlvbjtcblx0XHRtb3ZlRG93bj86IFN0YW5kYXJkQWN0aW9uO1xuXHR9O1xufTtcbi8qKlxuICogQ2FsY3VsYXRlcyB0aGUgc3RhbmRhcmQgYWN0aW9ucyBhbmQgYWRqYWNlbnQgcHJvcGVydGllcyB0aGF0IGFyZSBuZWVkZWQgaW4gdGhlIGZ1cnRoZXIgY29udmVyc2lvbiBwcm9jZXNzLlxuICogQHBhcmFtIGxpbmVJdGVtQW5ub3RhdGlvbiBDb2xsZWN0aW9uIG9mIGRhdGEgZmllbGRzIHVzZWQgZm9yIHJlcHJlc2VudGF0aW9uIGluIGEgdGFibGUgb3IgbGlzdFxuICogQHBhcmFtIHZpc3VhbGl6YXRpb25QYXRoIFRoZSB2aXN1YWxpemF0aW9uIHBhdGhcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBpbnN0YW5jZSBvZiB0aGUgY29udmVydGVyIGNvbnRleHRcbiAqIEBwYXJhbSB0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbiBUaGUgdGFibGUgbWFuaWZlc3QgY29uZmlndXJhdGlvblxuICogQHBhcmFtIG5hdmlnYXRpb25TZXR0aW5ncyBUaGUgbmF2aWdhdGlvbiB0YXJnZXQgbWFuaWZlc3QgY29uZmlndXJhdGlvblxuICogQHJldHVybnMgU3RhbmRhcmQgYWN0aW9ucyBhbmQgY29ubmVjdGVkIHByb3BlcnRpZXNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFN0YW5kYXJkQWN0aW9uc0NvbmZpZ3VyYXRpb24oXG5cdGxpbmVJdGVtQW5ub3RhdGlvbjogTGluZUl0ZW0gfCB1bmRlZmluZWQsXG5cdHZpc3VhbGl6YXRpb25QYXRoOiBzdHJpbmcsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0dGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb246IFRhYmxlQ29udHJvbENvbmZpZ3VyYXRpb24sXG5cdG5hdmlnYXRpb25TZXR0aW5nczogTmF2aWdhdGlvblNldHRpbmdzQ29uZmlndXJhdGlvblxuKTogU3RhbmRhcmRBY3Rpb25zQ29uZmlndXJhdGlvbiB7XG5cdGNvbnN0IGNyZWF0aW9uQmVoYXZpb3VyID0gX2dldENyZWF0aW9uQmVoYXZpb3VyKFxuXHRcdGxpbmVJdGVtQW5ub3RhdGlvbixcblx0XHR0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbixcblx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdG5hdmlnYXRpb25TZXR0aW5ncyxcblx0XHR2aXN1YWxpemF0aW9uUGF0aFxuXHQpO1xuXHRjb25zdCBzdGFuZGFyZEFjdGlvbnNDb250ZXh0ID0gZ2VuZXJhdGVTdGFuZGFyZEFjdGlvbnNDb250ZXh0KFxuXHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0Y3JlYXRpb25CZWhhdmlvdXIubW9kZSBhcyBDcmVhdGlvbk1vZGUsXG5cdFx0dGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb25cblx0KTtcblx0Y29uc3QgY3V0QnV0dG9uVmlzaWJpbGl0eUV4cHJlc3Npb24gPSBnZXRDdXRWaXNpYmlsaXR5KGNvbnZlcnRlckNvbnRleHQsIHN0YW5kYXJkQWN0aW9uc0NvbnRleHQpO1xuXHRjb25zdCBkZWxldGVCdXR0b25WaXNpYmlsaXR5RXhwcmVzc2lvbiA9IGdldERlbGV0ZVZpc2liaWxpdHkoY29udmVydGVyQ29udGV4dCwgc3RhbmRhcmRBY3Rpb25zQ29udGV4dCk7XG5cdGNvbnN0IG1hc3NFZGl0QnV0dG9uVmlzaWJpbGl0eUV4cHJlc3Npb24gPSBnZXRNYXNzRWRpdFZpc2liaWxpdHkoY29udmVydGVyQ29udGV4dCwgc3RhbmRhcmRBY3Rpb25zQ29udGV4dCk7XG5cdGNvbnN0IGlzSW5zZXJ0VXBkYXRlQWN0aW9uc1RlbXBsYXRlZCA9IGdldEluc2VydFVwZGF0ZUFjdGlvbnNUZW1wbGF0aW5nKFxuXHRcdHN0YW5kYXJkQWN0aW9uc0NvbnRleHQsXG5cdFx0aXNEcmFmdE9yU3RpY2t5U3VwcG9ydGVkKGNvbnZlcnRlckNvbnRleHQpXG5cdCk7XG5cdGNvbnN0IHN0YW5kYXJkQWN0aW9ucyA9IHtcblx0XHRjdXQ6IGdldFN0YW5kYXJkQWN0aW9uQ3V0KGNvbnZlcnRlckNvbnRleHQsIHN0YW5kYXJkQWN0aW9uc0NvbnRleHQpLFxuXHRcdGNvcHk6IGdldFN0YW5kYXJkQWN0aW9uQ29weShjb252ZXJ0ZXJDb250ZXh0LCBzdGFuZGFyZEFjdGlvbnNDb250ZXh0KSxcblx0XHRjcmVhdGU6IGdldFN0YW5kYXJkQWN0aW9uQ3JlYXRlKGNvbnZlcnRlckNvbnRleHQsIHN0YW5kYXJkQWN0aW9uc0NvbnRleHQpLFxuXHRcdGRlbGV0ZTogZ2V0U3RhbmRhcmRBY3Rpb25EZWxldGUoY29udmVydGVyQ29udGV4dCwgc3RhbmRhcmRBY3Rpb25zQ29udGV4dCksXG5cdFx0cGFzdGU6IGdldFN0YW5kYXJkQWN0aW9uUGFzdGUoY29udmVydGVyQ29udGV4dCwgc3RhbmRhcmRBY3Rpb25zQ29udGV4dCwgaXNJbnNlcnRVcGRhdGVBY3Rpb25zVGVtcGxhdGVkKSxcblx0XHRtYXNzRWRpdDogZ2V0U3RhbmRhcmRBY3Rpb25NYXNzRWRpdChjb252ZXJ0ZXJDb250ZXh0LCBzdGFuZGFyZEFjdGlvbnNDb250ZXh0KSxcblx0XHRpbnNpZ2h0czogZ2V0U3RhbmRhcmRBY3Rpb25JbnNpZ2h0cyhjb252ZXJ0ZXJDb250ZXh0LCBzdGFuZGFyZEFjdGlvbnNDb250ZXh0LCB2aXN1YWxpemF0aW9uUGF0aCksXG5cdFx0Y3JlYXRpb25Sb3c6IGdldENyZWF0aW9uUm93KGNvbnZlcnRlckNvbnRleHQsIHN0YW5kYXJkQWN0aW9uc0NvbnRleHQpXG5cdH07XG5cdGNvbnN0IGNvbmZpZ3VyYXRpb246IFN0YW5kYXJkQWN0aW9uc0NvbmZpZ3VyYXRpb24gPSB7XG5cdFx0Y3JlYXRpb25CZWhhdmlvdXIsXG5cdFx0Y3V0QnV0dG9uVmlzaWJpbGl0eUV4cHJlc3Npb24sXG5cdFx0ZGVsZXRlQnV0dG9uVmlzaWJpbGl0eUV4cHJlc3Npb24sXG5cdFx0bWFzc0VkaXRCdXR0b25WaXNpYmlsaXR5RXhwcmVzc2lvbixcblx0XHRpc0luc2VydFVwZGF0ZUFjdGlvbnNUZW1wbGF0ZWQsXG5cdFx0c3RhbmRhcmRBY3Rpb25zXG5cdH07XG5cblx0aWYgKHN0YW5kYXJkQWN0aW9uc0NvbnRleHQudGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24udHlwZSA9PT0gXCJUcmVlVGFibGVcIikge1xuXHRcdGNvbmZpZ3VyYXRpb24uc3RhbmRhcmRBY3Rpb25zLm1vdmVVcCA9IGdldFN0YW5kYXJkQWN0aW9uTW92ZVVwRG93bihjb252ZXJ0ZXJDb250ZXh0LCBzdGFuZGFyZEFjdGlvbnNDb250ZXh0LCB0cnVlKTtcblx0XHRjb25maWd1cmF0aW9uLnN0YW5kYXJkQWN0aW9ucy5tb3ZlRG93biA9IGdldFN0YW5kYXJkQWN0aW9uTW92ZVVwRG93bihjb252ZXJ0ZXJDb250ZXh0LCBzdGFuZGFyZEFjdGlvbnNDb250ZXh0LCBmYWxzZSk7XG5cdH1cblxuXHRyZXR1cm4gY29uZmlndXJhdGlvbjtcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXRUYWJsZUFubm90YXRpb25Db25maWd1cmF0aW9uKFxuXHRsaW5lSXRlbUFubm90YXRpb246IExpbmVJdGVtIHwgdW5kZWZpbmVkLFxuXHR2aXN1YWxpemF0aW9uUGF0aDogc3RyaW5nLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdHRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uOiBUYWJsZUNvbnRyb2xDb25maWd1cmF0aW9uLFxuXHRjb2x1bW5zOiBUYWJsZUNvbHVtbltdLFxuXHRuYXZpZ2F0aW9uU2V0dGluZ3M6IE5hdmlnYXRpb25TZXR0aW5nc0NvbmZpZ3VyYXRpb24sXG5cdHN0YW5kYXJkQWN0aW9uc0NvbmZpZ3VyYXRpb246IFN0YW5kYXJkQWN0aW9uc0NvbmZpZ3VyYXRpb24sXG5cdHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uPzogUHJlc2VudGF0aW9uVmFyaWFudFR5cGVcbik6IFRhYmxlQW5ub3RhdGlvbkNvbmZpZ3VyYXRpb24ge1xuXHQvLyBOZWVkIHRvIGdldCB0aGUgdGFyZ2V0XG5cdGNvbnN0IHRhYmxlTWFuaWZlc3RTZXR0aW5nczogVGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24gPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0Q29udHJvbENvbmZpZ3VyYXRpb24odmlzdWFsaXphdGlvblBhdGgpO1xuXHRjb25zdCB7IG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGggfSA9IHNwbGl0UGF0aCh2aXN1YWxpemF0aW9uUGF0aCk7XG5cdGNvbnN0IHR5cGVOYW1lUGx1cmFsID0gY29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCkudGFyZ2V0RW50aXR5VHlwZS5hbm5vdGF0aW9ucz8uVUk/LkhlYWRlckluZm8/LlR5cGVOYW1lUGx1cmFsO1xuXHRjb25zdCB0aXRsZSA9IHR5cGVOYW1lUGx1cmFsICYmIGNvbXBpbGVFeHByZXNzaW9uKGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbih0eXBlTmFtZVBsdXJhbCkpO1xuXHRjb25zdCBlbnRpdHlTZXQgPSBjb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKS50YXJnZXRFbnRpdHlTZXQ7XG5cdGNvbnN0IHBhZ2VNYW5pZmVzdFNldHRpbmdzOiBNYW5pZmVzdFdyYXBwZXIgPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpO1xuXHRjb25zdCBoYXNBYnNvbHV0ZVBhdGggPSBuYXZpZ2F0aW9uUHJvcGVydHlQYXRoLmxlbmd0aCA9PT0gMDtcblx0Y29uc3QgcDEzbk1vZGUgPSBnZXRQMTNuTW9kZSh2aXN1YWxpemF0aW9uUGF0aCwgY29udmVydGVyQ29udGV4dCwgdGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24pO1xuXHRjb25zdCBpZCA9IG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGggPyBnZXRUYWJsZUlEKHZpc3VhbGl6YXRpb25QYXRoKSA6IGdldFRhYmxlSUQoY29udmVydGVyQ29udGV4dC5nZXRDb250ZXh0UGF0aCgpLCBcIkxpbmVJdGVtXCIpO1xuXHRjb25zdCB0YXJnZXRDYXBhYmlsaXRpZXMgPSBnZXRDYXBhYmlsaXR5UmVzdHJpY3Rpb24oY29udmVydGVyQ29udGV4dCk7XG5cdGNvbnN0IG5hdmlnYXRpb25UYXJnZXRQYXRoID0gZ2V0TmF2aWdhdGlvblRhcmdldFBhdGgoY29udmVydGVyQ29udGV4dCwgbmF2aWdhdGlvblByb3BlcnR5UGF0aCk7XG5cdGNvbnN0IHNlbGVjdGlvbk1vZGUgPSBnZXRTZWxlY3Rpb25Nb2RlKFxuXHRcdGxpbmVJdGVtQW5ub3RhdGlvbixcblx0XHR2aXN1YWxpemF0aW9uUGF0aCxcblx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdGhhc0Fic29sdXRlUGF0aCxcblx0XHR0YXJnZXRDYXBhYmlsaXRpZXMsXG5cdFx0c3RhbmRhcmRBY3Rpb25zQ29uZmlndXJhdGlvbi5kZWxldGVCdXR0b25WaXNpYmlsaXR5RXhwcmVzc2lvbixcblx0XHRzdGFuZGFyZEFjdGlvbnNDb25maWd1cmF0aW9uLm1hc3NFZGl0QnV0dG9uVmlzaWJpbGl0eUV4cHJlc3Npb24sXG5cdFx0c3RhbmRhcmRBY3Rpb25zQ29uZmlndXJhdGlvbi5jdXRCdXR0b25WaXNpYmlsaXR5RXhwcmVzc2lvblxuXHQpO1xuXHRsZXQgdGhyZXNob2xkID0gbmF2aWdhdGlvblByb3BlcnR5UGF0aCA/IDEwIDogMzA7XG5cdGlmIChwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbj8uTWF4SXRlbXMpIHtcblx0XHR0aHJlc2hvbGQgPSBwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbi5NYXhJdGVtcy52YWx1ZU9mKCk7XG5cdH0gZWxzZSBpZiAodGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24udHlwZSA9PT0gXCJUcmVlVGFibGVcIikge1xuXHRcdC8vIFRvIG1ha2Ugc2Nyb2xsaW5nIHNtb290aCwgd2Ugc2V0IHRoZSB0aHJlc2hvbGQgdmFsdWUgaGlnaGVyIGZvciB0cmVlIHRhYmxlc1xuXHRcdHRocmVzaG9sZCA9IDIwMDtcblx0fSBlbHNlIGlmICh0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbi50eXBlID09PSBcIkdyaWRUYWJsZVwiIHx8IHRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uLnR5cGUgPT09IFwiQW5hbHl0aWNhbFRhYmxlXCIpIHtcblx0XHR0aHJlc2hvbGQgPSAxMDA7XG5cdH1cblx0Y29uc3QgdmFyaWFudE1hbmFnZW1lbnQ6IFZhcmlhbnRNYW5hZ2VtZW50VHlwZSA9IHBhZ2VNYW5pZmVzdFNldHRpbmdzLmdldFZhcmlhbnRNYW5hZ2VtZW50KCk7XG5cdGNvbnN0IGlzU2VhcmNoYWJsZSA9IGlzUGF0aFNlYXJjaGFibGUoY29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCkpO1xuXHRyZXR1cm4ge1xuXHRcdGlkOiBpZCxcblx0XHRhcGlJZDogZ2VuZXJhdGUoW2lkLCBcIlRhYmxlXCJdKSxcblx0XHRlbnRpdHlOYW1lOiBlbnRpdHlTZXQgPyBlbnRpdHlTZXQubmFtZSA6IFwiXCIsXG5cdFx0ZW50aXR5VHlwZU5hbWU6IGVudGl0eVNldCAmJiBlbnRpdHlTZXQuZW50aXR5VHlwZSA/IGVudGl0eVNldC5lbnRpdHlUeXBlLm5hbWUgOiBcIlwiLFxuXHRcdGNvbGxlY3Rpb246IGdldFRhcmdldE9iamVjdFBhdGgoY29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCkpLFxuXHRcdG5hdmlnYXRpb25QYXRoOiBuYXZpZ2F0aW9uUHJvcGVydHlQYXRoLFxuXHRcdHJvdzogX2dldFJvd0NvbmZpZ3VyYXRpb25Qcm9wZXJ0eShcblx0XHRcdGxpbmVJdGVtQW5ub3RhdGlvbixcblx0XHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0XHRuYXZpZ2F0aW9uU2V0dGluZ3MsXG5cdFx0XHRuYXZpZ2F0aW9uVGFyZ2V0UGF0aCxcblx0XHRcdHRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uLnR5cGUsXG5cdFx0XHR0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbi5hbmFseXRpY2FsQ29uZmlndXJhdGlvbj8uYWdncmVnYXRpb25PbkxlYWZMZXZlbFxuXHRcdCksXG5cdFx0cDEzbk1vZGUsXG5cdFx0aXNJbnNlcnRVcGRhdGVBY3Rpb25zVGVtcGxhdGVkOiBzdGFuZGFyZEFjdGlvbnNDb25maWd1cmF0aW9uLmlzSW5zZXJ0VXBkYXRlQWN0aW9uc1RlbXBsYXRlZCxcblx0XHR1cGRhdGFibGVQcm9wZXJ0eVBhdGg6IGdldEN1cnJlbnRFbnRpdHlTZXRVcGRhdGFibGVQYXRoKGNvbnZlcnRlckNvbnRleHQpLFxuXHRcdGRpc3BsYXlNb2RlOiBpc0luRGlzcGxheU1vZGUoY29udmVydGVyQ29udGV4dCwgdHJ1ZSksXG5cdFx0Y3JlYXRlOiBzdGFuZGFyZEFjdGlvbnNDb25maWd1cmF0aW9uLmNyZWF0aW9uQmVoYXZpb3VyLFxuXHRcdHNlbGVjdGlvbk1vZGU6IHNlbGVjdGlvbk1vZGUsXG5cdFx0dmFyaWFudE1hbmFnZW1lbnQ6IHZhcmlhbnRNYW5hZ2VtZW50ID09PSBcIkNvbnRyb2xcIiAmJiAhcDEzbk1vZGUgPyBWYXJpYW50TWFuYWdlbWVudFR5cGUuTm9uZSA6IHZhcmlhbnRNYW5hZ2VtZW50LFxuXHRcdHRocmVzaG9sZDogdGhyZXNob2xkLFxuXHRcdHNvcnRDb25kaXRpb25zOiBnZXRTb3J0Q29uZGl0aW9ucyhjb252ZXJ0ZXJDb250ZXh0LCBwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbiwgY29sdW1ucyksXG5cdFx0dGl0bGU6IHRpdGxlLFxuXHRcdHNlYXJjaGFibGU6XG5cdFx0XHR0YWJsZU1hbmlmZXN0U2V0dGluZ3MudGFibGVTZXR0aW5ncz8uaXNTZWFyY2hhYmxlID09PSBmYWxzZVxuXHRcdFx0XHQ/IGZhbHNlXG5cdFx0XHRcdDogdGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24udHlwZSAhPT0gXCJBbmFseXRpY2FsVGFibGVcIiAmJiAhKGlzQ29uc3RhbnQoaXNTZWFyY2hhYmxlKSAmJiBpc1NlYXJjaGFibGUudmFsdWUgPT09IGZhbHNlKSxcblx0XHRpbml0aWFsRXhwYW5zaW9uTGV2ZWw6IGdldEluaXRpYWxFeHBhbnNpb25MZXZlbChwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbiksXG5cdFx0cmVxdWlyZWRQcm9wZXJ0aWVzOiBnZXRSZXF1aXJlZFByb3BlcnRpZXMoY29udmVydGVyQ29udGV4dClcblx0XHRcdC5maWx0ZXIoKHByb3BlcnR5KSA9PiBwcm9wZXJ0eT8uJHRhcmdldD8udHlwZSAhPT0gXCJFZG0uQm9vbGVhblwiKVxuXHRcdFx0Lm1hcCgocHJvcGVydHkpID0+IHByb3BlcnR5LnZhbHVlKVxuXHR9O1xufVxuXG4vKipcbiAqIFNwbGl0cyB0aGUgdmlzdWFsaXphdGlvbiBwYXRoIGludG8gbmF2aWdhdGlvbiBwcm9wZXJ0eSBwYXRoIGFuZCBhbm5vdGF0aW9uLlxuICogQHBhcmFtIHZpc3VhbGl6YXRpb25QYXRoXG4gKiBAcmV0dXJucyBUaGUgc3BsaXQgcGF0aFxuICovXG5leHBvcnQgZnVuY3Rpb24gc3BsaXRQYXRoKHZpc3VhbGl6YXRpb25QYXRoOiBzdHJpbmcpOiB7IG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGg6IHN0cmluZzsgYW5ub3RhdGlvblBhdGg6IHN0cmluZyB9IHtcblx0Y29uc3QgW3RhcmdldE5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgsIGFubm90YXRpb25QYXRoXSA9IHZpc3VhbGl6YXRpb25QYXRoLnNwbGl0KFwiQFwiKTtcblx0bGV0IG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGggPSB0YXJnZXROYXZpZ2F0aW9uUHJvcGVydHlQYXRoO1xuXHRpZiAobmF2aWdhdGlvblByb3BlcnR5UGF0aC5sYXN0SW5kZXhPZihcIi9cIikgPT09IG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgubGVuZ3RoIC0gMSkge1xuXHRcdC8vIERyb3AgdHJhaWxpbmcgc2xhc2hcblx0XHRuYXZpZ2F0aW9uUHJvcGVydHlQYXRoID0gbmF2aWdhdGlvblByb3BlcnR5UGF0aC5zdWJzdHJpbmcoMCwgbmF2aWdhdGlvblByb3BlcnR5UGF0aC5sZW5ndGggLSAxKTtcblx0fVxuXHRyZXR1cm4geyBuYXZpZ2F0aW9uUHJvcGVydHlQYXRoLCBhbm5vdGF0aW9uUGF0aCB9O1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldFNlbGVjdGlvblZhcmlhbnRDb25maWd1cmF0aW9uKFxuXHRzZWxlY3Rpb25WYXJpYW50UGF0aDogc3RyaW5nLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD5cbik6IFNlbGVjdGlvblZhcmlhbnRDb25maWd1cmF0aW9uIHwgdW5kZWZpbmVkIHtcblx0Y29uc3QgcmVzb2x2ZWRUYXJnZXQgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGVBbm5vdGF0aW9uKHNlbGVjdGlvblZhcmlhbnRQYXRoKTtcblx0Y29uc3Qgc2VsZWN0aW9uOiBTZWxlY3Rpb25WYXJpYW50ID0gcmVzb2x2ZWRUYXJnZXQuYW5ub3RhdGlvbiBhcyBTZWxlY3Rpb25WYXJpYW50O1xuXHRpZiAoc2VsZWN0aW9uKSB7XG5cdFx0Y29uc3QgcHJvcGVydHlOYW1lczogc3RyaW5nW10gPSBbXTtcblx0XHRzZWxlY3Rpb24uU2VsZWN0T3B0aW9ucz8uZm9yRWFjaCgoc2VsZWN0T3B0aW9uOiBTZWxlY3RPcHRpb25UeXBlKSA9PiB7XG5cdFx0XHRjb25zdCBwcm9wZXJ0eU5hbWUgPSBzZWxlY3RPcHRpb24uUHJvcGVydHlOYW1lO1xuXHRcdFx0Y29uc3QgcHJvcGVydHlQYXRoOiBzdHJpbmcgPSBwcm9wZXJ0eU5hbWU/LnZhbHVlID8/IFwiXCI7XG5cdFx0XHRpZiAoIXByb3BlcnR5TmFtZXMuaW5jbHVkZXMocHJvcGVydHlQYXRoKSkge1xuXHRcdFx0XHRwcm9wZXJ0eU5hbWVzLnB1c2gocHJvcGVydHlQYXRoKTtcblx0XHRcdH1cblx0XHR9KTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0dGV4dDogc2VsZWN0aW9uPy5UZXh0Py50b1N0cmluZygpLFxuXHRcdFx0cHJvcGVydHlOYW1lczogcHJvcGVydHlOYW1lc1xuXHRcdH07XG5cdH1cblx0cmV0dXJuIHVuZGVmaW5lZDtcbn1cbmZ1bmN0aW9uIF9nZXRGdWxsU2NyZWVuQmFzZWRPbkRldmljZShcblx0dGFibGVTZXR0aW5nczogVGFibGVNYW5pZmVzdFNldHRpbmdzQ29uZmlndXJhdGlvbixcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHRpc0lwaG9uZTogYm9vbGVhblxuKTogYm9vbGVhbiB7XG5cdC8vIElmIGVuYWJsZUZ1bGxTY3JlZW4gaXMgbm90IHNldCwgdXNlIGFzIGRlZmF1bHQgdHJ1ZSBvbiBwaG9uZSBhbmQgZmFsc2Ugb3RoZXJ3aXNlXG5cdGxldCBlbmFibGVGdWxsU2NyZWVuID0gdGFibGVTZXR0aW5ncy5lbmFibGVGdWxsU2NyZWVuID8/IGlzSXBob25lO1xuXHQvLyBNYWtlIHN1cmUgdGhhdCBlbmFibGVGdWxsU2NyZWVuIGlzIG5vdCBzZXQgb24gTGlzdFJlcG9ydCBmb3IgZGVza3RvcCBvciB0YWJsZXRcblx0aWYgKCFpc0lwaG9uZSAmJiBlbmFibGVGdWxsU2NyZWVuICYmIGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCkgPT09IFRlbXBsYXRlVHlwZS5MaXN0UmVwb3J0KSB7XG5cdFx0ZW5hYmxlRnVsbFNjcmVlbiA9IGZhbHNlO1xuXHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0RGlhZ25vc3RpY3MoKS5hZGRJc3N1ZShJc3N1ZUNhdGVnb3J5Lk1hbmlmZXN0LCBJc3N1ZVNldmVyaXR5LkxvdywgSXNzdWVUeXBlLkZVTExTQ1JFRU5NT0RFX05PVF9PTl9MSVNUUkVQT1JUKTtcblx0fVxuXHRyZXR1cm4gZW5hYmxlRnVsbFNjcmVlbjtcbn1cbmZ1bmN0aW9uIF9nZXRNdWx0aVNlbGVjdE1vZGUoXG5cdHRhYmxlU2V0dGluZ3M6IFRhYmxlTWFuaWZlc3RTZXR0aW5nc0NvbmZpZ3VyYXRpb24sXG5cdHRhYmxlVHlwZTogVGFibGVUeXBlLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD5cbik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdGxldCBtdWx0aVNlbGVjdE1vZGU6IHN0cmluZyB8IHVuZGVmaW5lZDtcblx0aWYgKHRhYmxlVHlwZSAhPT0gXCJSZXNwb25zaXZlVGFibGVcIikge1xuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblx0c3dpdGNoIChjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpKSB7XG5cdFx0Y2FzZSBUZW1wbGF0ZVR5cGUuTGlzdFJlcG9ydDpcblx0XHRjYXNlIFRlbXBsYXRlVHlwZS5PYmplY3RQYWdlOlxuXHRcdFx0bXVsdGlTZWxlY3RNb2RlID0gdGFibGVTZXR0aW5ncy5zZWxlY3RBbGwgPT09IGZhbHNlID8gXCJDbGVhckFsbFwiIDogXCJEZWZhdWx0XCI7XG5cdFx0XHRpZiAoY29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSA9PT0gVGVtcGxhdGVUeXBlLk9iamVjdFBhZ2UgJiYgY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKS51c2VJY29uVGFiQmFyKCkpIHtcblx0XHRcdFx0bXVsdGlTZWxlY3RNb2RlID0gIXRhYmxlU2V0dGluZ3Muc2VsZWN0QWxsID8gXCJDbGVhckFsbFwiIDogXCJEZWZhdWx0XCI7XG5cdFx0XHR9XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFRlbXBsYXRlVHlwZS5BbmFseXRpY2FsTGlzdFBhZ2U6XG5cdFx0XHRtdWx0aVNlbGVjdE1vZGUgPSAhdGFibGVTZXR0aW5ncy5zZWxlY3RBbGwgPyBcIkNsZWFyQWxsXCIgOiBcIkRlZmF1bHRcIjtcblx0XHRcdGJyZWFrO1xuXHRcdGRlZmF1bHQ6XG5cdH1cblx0cmV0dXJuIG11bHRpU2VsZWN0TW9kZTtcbn1cbmZ1bmN0aW9uIF9nZXRUYWJsZU1vZGUoXG5cdHRhYmxlVHlwZTogVGFibGVUeXBlLFxuXHR0YWJsZVNldHRpbmdzOiBUYWJsZU1hbmlmZXN0U2V0dGluZ3NDb25maWd1cmF0aW9uLFxuXHRpc1RlbXBsYXRlTGlzdFJlcG9ydDogYm9vbGVhblxuKTogeyByb3dDb3VudE1vZGU/OiBUYWJsZVJvd0NvdW50TW9kZTsgcm93Q291bnQ/OiBudW1iZXIgfSB7XG5cdGlmICh0YWJsZVR5cGUgIT09IFwiUmVzcG9uc2l2ZVRhYmxlXCIpIHtcblx0XHRpZiAoaXNUZW1wbGF0ZUxpc3RSZXBvcnQpIHtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdHJvd0NvdW50TW9kZTogXCJBdXRvXCIsXG5cdFx0XHRcdHJvd0NvdW50OiAzXG5cdFx0XHR9O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRyb3dDb3VudE1vZGU6IHRhYmxlU2V0dGluZ3Mucm93Q291bnRNb2RlID8/IFwiRml4ZWRcIixcblx0XHRcdFx0cm93Q291bnQ6IHRhYmxlU2V0dGluZ3Mucm93Q291bnQgPz8gKHRhYmxlVHlwZSA9PT0gXCJHcmlkVGFibGVcIiA/IDUgOiAxMClcblx0XHRcdH07XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdHJldHVybiB7fTtcblx0fVxufVxuZnVuY3Rpb24gX2dldENvbmRlbnNlZFRhYmxlTGF5b3V0KF90YWJsZVR5cGU6IFRhYmxlVHlwZSwgX3RhYmxlU2V0dGluZ3M6IFRhYmxlTWFuaWZlc3RTZXR0aW5nc0NvbmZpZ3VyYXRpb24pOiBib29sZWFuIHtcblx0cmV0dXJuIF90YWJsZVNldHRpbmdzLmNvbmRlbnNlZFRhYmxlTGF5b3V0ICE9PSB1bmRlZmluZWQgJiYgX3RhYmxlVHlwZSAhPT0gXCJSZXNwb25zaXZlVGFibGVcIlxuXHRcdD8gX3RhYmxlU2V0dGluZ3MuY29uZGVuc2VkVGFibGVMYXlvdXRcblx0XHQ6IGZhbHNlO1xufVxuZnVuY3Rpb24gX2dldFRhYmxlU2VsZWN0aW9uTGltaXQoX3RhYmxlU2V0dGluZ3M6IFRhYmxlTWFuaWZlc3RTZXR0aW5nc0NvbmZpZ3VyYXRpb24pOiBudW1iZXIge1xuXHRyZXR1cm4gX3RhYmxlU2V0dGluZ3Muc2VsZWN0QWxsID09PSB0cnVlIHx8IF90YWJsZVNldHRpbmdzLnNlbGVjdGlvbkxpbWl0ID09PSAwID8gMCA6IF90YWJsZVNldHRpbmdzLnNlbGVjdGlvbkxpbWl0IHx8IDIwMDtcbn1cbmZ1bmN0aW9uIF9nZXRUYWJsZUlubGluZUNyZWF0aW9uUm93Q291bnQoX3RhYmxlU2V0dGluZ3M6IFRhYmxlTWFuaWZlc3RTZXR0aW5nc0NvbmZpZ3VyYXRpb24pOiBudW1iZXIge1xuXHRyZXR1cm4gX3RhYmxlU2V0dGluZ3MuY3JlYXRpb25Nb2RlPy5pbmxpbmVDcmVhdGlvblJvd0NvdW50ID8gX3RhYmxlU2V0dGluZ3MuY3JlYXRpb25Nb2RlPy5pbmxpbmVDcmVhdGlvblJvd0NvdW50IDogMTtcbn1cblxuZnVuY3Rpb24gX2dldEVuYWJsZUV4cG9ydChcblx0dGFibGVTZXR0aW5nczogVGFibGVNYW5pZmVzdFNldHRpbmdzQ29uZmlndXJhdGlvbixcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHRlbmFibGVQYXN0ZTogYm9vbGVhblxuKTogYm9vbGVhbiB7XG5cdHJldHVybiB0YWJsZVNldHRpbmdzLmVuYWJsZUV4cG9ydCAhPT0gdW5kZWZpbmVkXG5cdFx0PyB0YWJsZVNldHRpbmdzLmVuYWJsZUV4cG9ydFxuXHRcdDogY29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSAhPT0gXCJPYmplY3RQYWdlXCIgfHwgZW5hYmxlUGFzdGU7XG59XG5mdW5jdGlvbiBfZ2V0RnJvemVuQ29sdW1uQ291bnQodGFibGVTZXR0aW5nczogVGFibGVNYW5pZmVzdFNldHRpbmdzQ29uZmlndXJhdGlvbik6IG51bWJlciB8IHVuZGVmaW5lZCB7XG5cdHJldHVybiB0YWJsZVNldHRpbmdzLmZyb3plbkNvbHVtbkNvdW50O1xufVxuXG4vKipcbiAqIEdldCB0aGUgd2lkdGhJbmNsdWRpbmdDb2x1bW5IZWFkZXIgdmFsdWUgZnJvbSB0aGUgdGFibGVTZXR0aW5ncyBpZiBpdCBleGlzdHMuXG4gKiBAcGFyYW0gdGFibGVTZXR0aW5ncyBUYWJsZVNldHRpbmdzIE9iamVjdFxuICogQHJldHVybnMgUmV0dXJucyB0aGUgdmFsdWUgb2Ygd2lkdGhJbmNsdWRpbmdDb2x1bW5IZWFkZXIgb3IgZmFsc2VcbiAqL1xuZnVuY3Rpb24gX2dldFdpZHRoSW5jbHVkaW5nQ29sdW1uSGVhZGVyKHRhYmxlU2V0dGluZ3M6IFRhYmxlTWFuaWZlc3RTZXR0aW5nc0NvbmZpZ3VyYXRpb24pOiBib29sZWFuIHtcblx0cmV0dXJuIHRhYmxlU2V0dGluZ3Mud2lkdGhJbmNsdWRpbmdDb2x1bW5IZWFkZXIgPz8gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGdldEZpbHRlckNvbmZpZ3VyYXRpb24oXG5cdHRhYmxlU2V0dGluZ3M6IFRhYmxlTWFuaWZlc3RTZXR0aW5nc0NvbmZpZ3VyYXRpb24sXG5cdGxpbmVJdGVtQW5ub3RhdGlvbjogTGluZUl0ZW0sXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0c2VsZWN0aW9uVmFyaWFudEFubm90YXRpb246IFNlbGVjdGlvblZhcmlhbnRUeXBlIHwgdW5kZWZpbmVkXG4pOiB7XG5cdGZpbHRlcnM6IFBhcnRpYWw8UmVjb3JkPFwicXVpY2tGaWx0ZXJzXCIgfCBcImhpZGRlbkZpbHRlcnNcIiwgVGFibGVGaWx0ZXJzQ29uZmlndXJhdGlvbj4+O1xuXHRoZWFkZXJWaXNpYmxlOiBib29sZWFuO1xufSB7XG5cdGxldCBoaWRlVGFibGVUaXRsZSA9IGZhbHNlO1xuXHRjb25zdCBmaWx0ZXJzOiBQYXJ0aWFsPFJlY29yZDxcInF1aWNrRmlsdGVyc1wiIHwgXCJoaWRkZW5GaWx0ZXJzXCIsIFRhYmxlRmlsdGVyc0NvbmZpZ3VyYXRpb24+PiA9IHt9O1xuXHRjb25zdCB0YXJnZXRFbnRpdHlUeXBlID0gY29udmVydGVyQ29udGV4dC5nZXRBbm5vdGF0aW9uRW50aXR5VHlwZShsaW5lSXRlbUFubm90YXRpb24pO1xuXHRpZiAodGFibGVTZXR0aW5ncy5xdWlja1ZhcmlhbnRTZWxlY3Rpb24pIHtcblx0XHRjb25zdCBxdWlja0ZpbHRlclBhdGhzID0gKHRhYmxlU2V0dGluZ3MucXVpY2tWYXJpYW50U2VsZWN0aW9uLnBhdGhzID8/IFtdKS5yZWR1Y2UoXG5cdFx0XHQoZmlsdGVyUGF0aHM6IHsgYW5ub3RhdGlvblBhdGg6IHN0cmluZyB9W10sIHBhdGgpID0+IHtcblx0XHRcdFx0aWYgKHRhcmdldEVudGl0eVR5cGUucmVzb2x2ZVBhdGgocGF0aC5hbm5vdGF0aW9uUGF0aCkpIHtcblx0XHRcdFx0XHRmaWx0ZXJQYXRocy5wdXNoKHsgYW5ub3RhdGlvblBhdGg6IHBhdGguYW5ub3RhdGlvblBhdGggfSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIGZpbHRlclBhdGhzO1xuXHRcdFx0fSxcblx0XHRcdFtdXG5cdFx0KTtcblx0XHRpZiAocXVpY2tGaWx0ZXJQYXRocy5sZW5ndGgpIHtcblx0XHRcdGZpbHRlcnMucXVpY2tGaWx0ZXJzID0ge1xuXHRcdFx0XHRzaG93Q291bnRzOiB0YWJsZVNldHRpbmdzLnF1aWNrVmFyaWFudFNlbGVjdGlvbi5zaG93Q291bnRzLFxuXHRcdFx0XHRwYXRoczogcXVpY2tGaWx0ZXJQYXRoc1xuXHRcdFx0fTtcblx0XHR9XG5cdH1cblx0aWYgKHNlbGVjdGlvblZhcmlhbnRBbm5vdGF0aW9uKSB7XG5cdFx0LyoqXG5cdFx0ICogUHJvdmlkZSBTZWxlY3Rpb24gVmFyaWFudCB0byBoaWRkZW5GaWx0ZXJzIGluIG9yZGVyIHRvIHNldCB0aGUgU1YgZmlsdGVycyB0byB0aGUgdGFibGUuXG5cdFx0ICogTURDIFRhYmxlIG92ZXJyaWRlcyBiaW5kaW5nIEZpbHRlciBhbmQgZnJvbSBTQVAgRkUgdGhlIG9ubHkgbWV0aG9kIHdoZXJlIHdlIGFyZSBhYmxlIHRvIGFkZFxuXHRcdCAqIGFkZGl0aW9uYWwgZmlsdGVyIGlzICdyZWJpbmRUYWJsZScgaW50byBUYWJsZSBkZWxlZ2F0ZS5cblx0XHQgKiBUbyBhdm9pZCBpbXBsZW1lbnRpbmcgc3BlY2lmaWMgTFIgZmVhdHVyZSB0byBTQVAgRkUgTWFjcm8gVGFibGUsIHRoZSBmaWx0ZXIocykgIG5vdCBtYW5hZ2VkIGJ5IHRoZSBGaWx0ZXJCYXJcblx0XHQgKiBjYW4gYmUgcGFzc2VkIHRvIG1hY3JvIHRhYmxlIHZpYSBwYXJhbWV0ZXIvY29udGV4dCBuYW1lZCBmaWx0ZXJzIGFuZCBrZXkgaGlkZGVuRmlsdGVycy5cblx0XHQgKi9cblx0XHRmaWx0ZXJzLmhpZGRlbkZpbHRlcnMgPSB7IHBhdGhzOiBbeyBhbm5vdGF0aW9uUGF0aDogYEAke3NlbGVjdGlvblZhcmlhbnRBbm5vdGF0aW9uLmZ1bGx5UXVhbGlmaWVkTmFtZS5zcGxpdChcIkBcIilbMV19YCB9XSB9O1xuXHR9XG5cblx0aGlkZVRhYmxlVGl0bGUgPSAhIXRhYmxlU2V0dGluZ3MucXVpY2tWYXJpYW50U2VsZWN0aW9uPy5oaWRlVGFibGVUaXRsZTtcblx0cmV0dXJuIHtcblx0XHRmaWx0ZXJzOiBmaWx0ZXJzLFxuXHRcdGhlYWRlclZpc2libGU6ICEoZmlsdGVycz8ucXVpY2tGaWx0ZXJzICYmIGhpZGVUYWJsZVRpdGxlKVxuXHR9O1xufVxuXG4vKipcbiAqIERldGVybWluZXMgaWYgdGhlIGFjdGlvbiB3aWxsIGhhdmUgYW4gZXhwcmVzc2lvbiBmb3IgZW5hYmxlbWVudCBnZW5lcmF0ZWQuXG4gKiBAcGFyYW0gZGF0YUZpZWxkIFRoZSBkYXRhRmllbGQgY29udGFpbmluZyBhbiBhY3Rpb25cbiAqIEBwYXJhbSBzRW50aXR5VHlwZSBUaGUgY3VycmVudCBlbnRpdHkgZm9yIHRlbXBsYXRpbmdcbiAqIEByZXR1cm5zIFdoZXRoZXIgYW4gZXhwcmVzc2lvbiBmb3IgZW5hYmxlbWVudCBpcyB0byBiZSBnZW5lcmF0ZWRcbiAqL1xuZnVuY3Rpb24gX3VzZUVuYWJsZWRFeHByZXNzaW9uKGRhdGFGaWVsZDogRGF0YUZpZWxkRm9yQWN0aW9uVHlwZXMsIHNFbnRpdHlUeXBlOiBzdHJpbmcpOiBib29sZWFuIHtcblx0Ly8gVGhlcmUgYXJlIHRocmVlIGNhc2VzIHdoZW4gYSB0YWJsZSBhY3Rpb24gaGFzIGFuIE9wZXJhdGlvbkF2YWlsYWJsZSB0aGF0IGxlYWRzIHRvIGFuIGVuYWJsZW1lbnQgZXhwcmVzc2lvblxuXHQvLyBhbmQgaXMgbm90IGRlcGVuZGVudCB1cG9uIHRoZSB0YWJsZSBlbnRyaWVzLlxuXHQvLyAxLiBBbiBhY3Rpb24gd2l0aCBhbiBvdmVybG9hZCwgdGhhdCBpcyBleGVjdXRlZCBhZ2FpbnN0IGEgcGFyZW50IGVudGl0eS5cblx0Ly8gMi4gQW4gdW5ib3VuZCBhY3Rpb25cblx0Ly8gMy4gQSBzdGF0aWMgYWN0aW9uICh0aGF0IGlzLCBib3VuZCB0byBhIGNvbGxlY3Rpb24pXG5cdGxldCB1c2VFbmFibGVkRXhwcmVzc2lvbiA9IGZhbHNlO1xuXHRpZiAoZGF0YUZpZWxkLkFjdGlvblRhcmdldD8uYW5ub3RhdGlvbnM/LkNvcmU/Lk9wZXJhdGlvbkF2YWlsYWJsZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0Ly8gVW5ib3VuZCBhY3Rpb24uIElzIHJlY29nbmlzZWQsIGJ1dCBnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24gY2hlY2tzIGZvciBpc0JvdW5kID0gdHJ1ZSwgc28gbm90IGdlbmVyYXRlZC5cblx0XHRjb25zdCBpc0JvdW5kID0gZGF0YUZpZWxkLkFjdGlvblRhcmdldD8uaXNCb3VuZDtcblx0XHQvL292ZXJsb2FkIGFjdGlvblxuXHRcdGNvbnN0IG92ZXJsb2FkQWN0aW9uID0gaXNCb3VuZCAmJiBkYXRhRmllbGQuQWN0aW9uVGFyZ2V0Py5zb3VyY2VUeXBlICE9PSBzRW50aXR5VHlwZTtcblx0XHQvL3N0YXRpYyBhY3Rpb25cblx0XHRjb25zdCBzdGF0aWNBY3Rpb24gPSBkYXRhRmllbGQuQWN0aW9uVGFyZ2V0Py5wYXJhbWV0ZXJzWzBdPy5pc0NvbGxlY3Rpb247XG5cdFx0Ly9jb3B5IGFjdGlvblxuXHRcdGlmICghaXNCb3VuZCB8fCBvdmVybG9hZEFjdGlvbiB8fCBzdGF0aWNBY3Rpb24pIHtcblx0XHRcdHVzZUVuYWJsZWRFeHByZXNzaW9uID0gdHJ1ZTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIHVzZUVuYWJsZWRFeHByZXNzaW9uO1xufVxuXG4vKipcbiAqIFVwZGF0ZXMgdGhlIHRhYmxlIGNvbnRyb2wgY29uZmlndXJhdGlvbiB3aXRoIFRyZWUtVGFibGUgc3BlY2lmaWMgaW5mb3JtYXRpb24uXG4gKiBAcGFyYW0gdGFibGVDb25maWd1cmF0aW9uIFRoZSB0YWJsZSBjb25maWd1cmF0aW9uXG4gKiBAcGFyYW0gdGFibGVTZXR0aW5ncyBTZXR0aW5ncyBmcm9tIHRoZSBtYW5pZmVzdFxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGluc3RhbmNlIG9mIHRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICovXG5mdW5jdGlvbiB1cGRhdGVUcmVlVGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24oXG5cdHRhYmxlQ29uZmlndXJhdGlvbjogVGFibGVDb250cm9sQ29uZmlndXJhdGlvbixcblx0dGFibGVTZXR0aW5nczogVGFibGVNYW5pZmVzdFNldHRpbmdzQ29uZmlndXJhdGlvbixcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dFxuKTogdm9pZCB7XG5cdGNvbnN0IGRhdGFNb2RlbE9iamVjdFBhdGggPSBjb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKTtcblx0dGFibGVDb25maWd1cmF0aW9uLmhpZXJhcmNoeVF1YWxpZmllciA9IHRhYmxlU2V0dGluZ3MuaGllcmFyY2h5UXVhbGlmaWVyO1xuXHRjb25zdCBoaWVyYXJjaHlQYXJlbnROYXZpZ2F0aW9uUHJvcGVydHlQYXRoID0gZ2V0SGllcmFyY2h5UGFyZW50TmF2aWdhdGlvblByb3BlcnR5UGF0aChcblx0XHRkYXRhTW9kZWxPYmplY3RQYXRoLFxuXHRcdHRhYmxlQ29uZmlndXJhdGlvbi5oaWVyYXJjaHlRdWFsaWZpZXIhXG5cdCk7XG5cdGNvbnN0IG5vblVwZGF0YWJsZU5hdmlnYXRpb25Qcm9wZXJ0aWVzID0gZ2V0Tm9uVXBkYXRhYmxlTmF2aWdhdGlvblByb3BlcnRpZXMoZGF0YU1vZGVsT2JqZWN0UGF0aCk7XG5cdHRhYmxlQ29uZmlndXJhdGlvbi5pc0hpZXJhcmNoeVBhcmVudE5vZGVVcGRhdGFibGUgPSAhbm9uVXBkYXRhYmxlTmF2aWdhdGlvblByb3BlcnRpZXM/LmluY2x1ZGVzKGhpZXJhcmNoeVBhcmVudE5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgpO1xuXHR0YWJsZUNvbmZpZ3VyYXRpb24uaXNOb2RlTW92YWJsZSA9IGdldEN1c3RvbUZ1bmN0aW9uSW5mbyh0YWJsZVNldHRpbmdzLmlzTm9kZU1vdmFibGUsIHRhYmxlQ29uZmlndXJhdGlvbik7XG5cdHRhYmxlQ29uZmlndXJhdGlvbi5pc05vZGVDb3B5YWJsZSA9IGdldEN1c3RvbUZ1bmN0aW9uSW5mbyh0YWJsZVNldHRpbmdzLmlzTm9kZUNvcHlhYmxlLCB0YWJsZUNvbmZpZ3VyYXRpb24pO1xuXHR0YWJsZUNvbmZpZ3VyYXRpb24uaXNNb3ZlVG9Qb3NpdGlvbkFsbG93ZWQgPSBnZXRDdXN0b21GdW5jdGlvbkluZm8odGFibGVTZXR0aW5ncy5pc01vdmVUb1Bvc2l0aW9uQWxsb3dlZCwgdGFibGVDb25maWd1cmF0aW9uKTtcblx0dGFibGVDb25maWd1cmF0aW9uLmlzQ29weVRvUG9zaXRpb25BbGxvd2VkID0gZ2V0Q3VzdG9tRnVuY3Rpb25JbmZvKHRhYmxlU2V0dGluZ3MuaXNDb3B5VG9Qb3NpdGlvbkFsbG93ZWQsIHRhYmxlQ29uZmlndXJhdGlvbik7XG5cdHRhYmxlQ29uZmlndXJhdGlvbi5jcmVhdGVFbmFibGVtZW50ID0gZ2V0Q3VzdG9tRnVuY3Rpb25JbmZvKHRhYmxlU2V0dGluZ3MuY3JlYXRpb25Nb2RlPy5pc0NyZWF0ZUVuYWJsZWQsIHRhYmxlQ29uZmlndXJhdGlvbik7XG5cblx0aWYgKHRhYmxlU2V0dGluZ3MuY3JlYXRpb25Nb2RlPy5ub2RlVHlwZT8ucHJvcGVydHlOYW1lICYmIHRhYmxlU2V0dGluZ3MuY3JlYXRpb25Nb2RlPy5ub2RlVHlwZT8udmFsdWVzKSB7XG5cdFx0Y29uc3QgdmFsdWVzID0gdGFibGVTZXR0aW5ncy5jcmVhdGlvbk1vZGUubm9kZVR5cGUudmFsdWVzO1xuXHRcdHRhYmxlQ29uZmlndXJhdGlvbi5ub2RlVHlwZSA9IHtcblx0XHRcdHByb3BlcnR5TmFtZTogdGFibGVTZXR0aW5ncy5jcmVhdGlvbk1vZGUubm9kZVR5cGUucHJvcGVydHlOYW1lLFxuXHRcdFx0dmFsdWVzOiBPYmplY3Qua2V5cyh2YWx1ZXMpLm1hcCgodmFsdWUpID0+IHtcblx0XHRcdFx0Y29uc3Qgbm9kZVR5cGVJbmZvID0gdmFsdWVzW3ZhbHVlXTtcblxuXHRcdFx0XHRpZiAodHlwZW9mIG5vZGVUeXBlSW5mbyA9PT0gXCJzdHJpbmdcIikge1xuXHRcdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0XHR2YWx1ZSxcblx0XHRcdFx0XHRcdHRleHQ6IG5vZGVUeXBlSW5mb1xuXHRcdFx0XHRcdH07XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHRcdHZhbHVlLFxuXHRcdFx0XHRcdFx0dGV4dDogbm9kZVR5cGVJbmZvLmxhYmVsLFxuXHRcdFx0XHRcdFx0Y3JlYXRpb25EaWFsb2dGaWVsZHM6XG5cdFx0XHRcdFx0XHRcdHRhYmxlQ29uZmlndXJhdGlvbi5jcmVhdGlvbk1vZGUgPT09IENyZWF0aW9uTW9kZS5DcmVhdGlvbkRpYWxvZ1xuXHRcdFx0XHRcdFx0XHRcdD8gZ2V0RmllbGRMaXN0KG5vZGVUeXBlSW5mby5jcmVhdGlvbkZpZWxkcywgY29udmVydGVyQ29udGV4dClcblx0XHRcdFx0XHRcdFx0XHQ6IHVuZGVmaW5lZFxuXHRcdFx0XHRcdH07XG5cdFx0XHRcdH1cblx0XHRcdH0pXG5cdFx0fTtcblx0fVxuXG5cdC8vIENyZWF0ZSBpbiBwbGFjZVxuXHRpZiAodGFibGVTZXR0aW5ncy5jcmVhdGlvbk1vZGU/LmNyZWF0ZUluUGxhY2UpIHtcblx0XHR0YWJsZUNvbmZpZ3VyYXRpb24uY3JlYXRlSW5QbGFjZSA9IHRydWU7XG5cdH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEN1c3RvbUZ1bmN0aW9uSW5mbyhcblx0dmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCxcblx0dGFibGVDb25maWd1cmF0aW9uOiBUYWJsZUNvbnRyb2xDb25maWd1cmF0aW9uXG4pOiBFeHRlcm5hbE1ldGhvZENvbmZpZyB8IHVuZGVmaW5lZCB7XG5cdGlmICghdmFsdWUpIHtcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cdGNvbnN0IGxhc3REb3RJbmRleCA9IHZhbHVlLmxhc3RJbmRleE9mKFwiLlwiKSB8fCAtMTtcblx0Y29uc3QgbW9kdWxlTmFtZSA9IHZhbHVlLnN1YnN0cmluZygwLCBsYXN0RG90SW5kZXgpLnJlcGxhY2UoL1xcLi9naSwgXCIvXCIpO1xuXHRjb25zdCBtZXRob2ROYW1lID0gdmFsdWUuc3Vic3RyaW5nKGxhc3REb3RJbmRleCArIDEpO1xuXG5cdC8vIEFkZCB0aGUgY3VzdG9tIG1vZHVsZSBpbiB0aGUgbGlzdCBvZiByZXF1aXJlZCBtb2R1bGVzIGlmIG5lY2Vzc2FyeVxuXHRpZiAoIW1vZHVsZU5hbWUuc3RhcnRzV2l0aChcIi9leHRlbnNpb24vXCIpKSB7XG5cdFx0aWYgKCF0YWJsZUNvbmZpZ3VyYXRpb24uYWRkaXRpb25hbFJlcXVpcmVkTW9kdWxlcykge1xuXHRcdFx0dGFibGVDb25maWd1cmF0aW9uLmFkZGl0aW9uYWxSZXF1aXJlZE1vZHVsZXMgPSBbbW9kdWxlTmFtZV07XG5cdFx0fSBlbHNlIGlmICghdGFibGVDb25maWd1cmF0aW9uLmFkZGl0aW9uYWxSZXF1aXJlZE1vZHVsZXMuaW5jbHVkZXMobW9kdWxlTmFtZSkpIHtcblx0XHRcdHRhYmxlQ29uZmlndXJhdGlvbi5hZGRpdGlvbmFsUmVxdWlyZWRNb2R1bGVzLnB1c2gobW9kdWxlTmFtZSk7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHsgbW9kdWxlTmFtZSwgbWV0aG9kTmFtZSB9O1xufVxuXG4vKipcbiAqIFJldHJpZXZlIHRoZSB0YWJsZSBjb250cm9sIGNvbmZpZ3VyYXRpb24gb3B0aW1pc3RpYyBiYXRjaCBpbmZvcm1hdGlvbi5cbiAqIEBwYXJhbSB0YWJsZU1hbmlmZXN0U2V0dGluZ3MgVGhlIHRhYmxlIGNvbmZpZ3VyYXRpb25cbiBAcmV0dXJucyBUcnVlIGlmIE9wdGltaXN0aWMgYmF0Y2ggbW9kZSBpcyBkaXNhYmxlZFxuICovXG5mdW5jdGlvbiBnZXRPcHRpbWlzdGljQmF0Y2hTZXR0aW5nc0Zyb21NYW5pZmVzdCh0YWJsZU1hbmlmZXN0U2V0dGluZ3M6IFRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uKTogYm9vbGVhbiB8IHVuZGVmaW5lZCB7XG5cdC8vIE9wdGltaXN0aWMgYmF0Y2ggaXMgc2V0IGJ5IGRlZmF1bHRcblx0cmV0dXJuIHRhYmxlTWFuaWZlc3RTZXR0aW5ncz8udGFibGVTZXR0aW5ncz8uZGlzYWJsZVJlcXVlc3RDYWNoZTtcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBzZXR0aW5ncyBjb21pbmcgZnJvbSB0aGUgbWFuaWZlc3QgcmVsYXRlZCB0byB0aGUgbWFzcyBlZGl0IGRpYWxvZy5cbiAqIEBwYXJhbSB0YWJsZVNldHRpbmdzIFRoZSB0YWJsZSBjb25maWd1cmF0aW9uXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgaW5zdGFuY2Ugb2YgdGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcmV0dXJucyBUaGUgbWFzcyBlZGl0IGNvbmZpZ3VyYXRpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRNYXNzRWRpdFNldHRpbmdzKFxuXHR0YWJsZVNldHRpbmdzOiBUYWJsZU1hbmlmZXN0U2V0dGluZ3NDb25maWd1cmF0aW9uLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD5cbik6IE1hc3NFZGl0VGFibGVDb25maWd1cmF0aW9uIHtcblx0Y29uc3QgZGVmYXVsdEZpZWxkQ29uZmlndXJhdGlvbiA9IHtcblx0XHR2aXNpYmxlRmllbGRzOiBbXSxcblx0XHRpZ25vcmVkRmllbGRzOiBbXSxcblx0XHRvcGVyYXRpb25Hcm91cGluZ01vZGU6XG5cdFx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpID09PSBUZW1wbGF0ZVR5cGUuTGlzdFJlcG9ydFxuXHRcdFx0XHQ/IE9wZXJhdGlvbkdyb3VwaW5nTW9kZS5Jc29sYXRlZFxuXHRcdFx0XHQ6IE9wZXJhdGlvbkdyb3VwaW5nTW9kZS5DaGFuZ2VTZXRcblx0fTtcblx0aWYgKCF0YWJsZVNldHRpbmdzLmVuYWJsZU1hc3NFZGl0KSB7XG5cdFx0cmV0dXJuIHsgZW5hYmxlZDogZmFsc2UsIC4uLmRlZmF1bHRGaWVsZENvbmZpZ3VyYXRpb24gfTtcblx0fVxuXHRpZiAodGFibGVTZXR0aW5ncy5lbmFibGVNYXNzRWRpdCA9PT0gdHJ1ZSkge1xuXHRcdHJldHVybiB7IGVuYWJsZWQ6IHRhYmxlU2V0dGluZ3MuZW5hYmxlTWFzc0VkaXQsIC4uLmRlZmF1bHRGaWVsZENvbmZpZ3VyYXRpb24gfTtcblx0fSBlbHNlIGlmICh0eXBlb2YgdGFibGVTZXR0aW5ncy5lbmFibGVNYXNzRWRpdCA9PT0gXCJvYmplY3RcIikge1xuXHRcdHJldHVybiB7XG5cdFx0XHRlbmFibGVkOiB0cnVlLFxuXHRcdFx0dmlzaWJsZUZpZWxkczogZ2V0RmllbGRMaXN0KHRhYmxlU2V0dGluZ3MuZW5hYmxlTWFzc0VkaXQudmlzaWJsZUZpZWxkcywgY29udmVydGVyQ29udGV4dCksXG5cdFx0XHRpZ25vcmVkRmllbGRzOiBnZXRGaWVsZExpc3QodGFibGVTZXR0aW5ncy5lbmFibGVNYXNzRWRpdC5pZ25vcmVkRmllbGRzLCBjb252ZXJ0ZXJDb250ZXh0KSxcblx0XHRcdG9wZXJhdGlvbkdyb3VwaW5nTW9kZTpcblx0XHRcdFx0dGFibGVTZXR0aW5ncy5lbmFibGVNYXNzRWRpdC5vcGVyYXRpb25Hcm91cGluZ01vZGUgJiZcblx0XHRcdFx0T2JqZWN0LnZhbHVlcyhPcGVyYXRpb25Hcm91cGluZ01vZGUpLmluY2x1ZGVzKHRhYmxlU2V0dGluZ3MuZW5hYmxlTWFzc0VkaXQub3BlcmF0aW9uR3JvdXBpbmdNb2RlKVxuXHRcdFx0XHRcdD8gdGFibGVTZXR0aW5ncy5lbmFibGVNYXNzRWRpdC5vcGVyYXRpb25Hcm91cGluZ01vZGVcblx0XHRcdFx0XHQ6IGRlZmF1bHRGaWVsZENvbmZpZ3VyYXRpb24ub3BlcmF0aW9uR3JvdXBpbmdNb2RlLFxuXHRcdFx0Y3VzdG9tRnJhZ21lbnQ6IHRhYmxlU2V0dGluZ3MuZW5hYmxlTWFzc0VkaXQuY3VzdG9tRnJhZ21lbnQsXG5cdFx0XHRmcm9tSW5saW5lOiB0YWJsZVNldHRpbmdzLmVuYWJsZU1hc3NFZGl0LmZyb21JbmxpbmVcblx0XHR9O1xuXHR9XG5cdHJldHVybiB7IGVuYWJsZWQ6IGZhbHNlLCAuLi5kZWZhdWx0RmllbGRDb25maWd1cmF0aW9uIH07XG59XG5cbi8qKlxuICogR2V0cyBhIGxpc3Qgb2YgdGhlIGZpZWxkcyBjb21pbmcgZnJvbSB0aGUgbWFuaWZlc3QuXG4gKiBAcGFyYW0gZmllbGRzIFRoZSBmaWVsZHMsIGNvdWxkIGJlIGEgRmllbGRHcm91cCBvciBmaWVsZHMgc2VwYXJhdGVkIGJ5IGEgY29tbWFcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBpbnN0YW5jZSBvZiB0aGUgY29udmVydGVyIGNvbnRleHRcbiAqIEByZXR1cm5zIFRoZSBsaXN0IG9mIGZpZWxkcy5cbiAqL1xuZnVuY3Rpb24gZ2V0RmllbGRMaXN0KGZpZWxkczogc3RyaW5nIHwgdW5kZWZpbmVkLCBjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4pOiBzdHJpbmdbXSB7XG5cdGlmICghZmllbGRzKSB7XG5cdFx0cmV0dXJuIFtdO1xuXHR9XG5cdGlmIChmaWVsZHMuaW5jbHVkZXMoVUlBbm5vdGF0aW9uVGVybXMuRmllbGRHcm91cCkpIHtcblx0XHRmaWVsZHMgPSBmaWVsZHMuc3RhcnRzV2l0aChcIkBcIikgPyBmaWVsZHMgOiBgQCR7ZmllbGRzfWA7XG5cdFx0Y29uc3QgZmllbGRHcm91cCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZUFubm90YXRpb248RmllbGRHcm91cD4oZmllbGRzKTtcblx0XHRpZiAoaXNBbm5vdGF0aW9uT2ZUeXBlPEZpZWxkR3JvdXA+KGZpZWxkR3JvdXAuYW5ub3RhdGlvbiwgVUlBbm5vdGF0aW9uVHlwZXMuRmllbGRHcm91cFR5cGUpKSB7XG5cdFx0XHRyZXR1cm4gZmllbGRHcm91cC5hbm5vdGF0aW9uLkRhdGEucmVkdWNlKChwcm9wZXJ0aWVzOiBzdHJpbmdbXSwgZmllbGQpID0+IHtcblx0XHRcdFx0aWYgKGlzRGF0YUZpZWxkKGZpZWxkKSAmJiBpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbihmaWVsZC5WYWx1ZSkpIHtcblx0XHRcdFx0XHRwcm9wZXJ0aWVzLnB1c2goZmllbGQuVmFsdWUucGF0aCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHByb3BlcnRpZXM7XG5cdFx0XHR9LCBbXSk7XG5cdFx0fVxuXHRcdHJldHVybiBbXTtcblx0fVxuXHRyZXR1cm4gZmllbGRzXG5cdFx0LnJlcGxhY2UoL1xccy9nLCBcIlwiKVxuXHRcdC5zcGxpdChcIixcIilcblx0XHQubWFwKChuYW1lKSA9PiBuYW1lLnRyaW0oKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRUYWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbihcblx0bGluZUl0ZW1Bbm5vdGF0aW9uOiBMaW5lSXRlbSB8IHVuZGVmaW5lZCxcblx0dmlzdWFsaXphdGlvblBhdGg6IHN0cmluZyxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHRjaGVja0NvbmRlbnNlZExheW91dCA9IHRydWUsXG5cdHNlbGVjdGlvblZhcmlhbnRBbm5vdGF0aW9uPzogU2VsZWN0aW9uVmFyaWFudFR5cGVcbik6IFRhYmxlQ29udHJvbENvbmZpZ3VyYXRpb24ge1xuXHRjb25zdCBfbWFuaWZlc3RXcmFwcGVyID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKTtcblx0Y29uc3QgdGFibGVNYW5pZmVzdFNldHRpbmdzOiBUYWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbiA9IGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RDb250cm9sQ29uZmlndXJhdGlvbih2aXN1YWxpemF0aW9uUGF0aCk7XG5cdGNvbnN0IHRhYmxlU2V0dGluZ3MgPSB0YWJsZU1hbmlmZXN0U2V0dGluZ3M/LnRhYmxlU2V0dGluZ3MgPz8ge307XG5cdGNvbnN0IGdsb2JhbEZFTWFuaWZlc3RTZXR0aW5ncyA9IF9tYW5pZmVzdFdyYXBwZXIuZ2V0U2FwRmVNYW5pZmVzdENvbmZpZ3VyYXRpb24oKTtcblx0Y29uc3QgZGVmYXVsdENyZWF0aW9uTW9kZSA9XG5cdFx0Z2xvYmFsRkVNYW5pZmVzdFNldHRpbmdzPy5tYWNyb3M/LnRhYmxlPy5kZWZhdWx0Q3JlYXRpb25Nb2RlID09PSBcIklubGluZUNyZWF0aW9uUm93c1wiID8gQ3JlYXRpb25Nb2RlLklubGluZUNyZWF0aW9uUm93cyA6IHVuZGVmaW5lZDtcblx0Y29uc3QgY3JlYXRpb25Nb2RlOiBDcmVhdGlvbk1vZGUgPSB0YWJsZVNldHRpbmdzLmNyZWF0aW9uTW9kZT8ubmFtZSA/PyBkZWZhdWx0Q3JlYXRpb25Nb2RlID8/IENyZWF0aW9uTW9kZS5OZXdQYWdlO1xuXHRjb25zdCBlbmFibGVBdXRvQ29sdW1uV2lkdGggPSAhX21hbmlmZXN0V3JhcHBlci5pc1Bob25lKCk7XG5cdGNvbnN0IGRpc2FibGVDb3B5VG9DbGlwYm9hcmQgPSB0YWJsZVNldHRpbmdzLmRpc2FibGVDb3B5VG9DbGlwYm9hcmQ7XG5cdGNvbnN0IHRlbXBsYXRlVHlwZSA9IGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCk7XG5cdGNvbnN0IGlzQ29uZGVuc2VkVGFibGVMYXlvdXRDb21wbGlhbnQgPSBjaGVja0NvbmRlbnNlZExheW91dCAmJiBfbWFuaWZlc3RXcmFwcGVyLmlzQ29uZGVuc2VkTGF5b3V0Q29tcGxpYW50KCk7XG5cdGNvbnN0IG9GaWx0ZXJDb25maWd1cmF0aW9uID0gbGluZUl0ZW1Bbm5vdGF0aW9uXG5cdFx0PyBnZXRGaWx0ZXJDb25maWd1cmF0aW9uKHRhYmxlU2V0dGluZ3MsIGxpbmVJdGVtQW5ub3RhdGlvbiwgY29udmVydGVyQ29udGV4dCwgc2VsZWN0aW9uVmFyaWFudEFubm90YXRpb24pXG5cdFx0OiB7fTtcblx0Y29uc3QgY3VzdG9tVmFsaWRhdGlvbkZ1bmN0aW9uID0gdGFibGVTZXR0aW5ncy5jcmVhdGlvbk1vZGU/LmN1c3RvbVZhbGlkYXRpb25GdW5jdGlvbjtcblx0Y29uc3QgZXhwb3J0UmVxdWVzdFNpemUgPSB0YWJsZVNldHRpbmdzLmV4cG9ydFJlcXVlc3RTaXplO1xuXHRjb25zdCB0YWJsZVR5cGUgPSBnZXRUYWJsZVR5cGUoY29udmVydGVyQ29udGV4dCwgdGFibGVNYW5pZmVzdFNldHRpbmdzKTtcblx0Y29uc3QgYW5hbHl0aWNhbENvbmZpZ3VyYXRpb24gPSB0YWJsZVNldHRpbmdzLmFuYWx5dGljYWxDb25maWd1cmF0aW9uO1xuXHQvLyBCeSBkZWZhdWx0LCBwYXN0ZSBpcyBlbmFibGVkIG9uIGFuIE9iamVjdFBhZ2UgYW5kIG9uIGEgTGlzdFJlcG9ydCB3aXRoIGEgZHJhZnQgVHJlZVRhYmxlXG5cdGNvbnN0IGVuYWJsZVBhc3RlID1cblx0XHR0YWJsZVNldHRpbmdzLmVuYWJsZVBhc3RlID8/XG5cdFx0KGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCkgPT09IFwiT2JqZWN0UGFnZVwiIHx8XG5cdFx0XHQodGFibGVUeXBlID09PSBcIlRyZWVUYWJsZVwiICYmIChjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldCgpIGFzIEVudGl0eVNldCk/LmFubm90YXRpb25zLkNvbW1vbj8uRHJhZnRSb290ICE9PSB1bmRlZmluZWQpKTtcblx0Y29uc3QgdGFibGVSb3dNb2RlID0gX2dldFRhYmxlTW9kZSh0YWJsZVR5cGUsIHRhYmxlU2V0dGluZ3MsIHRlbXBsYXRlVHlwZSA9PT0gVGVtcGxhdGVUeXBlLkxpc3RSZXBvcnQpO1xuXHRjb25zdCBkZWZhdWx0U2Nyb2xsVGhyZXNob2xkID0gdGFibGVUeXBlICE9PSBcIlJlc3BvbnNpdmVUYWJsZVwiID8gMzAwIDogdW5kZWZpbmVkO1xuXHRjb25zdCBjb25kZW5zZWRUYWJsZUxheW91dCA9IF9nZXRDb25kZW5zZWRUYWJsZUxheW91dCh0YWJsZVR5cGUsIHRhYmxlU2V0dGluZ3MpO1xuXHRsZXQgaW5saW5lQ3JlYXRpb25Sb3dzSGlkZGVuSW5FZGl0TW9kZSA9IGZhbHNlO1xuXHRpZiAodGFibGVTZXR0aW5ncy5jcmVhdGlvbk1vZGU/LmlubGluZUNyZWF0aW9uUm93c0hpZGRlbkluRWRpdE1vZGUpIHtcblx0XHRpbmxpbmVDcmVhdGlvblJvd3NIaWRkZW5JbkVkaXRNb2RlID1cblx0XHRcdHR5cGVvZiB0YWJsZVNldHRpbmdzLmNyZWF0aW9uTW9kZT8uaW5saW5lQ3JlYXRpb25Sb3dzSGlkZGVuSW5FZGl0TW9kZSA9PT0gXCJzdHJpbmdcIlxuXHRcdFx0XHQ/IHRhYmxlU2V0dGluZ3MuY3JlYXRpb25Nb2RlPy5pbmxpbmVDcmVhdGlvblJvd3NIaWRkZW5JbkVkaXRNb2RlID09PSBcInRydWVcIlxuXHRcdFx0XHQ6IHRhYmxlU2V0dGluZ3MuY3JlYXRpb25Nb2RlPy5pbmxpbmVDcmVhdGlvblJvd3NIaWRkZW5JbkVkaXRNb2RlO1xuXHR9XG5cdGxldCB1c2VUZXh0Rm9yTm9EYXRhTWVzc2FnZXM6IHN0cmluZztcblx0aWYgKGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCkgPT09IFwiTGlzdFJlcG9ydFwiKSB7XG5cdFx0dXNlVGV4dEZvck5vRGF0YU1lc3NhZ2VzID0gXCJpbGx1c3RyYXRlZE1lc3NhZ2UtQXV0b1wiO1xuXHR9IGVsc2Uge1xuXHRcdHVzZVRleHRGb3JOb0RhdGFNZXNzYWdlcyA9IF9tYW5pZmVzdFdyYXBwZXIuZ2V0VXNlVGV4dEZvck5vRGF0YU1lc3NhZ2VzKCkgPyBcInRleHRcIiA6IFwiaWxsdXN0cmF0ZWRNZXNzYWdlLUV4dHJhU21hbGxcIjtcblx0fVxuXHRjb25zdCBvQ29uZmlndXJhdGlvbiA9IHtcblx0XHQvLyBJZiBubyBjcmVhdGVBdEVuZCBpcyBzcGVjaWZpZWQgaXQgd2lsbCBiZSBmYWxzZSBmb3IgSW5saW5lL0NyZWF0aW9uRGlhbG9nIGNyZWF0ZSBhbmQgdHJ1ZSBvdGhlcndpc2Vcblx0XHRjcmVhdGVBdEVuZDpcblx0XHRcdHRhYmxlU2V0dGluZ3MuY3JlYXRpb25Nb2RlPy5jcmVhdGVBdEVuZCAhPT0gdW5kZWZpbmVkXG5cdFx0XHRcdD8gdGFibGVTZXR0aW5ncy5jcmVhdGlvbk1vZGU/LmNyZWF0ZUF0RW5kXG5cdFx0XHRcdDogIVtDcmVhdGlvbk1vZGUuSW5saW5lLCBDcmVhdGlvbk1vZGUuQ3JlYXRpb25EaWFsb2ddLmluY2x1ZGVzKGNyZWF0aW9uTW9kZSksXG5cdFx0Y3JlYXRpb25Nb2RlOiBjcmVhdGlvbk1vZGUsXG5cdFx0Y3JlYXRpb25EaWFsb2dGaWVsZHM6XG5cdFx0XHRjcmVhdGlvbk1vZGUgPT09IENyZWF0aW9uTW9kZS5DcmVhdGlvbkRpYWxvZ1xuXHRcdFx0XHQ/IGdldEZpZWxkTGlzdCh0YWJsZVNldHRpbmdzLmNyZWF0aW9uTW9kZT8uY3JlYXRpb25GaWVsZHMsIGNvbnZlcnRlckNvbnRleHQpXG5cdFx0XHRcdDogdW5kZWZpbmVkLFxuXHRcdGN1c3RvbVZhbGlkYXRpb25GdW5jdGlvbjogY3VzdG9tVmFsaWRhdGlvbkZ1bmN0aW9uLFxuXHRcdGhhc0RhdGFTdGF0ZUluZGljYXRvckZpbHRlcjogdGVtcGxhdGVUeXBlID09PSBUZW1wbGF0ZVR5cGUuTGlzdFJlcG9ydCxcblx0XHQvLyBpZiBhIGN1c3RvbSB2YWxpZGF0aW9uIGZ1bmN0aW9uIGlzIHByb3ZpZGVkLCBkaXNhYmxlQWRkUm93QnV0dG9uRm9yRW1wdHlEYXRhIHNob3VsZCBub3QgYmUgY29uc2lkZXJlZCwgaS5lLiBzZXQgdG8gZmFsc2Vcblx0XHRkaXNhYmxlQWRkUm93QnV0dG9uRm9yRW1wdHlEYXRhOiAhY3VzdG9tVmFsaWRhdGlvbkZ1bmN0aW9uID8gISF0YWJsZVNldHRpbmdzLmNyZWF0aW9uTW9kZT8uZGlzYWJsZUFkZFJvd0J1dHRvbkZvckVtcHR5RGF0YSA6IGZhbHNlLFxuXHRcdGVuYWJsZUF1dG9Db2x1bW5XaWR0aDogZW5hYmxlQXV0b0NvbHVtbldpZHRoLFxuXHRcdGVuYWJsZVBhc3RpbmdPZkNvbXB1dGVkUHJvcGVydGllczogdGFibGVTZXR0aW5ncy5lbmFibGVQYXN0aW5nT2ZDb21wdXRlZFByb3BlcnRpZXMsXG5cdFx0aWdub3JlZEZpZWxkczogdGFibGVTZXR0aW5ncy5pZ25vcmVkRmllbGRzLFxuXHRcdHJlYWRPbmx5OiB0YWJsZVNldHRpbmdzLnJlYWRPbmx5LFxuXHRcdGVuYWJsZUV4cG9ydDogX2dldEVuYWJsZUV4cG9ydCh0YWJsZVNldHRpbmdzLCBjb252ZXJ0ZXJDb250ZXh0LCBlbmFibGVQYXN0ZSksXG5cdFx0YW5hbHl0aWNhbENvbmZpZ3VyYXRpb24sXG5cdFx0ZnJvemVuQ29sdW1uQ291bnQ6IF9nZXRGcm96ZW5Db2x1bW5Db3VudCh0YWJsZVNldHRpbmdzKSxcblx0XHR3aWR0aEluY2x1ZGluZ0NvbHVtbkhlYWRlcjogX2dldFdpZHRoSW5jbHVkaW5nQ29sdW1uSGVhZGVyKHRhYmxlU2V0dGluZ3MpLFxuXHRcdGVuYWJsZUZ1bGxTY3JlZW46IF9nZXRGdWxsU2NyZWVuQmFzZWRPbkRldmljZSh0YWJsZVNldHRpbmdzLCBjb252ZXJ0ZXJDb250ZXh0LCBfbWFuaWZlc3RXcmFwcGVyLmlzUGhvbmUoKSksXG5cdFx0bWFzc0VkaXQ6IGdldE1hc3NFZGl0U2V0dGluZ3ModGFibGVTZXR0aW5ncywgY29udmVydGVyQ29udGV4dCksXG5cdFx0ZW5hYmxlQWRkQ2FyZFRvSW5zaWdodHM6IHRhYmxlU2V0dGluZ3M/LmVuYWJsZUFkZENhcmRUb0luc2lnaHRzLFxuXHRcdGVuYWJsZVBhc3RlOiBlbmFibGVQYXN0ZSxcblx0XHRkaXNhYmxlQ29weVRvQ2xpcGJvYXJkOiBkaXNhYmxlQ29weVRvQ2xpcGJvYXJkLFxuXHRcdGhlYWRlclZpc2libGU6IHRydWUsXG5cdFx0aGVhZGVyOiB0YWJsZVNldHRpbmdzLmhlYWRlcixcblx0XHRtdWx0aVNlbGVjdE1vZGU6IF9nZXRNdWx0aVNlbGVjdE1vZGUodGFibGVTZXR0aW5ncywgdGFibGVUeXBlLCBjb252ZXJ0ZXJDb250ZXh0KSxcblx0XHRzZWxlY3Rpb25MaW1pdDogX2dldFRhYmxlU2VsZWN0aW9uTGltaXQodGFibGVTZXR0aW5ncyksXG5cdFx0aW5saW5lQ3JlYXRpb25Sb3dDb3VudDogX2dldFRhYmxlSW5saW5lQ3JlYXRpb25Sb3dDb3VudCh0YWJsZVNldHRpbmdzKSxcblx0XHRpbmxpbmVDcmVhdGlvblJvd3NIaWRkZW5JbkVkaXRNb2RlOiBpbmxpbmVDcmVhdGlvblJvd3NIaWRkZW5JbkVkaXRNb2RlLFxuXHRcdHNob3dSb3dDb3VudDogdGFibGVTZXR0aW5ncz8ucXVpY2tWYXJpYW50U2VsZWN0aW9uPy5wYXRocyA/IGZhbHNlIDogIV9tYW5pZmVzdFdyYXBwZXIuZ2V0Vmlld0NvbmZpZ3VyYXRpb24oKT8uc2hvd0NvdW50cyxcblx0XHR0eXBlOiB0YWJsZVR5cGUsXG5cdFx0ZGlzYWJsZVJlcXVlc3RDYWNoZTogZ2V0T3B0aW1pc3RpY0JhdGNoU2V0dGluZ3NGcm9tTWFuaWZlc3QodGFibGVNYW5pZmVzdFNldHRpbmdzKSxcblx0XHR1c2VDb25kZW5zZWRUYWJsZUxheW91dDogY29uZGVuc2VkVGFibGVMYXlvdXQgJiYgaXNDb25kZW5zZWRUYWJsZUxheW91dENvbXBsaWFudCxcblx0XHRpc0NvbXBhY3RUeXBlOiBfbWFuaWZlc3RXcmFwcGVyLmlzQ29tcGFjdFR5cGUoKSxcblx0XHRleHBvcnRSZXF1ZXN0U2l6ZTogZXhwb3J0UmVxdWVzdFNpemUsXG5cdFx0ZW5hYmxlVXBsb2FkUGx1Z2luOiAhIWNvbnZlcnRlckNvbnRleHQuZ2V0QW5ub3RhdGlvbkVudGl0eVR5cGUoKS5hbm5vdGF0aW9ucz8uVUk/Lk1lZGlhUmVzb3VyY2U/LlN0cmVhbSxcblx0XHRtb2RlRm9yTm9EYXRhTWVzc2FnZTogdXNlVGV4dEZvck5vRGF0YU1lc3NhZ2VzLFxuXHRcdHNjcm9sbFRocmVzaG9sZDogdGFibGVTZXR0aW5ncy5zY3JvbGxUaHJlc2hvbGQgPz8gZGVmYXVsdFNjcm9sbFRocmVzaG9sZFxuXHR9O1xuXG5cdGNvbnN0IHRhYmxlQ29uZmlndXJhdGlvbjogVGFibGVDb250cm9sQ29uZmlndXJhdGlvbiA9IHsgLi4ub0NvbmZpZ3VyYXRpb24sIC4uLnRhYmxlUm93TW9kZSwgLi4ub0ZpbHRlckNvbmZpZ3VyYXRpb24gfTtcblx0dGFibGVDb25maWd1cmF0aW9uLmJlZm9yZVJlYmluZFRhYmxlID0gdGFibGVTZXR0aW5ncy5iZWZvcmVSZWJpbmRUYWJsZTtcblx0dGFibGVDb25maWd1cmF0aW9uLnNlbGVjdGlvbkNoYW5nZSA9IHRhYmxlU2V0dGluZ3Muc2VsZWN0aW9uQ2hhbmdlO1xuXHR0YWJsZUNvbmZpZ3VyYXRpb24ucm93UHJlc3MgPSB0YWJsZVNldHRpbmdzLnJvd1ByZXNzO1xuXHRpZiAodGFibGVUeXBlID09PSBcIlRyZWVUYWJsZVwiKSB7XG5cdFx0dXBkYXRlVHJlZVRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uKHRhYmxlQ29uZmlndXJhdGlvbiwgdGFibGVTZXR0aW5ncywgY29udmVydGVyQ29udGV4dCk7XG5cdH1cblxuXHRpZiAodGFibGVTZXR0aW5ncy5oZWFkZXJWaXNpYmxlICE9PSB1bmRlZmluZWQpIHtcblx0XHR0YWJsZUNvbmZpZ3VyYXRpb24uaGVhZGVyVmlzaWJsZSA9IHRhYmxlU2V0dGluZ3MuaGVhZGVyVmlzaWJsZTtcblx0fVxuXG5cdGlmICh0YWJsZUNvbmZpZ3VyYXRpb24uY3JlYXRpb25Nb2RlID09PSBDcmVhdGlvbk1vZGUuRXh0ZXJuYWwpIHtcblx0XHR0YWJsZUNvbmZpZ3VyYXRpb24ub3V0Ym91bmRDcmVhdGlvbiA9IHRhYmxlU2V0dGluZ3MuY3JlYXRpb25Nb2RlPy5vdXRib3VuZDtcblx0fVxuXG5cdHJldHVybiB0YWJsZUNvbmZpZ3VyYXRpb247XG59XG5cbmZ1bmN0aW9uIGdldFRhYmxlVHlwZShcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHR0YWJsZU1hbmlmZXN0U2V0dGluZ3M/OiBUYWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvblxuKTogVGFibGVUeXBlIHtcblx0aWYgKHRhYmxlTWFuaWZlc3RTZXR0aW5ncz8udGFibGVTZXR0aW5ncz8udHlwZSkge1xuXHRcdC8vIGluIGNhc2UgdGhlIGFwcGxpY2F0aW9uIHNwZWNpZmllZCBhIHRhYmxlIHR5cGUgd2Ugd2lsbCB1c2UgdGhpcyBvbmVcblx0XHRyZXR1cm4gdGFibGVNYW5pZmVzdFNldHRpbmdzLnRhYmxlU2V0dGluZ3MudHlwZTtcblx0fVxuXG5cdC8vIGRlZmF1bHQgaXMgdGhlIFJlc3BvbnNpdmVUYWJsZVxuXHRyZXR1cm4gXCJSZXNwb25zaXZlVGFibGVcIjtcbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuXHRnZXRUYWJsZUFjdGlvbnMsXG5cdGNyZWF0ZVRhYmxlVmlzdWFsaXphdGlvbixcblx0Y3JlYXRlRGVmYXVsdFRhYmxlVmlzdWFsaXphdGlvbixcblx0Z2V0Q2FwYWJpbGl0eVJlc3RyaWN0aW9uLFxuXHRnZXRTZWxlY3Rpb25Nb2RlLFxuXHRnZXRQMTNuTW9kZSxcblx0Z2V0U3RhbmRhcmRBY3Rpb25zQ29uZmlndXJhdGlvbixcblx0Z2V0VGFibGVBbm5vdGF0aW9uQ29uZmlndXJhdGlvbixcblx0c3BsaXRQYXRoLFxuXHRnZXRTZWxlY3Rpb25WYXJpYW50Q29uZmlndXJhdGlvbixcblx0Z2V0VGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24sXG5cdHVwZGF0ZVRhYmxlVmlzdWFsaXphdGlvbkZvclR5cGUsXG5cdGNyZWF0ZVJlcXVlc3RlZFByb3BlcnRpZXMsXG5cdGdldE5hdmlnYXRpb25UYXJnZXRQYXRoLFxuXHRnZXRDdXN0b21GdW5jdGlvbkluZm9cbn07XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7RUFtRkE7RUFFQTtFQXFKQTtBQUNBO0FBQ0E7O0VBWUE7QUFDQTtBQUNBOztFQTZHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDTyxTQUFTQSxlQUFlQSxDQUM5QkMsa0JBQTRCLEVBQzVCQyxpQkFBeUIsRUFDekJDLGdCQUF5RCxFQUN6REMsZUFBZ0UsRUFDaEVDLGtCQUFvRCxFQUNuQztJQUNqQjtJQUNBLE1BQU1DLHNCQUFzQixHQUFHQyxXQUFXLENBQUNDLGlEQUFpRCxDQUFDTCxnQkFBZ0IsQ0FBQztJQUU5RyxNQUFNTSxZQUFZLEdBQUdDLHlCQUF5QixDQUFDVCxrQkFBa0IsRUFBRUMsaUJBQWlCLEVBQUVDLGdCQUFnQixDQUFDO0lBQ3ZHO0lBQ0EsTUFBTVEsZUFBZSxHQUFHQyxzQkFBc0IsQ0FDN0NULGdCQUFnQixDQUFDVSwrQkFBK0IsQ0FBNkJYLGlCQUFpQixDQUFDLENBQUNZLE9BQU8sRUFJdkdYLGdC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
|
|
1931
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJnZXRUYWJsZUFjdGlvbnMiLCJsaW5lSXRlbUFubm90YXRpb24iLCJ2aXN1YWxpemF0aW9uUGF0aCIsImNvbnZlcnRlckNvbnRleHQiLCJzdGFuZGFyZEFjdGlvbnMiLCJuYXZpZ2F0aW9uU2V0dGluZ3MiLCJpc0NvbGxhYm9yYXRpb25FbmFibGVkIiwiTW9kZWxIZWxwZXIiLCJpc0NvbGxhYm9yYXRpb25EcmFmdFN1cHBvcnRlZEZyb21Db252ZXJ0ZXJDb250ZXh0IiwidGFibGVBY3Rpb25zIiwiZ2V0VGFibGVBbm5vdGF0aW9uQWN0aW9ucyIsIm1hbmlmZXN0QWN0aW9ucyIsImdldEFjdGlvbnNGcm9tTWFuaWZlc3QiLCJnZXRNYW5pZmVzdENvbnRyb2xDb25maWd1cmF0aW9uIiwiYWN0aW9ucyIsImNvcHlBY3Rpb25zIiwiZmlsdGVyIiwiYSIsInR5cGUiLCJBY3Rpb25UeXBlIiwiQ29weSIsImFubm90YXRpb25BY3Rpb25zIiwiYW5ub3RhdGlvbkFuZFN0YW5kYXJkQWN0aW9ucyIsImNyZWF0ZSIsImRlbGV0ZSIsIm1hc3NFZGl0IiwiaW5zaWdodHMiLCJjcmVhdGlvblJvdyIsImN1dCIsImNvcHkiLCJwYXN0ZSIsIm1vdmVVcCIsIm1vdmVEb3duIiwiYWN0aW9uIiwidW5kZWZpbmVkIiwibWFuaWZlc3RBY3Rpb24iLCJPYmplY3QiLCJ2YWx1ZXMiLCJEZWZhdWx0IiwiTWVudSIsInBvc2l0aW9uIiwiYW5jaG9yIiwiU3RhbmRhcmRBY3Rpb25LZXlzIiwiQ3JlYXRlIiwicGxhY2VtZW50IiwiUGxhY2VtZW50IiwiQmVmb3JlIiwibWFuaWZlc3RBY3Rpb25FbnRyaWVzIiwiZW50cmllcyIsInN0YW5kYXJkTWFuaWZlc3RBY3Rpb25zIiwiZnJvbUVudHJpZXMiLCJfcmVmIiwia2V5Iiwic3RhcnRzV2l0aCIsIm5vblN0YW5kYXJkTWFuaWZlc3RBY3Rpb25zIiwiX3JlZjIiLCJhY3Rpb25PdmVyd3JpdGVDb25maWciLCJpc05hdmlnYWJsZSIsIk92ZXJyaWRlVHlwZSIsIm92ZXJ3cml0ZSIsImVuYWJsZU9uU2VsZWN0IiwiZW5hYmxlQXV0b1Njcm9sbCIsImVuYWJsZWQiLCJ2aXNpYmxlIiwidmlzaWJsZUZvckNvbnRleHRNZW51IiwiZGVmYXVsdFZhbHVlc0V4dGVuc2lvbkZ1bmN0aW9uIiwiY29tbWFuZCIsIm1lbnUiLCJhbm5vdGF0aW9uTWVudUFjdGlvbkl0ZW1zIiwiZ2V0QW5ub3RhdGlvbk1lbnVBY3Rpb25JdGVtcyIsIm1hdGNoaW5nTWFuaWZlc3RBY3Rpb25zIiwiZ2V0TWF0Y2hpbmdNYW5pZmVzdEFjdGlvbiIsIm92ZXJ3cml0dGVuTWVudUFjdGlvbkl0ZW1zIiwiaW5zZXJ0Q3VzdG9tRWxlbWVudHMiLCJwcmVwYXJlTWVudUFjdGlvbnMiLCJyZW1vdmVEdXBsaWNhdGVBY3Rpb25zIiwiZ2V0VmlzaWJpbGl0eUVuYWJsZW1lbnRNZW51QWN0aW9ucyIsImFkZENvbGxhYm9yYXRpb25Db25kaXRpb24iLCJjb21tYW5kQWN0aW9ucyIsIl9leHBvcnRzIiwiZ2V0Q29udGV4dERlZmluaW5nUHJvcGVydGllc0Zyb21BZ2dyZWdhdGlvbkFubm90YXRpb24iLCJhZ2dyZWdhdGlvbkhlbHBlciIsImN1c3RvbUFnZ3JlZ2F0ZUFubm90YXRpb25zIiwiZ2V0Q3VzdG9tQWdncmVnYXRlRGVmaW5pdGlvbnMiLCJjdXN0b21BZ2dyZWdhdGVkZWZpbml0aW9ucyIsImZvckVhY2giLCJhbm5vdGF0aW9uIiwiYWdncmVnYXRlZFByb3BlcnR5IiwiX2VudGl0eVR5cGUiLCJlbnRpdHlQcm9wZXJ0aWVzIiwiZmluZCIsInByb3BlcnR5IiwibmFtZSIsInF1YWxpZmllciIsImNvbnRleHREZWZpbmluZ1Byb3BlcnRpZXMiLCJhbm5vdGF0aW9ucyIsIkFnZ3JlZ2F0aW9uIiwiQ29udGV4dERlZmluaW5nUHJvcGVydGllcyIsIm1hcCIsImN0eERlZlByb3BlcnR5IiwidmFsdWUiLCJnZXRFeHRlbnNpb25JbmZvRnJvbUVudGl0eVR5cGUiLCJlbnRpdHlUeXBlIiwidGFibGVDb2x1bW5zIiwiQWdncmVnYXRpb25IZWxwZXIiLCJpc0FuYWx5dGljc1N1cHBvcnRlZCIsImN1cnJlbmN5T3JVbml0UHJvcGVydGllcyIsIlNldCIsImNvbHVtbiIsInRhYmxlQ29sdW1uIiwidW5pdCIsInRhcmdldFVuaXRQcm9wZXJ0eSIsInByb3AiLCJhZGQiLCJyZWxhdGl2ZVBhdGgiLCJjb250ZXh0RGVmaW5pbmdQcm9wZXJ0aWVzRnJvbUFnZ3JlZ2F0aW9uIiwicmVzdWx0IiwicHJvcGVydHlJbmZvcyIsInJhd0NvbnRleHREZWZpbmluZ1Byb3BlcnRpZXMiLCJmcm9tR3JvdXBhYmxlUHJvcGVydHkiLCJpc1Byb3BlcnR5R3JvdXBhYmxlIiwiaGFzIiwiY29udGV4dERlZmluaW5nUHJvcGVydHlOYW1lIiwiZm91bmRDb2x1bW4iLCJmaW5kQ29sdW1uQnlQYXRoIiwicHVzaCIsImxlbmd0aCIsImFkZGl0aW9uYWxQcm9wZXJ0aWVzIiwidXBkYXRlVGFibGVWaXN1YWxpemF0aW9uRm9yVHlwZSIsInRhYmxlVmlzdWFsaXphdGlvbiIsInByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uIiwiY29udHJvbCIsImFnZ3JlZ2F0aW9uRGF0YSIsImNvbHVtbnMiLCJlbmFibGVBbmFseXRpY3MiLCJlbmFibGUkc2VsZWN0IiwiZW5hYmxlJCRnZXRLZWVwQWxpdmVDb250ZXh0IiwiYW5hbHl0aWNzRXh0ZW5zaW9ucyIsIl91cGRhdGVQcm9wZXJ0eUluZm9zV2l0aEFnZ3JlZ2F0ZXNEZWZpbml0aW9ucyIsImFsbG93ZWRUcmFuc2Zvcm1hdGlvbnMiLCJnZXRBbGxvd2VkVHJhbnNmb3JtYXRpb25zIiwiZW5hYmxlQmFzaWNTZWFyY2giLCJpbmNsdWRlcyIsImdyb3VwQ29uZGl0aW9ucyIsImdldEdyb3VwQ29uZGl0aW9ucyIsImFnZ3JlZ2F0ZUNvbmRpdGlvbnMiLCJnZXRBZ2dyZWdhdGVDb25kaXRpb25zIiwiTG9nIiwiZXJyb3IiLCJjaGFuZ2VTaWJsaW5nRm9yUm9vdHNTdXBwb3J0ZWQiLCJIaWVyYXJjaHkiLCJoaWVyYXJjaHlRdWFsaWZpZXIiLCJDaGFuZ2VTaWJsaW5nRm9yUm9vdHNTdXBwb3J0ZWQiLCJhbGxvd0Ryb3BCZXR3ZWVuTm9kZXMiLCJDaGFuZ2VOZXh0U2libGluZ0FjdGlvbiIsImlzT2JqZWN0UGF0aERyYWZ0U3VwcG9ydGVkIiwiZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCIsInJlcXVlc3RBdExlYXN0IiwiYW5hbHl0aWNhbENvbmZpZ3VyYXRpb24iLCJhZ2dyZWdhdGlvbk9uTGVhZkxldmVsIiwiaXNEcmFmdFJvb3QiLCJnZXRFbnRpdHlTZXQiLCJnZXRNYW5pZmVzdFdyYXBwZXIiLCJpc0ZjbEVuYWJsZWQiLCJlbmFibGVVcGxvYWRQbHVnaW4iLCJzdHJlYW1Qcm9wZXJ0eSIsImdldEFubm90YXRpb25FbnRpdHlUeXBlIiwiVUkiLCJNZWRpYVJlc291cmNlIiwiU3RyZWFtIiwiJHRhcmdldCIsInVwbG9hZEFjdGlvbiIsInVwbG9hZFRhYmxlIiwic3RyZWFtIiwiZmlsZU5hbWUiLCJDb3JlIiwiQ29udGVudERpc3Bvc2l0aW9uIiwiRmlsZW5hbWUiLCJwYXRoIiwiZmlsZU5hbWVNYXhMZW5ndGgiLCJtYXhMZW5ndGgiLCJhY2NlcHRhYmxlTWVkaWFUeXBlcyIsIkFjY2VwdGFibGVNZWRpYVR5cGVzIiwiY3JlYXRlUmVxdWVzdGVkUHJvcGVydGllcyIsImxpbmVJdGVtIiwib3BlcmF0aW9uQXZhaWxhYmxlIiwic2VsZWN0ZWRGaWVsZHMiLCJwdXNoRmllbGQiLCJmaWVsZE5hbWUiLCJvcmlnaW4iLCJpbmRleE9mIiwicHVzaEZpZWxkTGlzdCIsImZpZWxkcyIsImZpZWxkIiwib3BlcmF0aW9uQXZhaWxhYmxlUHJvcGVydGllcyIsInNwbGl0IiwidmFsaWRQcm9wZXJ0aWVzIiwicHJvcE5hbWUiLCJyZXNvbHZlUGF0aCIsInNlbWFudGljS2V5cyIsIkNvbW1vbiIsIlNlbWFudGljS2V5Iiwic2VtYW50aWNLZXkiLCJjYXBhYmlsaXRpZXNBbm5vdGF0aW9uIiwiQ2FwYWJpbGl0aWVzIiwiYWx0ZXJuYXRlQW5kU2Vjb25kYXJ5S2V5cyIsImdldEFsdGVybmF0ZUFuZFNlY29uZGFyeUtleXMiLCJSZXF1ZXN0QXRMZWFzdCIsInByb3BlcnR5UGF0aCIsImdldE5hdmlnYXRpb25BdmFpbGFibGVGaWVsZHNGcm9tTGluZUl0ZW0iLCJEZWxldGVSZXN0cmljdGlvbnMiLCJEZWxldGFibGUiLCJVcGRhdGVSZXN0cmljdGlvbnMiLCJVcGRhdGFibGUiLCJyZWNvcmQiLCIkVHlwZSIsIklubGluZSIsIkRldGVybWluaW5nIiwiaXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24iLCJOYXZpZ2F0aW9uQXZhaWxhYmxlIiwiZ2V0TmF2aWdhdGlvblRhcmdldFBhdGgiLCJuYXZpZ2F0aW9uUHJvcGVydHlQYXRoIiwibWFuaWZlc3RXcmFwcGVyIiwiZ2V0TmF2aWdhdGlvbkNvbmZpZ3VyYXRpb24iLCJuYXZDb25maWciLCJrZXlzIiwiZGF0YU1vZGVsUGF0aCIsImNvbnRleHRQYXRoIiwiZ2V0Q29udGV4dFBhdGgiLCJuYXZDb25maWdGb3JDb250ZXh0UGF0aCIsInRhcmdldEVudGl0eVNldCIsInN0YXJ0aW5nRW50aXR5U2V0IiwiZ2V0U2VtYW50aWNLZXlzQW5kVGl0bGVJbmZvIiwiaGVhZGVySW5mb1RpdGxlUGF0aCIsIkhlYWRlckluZm8iLCJUaXRsZSIsIlZhbHVlIiwic2VtYW50aWNLZXlBbm5vdGF0aW9ucyIsImhlYWRlckluZm9UeXBlTmFtZSIsIlR5cGVOYW1lIiwic2VtYW50aWNLZXlDb2x1bW5zIiwib0NvbHVtbiIsImNyZWF0ZVRhYmxlVmlzdWFsaXphdGlvbiIsInBhcmFtcyIsImlzQ29uZGVuc2VkVGFibGVMYXlvdXRDb21wbGlhbnQiLCJzZWxlY3Rpb25WYXJpYW50QW5ub3RhdGlvbiIsInRhYmxlTWFuaWZlc3RDb25maWciLCJnZXRUYWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbiIsInNwbGl0UGF0aCIsIm5hdmlnYXRpb25UYXJnZXRQYXRoIiwiZ2V0VGFibGVDb2x1bW5zIiwib3BlcmF0aW9uQXZhaWxhYmxlTWFwIiwiZ2V0T3BlcmF0aW9uQXZhaWxhYmxlTWFwIiwic2VtYW50aWNLZXlzQW5kSGVhZGVySW5mb1RpdGxlIiwic3RhbmRhcmRBY3Rpb25zQ29uZmlndXJhdGlvbiIsImdldFN0YW5kYXJkQWN0aW9uc0NvbmZpZ3VyYXRpb24iLCJ0YWJsZUFubm90YXRpb24iLCJnZXRUYWJsZUFubm90YXRpb25Db25maWd1cmF0aW9uIiwiZ2V0T3BlcmF0aW9uQXZhaWxhYmxlUHJvcGVydGllcyIsImhlYWRlciIsInRpdGxlIiwib1Zpc3VhbGl6YXRpb24iLCJWaXN1YWxpemF0aW9uVHlwZSIsIlRhYmxlIiwiSlNPTiIsInN0cmluZ2lmeSIsImhlYWRlckluZm9UaXRsZSIsImhlYWRlclZpc2libGUiLCJoYW5kbGVQYXRjaFNlbnQiLCJnZXRUZW1wbGF0ZVR5cGUiLCJUZW1wbGF0ZVR5cGUiLCJMaXN0UmVwb3J0IiwidXBkYXRlTGlua2VkUHJvcGVydGllcyIsImNyZWF0ZURlZmF1bHRUYWJsZVZpc3VhbGl6YXRpb24iLCJpc0JsYW5rVGFibGUiLCJnZXRDb2x1bW5zRnJvbUVudGl0eVR5cGUiLCJnZXRFbnRpdHlUeXBlIiwiY3JlYXRpb25Nb2RlIiwiQWN0aW9uSGVscGVyIiwiZ2V0Q3VycmVudEVudGl0eVNldFVwZGF0YWJsZVBhdGgiLCJyZXN0cmljdGlvbnMiLCJnZXRSZXN0cmljdGlvbnMiLCJlbnRpdHlTZXQiLCJ1cGRhdGFibGUiLCJpc1VwZGF0YWJsZSIsImlzT25seUR5bmFtaWNPbkN1cnJlbnRFbnRpdHkiLCJpc0NvbnN0YW50IiwiZXhwcmVzc2lvbiIsIm5hdmlnYXRpb25FeHByZXNzaW9uIiwiX3R5cGUiLCJ1cGRhdGFibGVFeHByZXNzaW9uIiwidXBkYXRhYmxlUHJvcGVydHlQYXRoIiwicHJvcGVydGllcyIsImFjdGlvbk5hbWUiLCJwcm9wZXJ0eU5hbWUiLCJzaXplIiwidGl0bGVQcm9wZXJ0eSIsIkFycmF5IiwiZnJvbSIsImpvaW4iLCJnZXRVSUhpZGRlbkV4cEZvckFjdGlvbnNSZXF1aXJpbmdDb250ZXh0IiwiY3VycmVudEVudGl0eVR5cGUiLCJjb250ZXh0RGF0YU1vZGVsT2JqZWN0UGF0aCIsImFVaUhpZGRlblBhdGhFeHByZXNzaW9ucyIsImRhdGFGaWVsZCIsIkFjdGlvblRhcmdldCIsImlzQm91bmQiLCJzb3VyY2VFbnRpdHlUeXBlIiwiUmVxdWlyZXNDb250ZXh0IiwidmFsdWVPZiIsIkhpZGRlbiIsImVxdWFsIiwiZ2V0SGlkZGVuRXhwcmVzc2lvbkF0VGFibGVMZXZlbCIsImdldFBhdGhGcm9tQWN0aW9uQW5ub3RhdGlvbiIsInNvdXJjZSIsImNvbnN0YW50Iiwic3Vic3RyaW5nIiwic3BsaXRQYXRoRm9yTmF2aWdhdGlvblByb3BlcnR5IiwibmF2aWdhdGlvblBhdGgiLCJpc05hdmlnYXRpb25Qcm9wZXJ0eSIsInRhcmdldE9iamVjdCIsInBhcnRuZXIiLCJwYXRoSW5Nb2RlbCIsInNsaWNlIiwidXBkYXRlTWFuaWZlc3RBY3Rpb25BbmRUYWdJdCIsImRhdGFGaWVsZElkIiwic29tZSIsImFjdGlvbktleSIsInJlcXVpcmVzU2VsZWN0aW9uIiwiaGFzQm91bmRBY3Rpb25zQWx3YXlzVmlzaWJsZUluVG9vbEJhciIsIm1hbmlmZXN0QWN0aW9uSWQiLCJnZW5lcmF0ZSIsIkFjdGlvbiIsIlNlbWFudGljT2JqZWN0IiwiQWN0aW9ucyIsImhhc0N1c3RvbUFjdGlvbnNBbHdheXNWaXNpYmxlSW5Ub29sQmFyIiwiY3VzdG9tQWN0aW9ucyIsInJlZHVjZSIsIm1lbnVBY3Rpb24iLCJ0b1N0cmluZyIsImdldFZpc2libGVFeHBGb3JDdXN0b21BY3Rpb25zUmVxdWlyaW5nQ29udGV4dCIsImFWaXNpYmxlUGF0aEV4cHJlc3Npb25zIiwicmVzb2x2ZUJpbmRpbmdTdHJpbmciLCJnZXRDYXBhYmlsaXR5UmVzdHJpY3Rpb24iLCJpc0RlbGV0YWJsZSIsImlzUGF0aERlbGV0YWJsZSIsImlzUGF0aFVwZGF0YWJsZSIsImdldFNlbGVjdGlvbk1vZGUiLCJpc0VudGl0eVNldCIsInRhcmdldENhcGFiaWxpdGllcyIsImRlbGV0ZUJ1dHRvblZpc2liaWxpdHlFeHByZXNzaW9uIiwibWFzc0VkaXRWaXNpYmlsaXR5RXhwcmVzc2lvbiIsImFyZ3VtZW50cyIsImN1dEJ1dHRvblZpc2liaWxpdHlFeHByZXNzaW9uIiwidGFibGVNYW5pZmVzdFNldHRpbmdzIiwidGFibGVUeXBlIiwidGFibGVTZXR0aW5ncyIsInNlbGVjdGlvbk1vZGUiLCJTZWxlY3Rpb25Nb2RlIiwiTXVsdGkiLCJOb25lIiwiY29tcGlsZUV4cHJlc3Npb24iLCJpZkVsc2UiLCJGb3JjZU11bHRpIiwiRm9yY2VTaW5nbGUiLCJTaW5nbGUiLCJhSGlkZGVuQmluZGluZ0V4cHJlc3Npb25zIiwiYVZpc2libGVCaW5kaW5nRXhwcmVzc2lvbnMiLCJpc1BhcmVudERlbGV0YWJsZSIsInBhcmVudEVudGl0eVNldERlbGV0YWJsZSIsIk9iamVjdFBhZ2UiLCJiTWFzc0VkaXRFbmFibGVkIiwiQXV0byIsImJ1dHRvblZpc2liaWxpdHlFeHByZXNzaW9uIiwib3IiLCJhbmQiLCJJc0VkaXRhYmxlIiwiZWRpdE1vZGVidXR0b25WaXNpYmlsaXR5RXhwcmVzc2lvbiIsImNvbmNhdCIsImNvcHlEYXRhRmllbGQiLCJnZXRDb3B5QWN0aW9uIiwiZGF0YUZpZWxkSXNDb3B5QWN0aW9uIiwiYW5ub3RhdGlvblBhdGgiLCJnZXRFbnRpdHlTZXRCYXNlZEFubm90YXRpb25QYXRoIiwiZnVsbHlRdWFsaWZpZWROYW1lIiwiS2V5SGVscGVyIiwiZ2VuZXJhdGVLZXlGcm9tRGF0YUZpZWxkIiwidmlzaWJsZUV4cHJlc3Npb24iLCJ2aXNpYmxlRm9yQ29udGV4dE1lbnVFeHByZXNzaW9uIiwidGV4dCIsIkxhYmVsIiwiTGlicmFyeSIsImdldFJlc291cmNlQnVuZGxlRm9yIiwiZ2V0VGV4dCIsImlzRGF0YUZpZWxkRm9yQWN0aW9uQWJzdHJhY3QiLCJ0YWJsZUFjdGlvbiIsImdldERhdGFGaWVsZEFubm90YXRpb25BY3Rpb24iLCJpc0RhdGFGaWVsZEZvckFjdGlvbkdyb3VwIiwiZGF0YUZpZWxkR3JvdXAiLCJEYXRhRmllbGRGb3JBY3Rpb24iLCJpc0FJT3BlcmF0aW9uIiwiaXNBY3Rpb25BSU9wZXJhdGlvbiIsIl91c2VFbmFibGVkRXhwcmVzc2lvbiIsImdldEVuYWJsZWRGb3JBbm5vdGF0aW9uQWN0aW9uIiwiRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uIiwiaWQiLCJpc01lbnVBSU9wZXJhdGlvbiIsImdldEhpZ2hsaWdodFJvd0JpbmRpbmciLCJjcml0aWNhbGl0eUFubm90YXRpb24iLCJpc0RyYWZ0Um9vdE9yTm9kZSIsInRhcmdldEVudGl0eVR5cGUiLCJkZWZhdWx0SGlnaGxpZ2h0Um93RGVmaW5pdGlvbiIsIk1lc3NhZ2VUeXBlIiwiZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uIiwiZ2V0TWVzc2FnZVR5cGVGcm9tQ3JpdGljYWxpdHlUeXBlIiwiZm9ybWF0UmVzdWx0IiwiRW50aXR5IiwiSGFzQWN0aXZlIiwiSXNBY3RpdmUiLCJJc0luYWN0aXZlIiwidGFibGVGb3JtYXR0ZXJzIiwicm93SGlnaGxpZ2h0aW5nIiwiZ2V0RXh0ZXJuYWxDcmVhdGlvbkJlaGF2aW9yIiwidGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24iLCJjcmVhdGlvbkRldGFpbHMiLCJvdXRib3VuZEtleSIsIm91dGJvdW5kQ3JlYXRpb24iLCJvdXRib3VuZCIsIm91dGJvdW5kRGV0YWlsIiwiZ2V0T3V0Ym91bmROYXZpZ2F0aW9uRW50cmllcyIsIm1vZGUiLCJDcmVhdGlvbk1vZGUiLCJFeHRlcm5hbCIsIndhcm5pbmciLCJOZXdQYWdlIiwiX2dldENyZWF0aW9uQmVoYXZpb3VyIiwiZXh0ZXJuYWxCZWhhdmlvciIsIm9yaWdpbmFsVGFibGVTZXR0aW5ncyIsIm5hdmlnYXRpb25EZXRhaWxzIiwiZGV0YWlsIiwiQ3JlYXRpb25EaWFsb2ciLCJuZXdBY3Rpb24iLCJ0YXJnZXRBbm5vdGF0aW9ucyIsInRhcmdldEFubm90YXRpb25zQ29tbW9uIiwidGFyZ2V0QW5ub3RhdGlvbnNTZXNzaW9uIiwiU2Vzc2lvbiIsIkRyYWZ0Um9vdCIsIk5ld0FjdGlvbiIsIlN0aWNreVNlc3Npb25TdXBwb3J0ZWQiLCJDcmVhdGlvblJvdyIsIkVycm9yIiwicm91dGUiLCJhcHBlbmQiLCJjcmVhdGVBdEVuZCIsIm5hdmlnYXRlVG9UYXJnZXQiLCJpbmZvIiwiX2dldFJvd0NvbmZpZ3VyYXRpb25Qcm9wZXJ0eSIsInRhcmdldFBhdGgiLCJhZ2dyZWdhdGlvbk9uTGVhZkxldmVsZW5hYmxlZCIsIm5hdmlnYXRpb25JbmZvIiwiY3JpdGljYWxpdHlQcm9wZXJ0eSIsIkNyaXRpY2FsaXR5IiwibmF2aWdhdGlvblRhcmdldCIsImRpc3BsYXkiLCJ0YXJnZXQiLCJnZXREcmFmdFJvb3QiLCJnZXREcmFmdE5vZGUiLCJjaGVja0VkaXRhYmxlIiwicm91dGVQYXRoIiwicmVjcmVhdGVDb250ZXh0Iiwicm93TmF2aWdhdGVkRXhwcmVzc2lvbiIsIm5hdmlnYXRlZFJvdyIsImFjdGlvblR5cGUiLCJyb3dOYXZpZ2F0ZWQiLCJyb3dDcml0aWNhbGl0eUZvckluc2lnaHRzIiwiY3JpdGljYWxpdHlFeHByZXNzaW9uRm9ySW50ZWdyYXRpb25DYXJkcyIsIm5vdCIsImlzTm9kZUxldmVsTmF2aWdhYmxlIiwiY3JlYXRlVGVjaG5pY2FsUHJvcGVydHkiLCJyZWxhdGVkQWRkaXRpb25hbFByb3BlcnR5TmFtZU1hcCIsImNvbHVtbkV4aXN0cyIsImFkZGl0aW9uYWxQcm9wZXJ0eSIsInRlY2huaWNhbENvbHVtbiIsIkNvbHVtblR5cGUiLCJBbm5vdGF0aW9uIiwibGFiZWwiLCJkYXRhVHlwZSIsImF2YWlsYWJpbGl0eSIsInNvcnRhYmxlIiwiaXNHcm91cGFibGUiLCJpc0tleSIsImV4cG9ydFNldHRpbmdzIiwiY2FzZVNlbnNpdGl2ZSIsImFnZ3JlZ2F0YWJsZSIsImZpbHRlcmFibGUiLCJleHRlbnNpb24iLCJ0ZWNobmljYWxseUdyb3VwYWJsZSIsInRlY2huaWNhbGx5QWdncmVnYXRhYmxlIiwiZ2V0UDEzbk1vZGUiLCJ2YXJpYW50TWFuYWdlbWVudCIsImdldFZhcmlhbnRNYW5hZ2VtZW50IiwibW9kZXMiLCJpc0FuYWx5dGljYWxUYWJsZSIsImlzUmVzcG9uc2l2ZVRhYmxlIiwicGVyc29uYWxpemF0aW9uIiwic29ydCIsImdyb3VwIiwiYWdncmVnYXRlIiwiVmFyaWFudE1hbmFnZW1lbnRUeXBlIiwiQ29udHJvbCIsIl9pc0ZpbHRlckJhckhpZGRlbiIsImlzRmlsdGVyQmFySGlkZGVuIiwiaGFzTXVsdGlwbGVWaXN1YWxpemF0aW9ucyIsIkFuYWx5dGljYWxMaXN0UGFnZSIsImdldFNvcnRDb25kaXRpb25zIiwibm9uU29ydGFibGVQcm9wZXJ0aWVzIiwiZ2V0UmVzdHJpY3Rpb25zT25Qcm9wZXJ0aWVzIiwic29ydENvbmRpdGlvbnMiLCJzb3J0ZXJzIiwiU29ydE9yZGVyIiwiY29uZGl0aW9uIiwiY29uZGl0aW9uUHJvcGVydHkiLCJQcm9wZXJ0eSIsImluZm9OYW1lIiwiY29udmVydFByb3BlcnR5UGF0aHNUb0luZm9OYW1lcyIsImRlc2NlbmRpbmciLCJEZXNjZW5kaW5nIiwiZ2V0SW5pdGlhbEV4cGFuc2lvbkxldmVsIiwibGV2ZWwiLCJJbml0aWFsRXhwYW5zaW9uTGV2ZWwiLCJwYXRocyIsImluZm9OYW1lcyIsInByb3BlcnR5SW5mbyIsImFubm90YXRpb25Db2x1bW4iLCJjdXJyZW50UGF0aCIsImdyb3VwTGV2ZWxzIiwiR3JvdXBCeSIsImFHcm91cEJ5IiwicHJvcGVydHlOYW1lRnJvbUFuYWx5dGljc0luZm8iLCJfZ2V0UHJvcGVydHlOYW1lRnJvbUFuYWx5dGljc0luZm8iLCJhZ2dyZWdhdGFibGVQcm9wZXJ0eURlZmluaXRpb24iLCJhZGRpdGlvbmFsUHJvcGVydHlJbmZvcyIsImFkZGl0aW9uYWxQcm9wZXJ0eUluZm8iLCJfdXBkYXRlRm9yVGV4dE9ubHlQcm9wZXJ0aWVzV2l0aENEUCIsInRleHRBcnJhbmdlbWVudCIsInRleHRQcm9wZXJ0eSIsImFuYWx5dGljc0luZm9Qcm9wZXJ0eU5hbWVGb3JEZXNjIiwiY29sdW1uV2l0aFRleHRPbmx5IiwidGV4dE9ubHlDb2x1bW4iLCJleHRlbnNpb25JbmZvTWFwIiwiVG90YWwiLCJhVG90YWxzIiwiY3JlYXRpb25CZWhhdmlvdXIiLCJzdGFuZGFyZEFjdGlvbnNDb250ZXh0IiwiZ2VuZXJhdGVTdGFuZGFyZEFjdGlvbnNDb250ZXh0IiwiZ2V0Q3V0VmlzaWJpbGl0eSIsImdldERlbGV0ZVZpc2liaWxpdHkiLCJtYXNzRWRpdEJ1dHRvblZpc2liaWxpdHlFeHByZXNzaW9uIiwiZ2V0TWFzc0VkaXRWaXNpYmlsaXR5IiwiaXNJbnNlcnRVcGRhdGVBY3Rpb25zVGVtcGxhdGVkIiwiZ2V0SW5zZXJ0VXBkYXRlQWN0aW9uc1RlbXBsYXRpbmciLCJpc0RyYWZ0T3JTdGlja3lTdXBwb3J0ZWQiLCJnZXRTdGFuZGFyZEFjdGlvbkN1dCIsImdldFN0YW5kYXJkQWN0aW9uQ29weSIsImdldFN0YW5kYXJkQWN0aW9uQ3JlYXRlIiwiZ2V0U3RhbmRhcmRBY3Rpb25EZWxldGUiLCJnZXRTdGFuZGFyZEFjdGlvblBhc3RlIiwiZ2V0U3RhbmRhcmRBY3Rpb25NYXNzRWRpdCIsImdldFN0YW5kYXJkQWN0aW9uSW5zaWdodHMiLCJnZXRDcmVhdGlvblJvdyIsImNvbmZpZ3VyYXRpb24iLCJnZXRTdGFuZGFyZEFjdGlvbk1vdmVVcERvd24iLCJ0eXBlTmFtZVBsdXJhbCIsIlR5cGVOYW1lUGx1cmFsIiwicGFnZU1hbmlmZXN0U2V0dGluZ3MiLCJoYXNBYnNvbHV0ZVBhdGgiLCJwMTNuTW9kZSIsImdldFRhYmxlSUQiLCJ0aHJlc2hvbGQiLCJNYXhJdGVtcyIsImlzU2VhcmNoYWJsZSIsImlzUGF0aFNlYXJjaGFibGUiLCJhcGlJZCIsImVudGl0eU5hbWUiLCJlbnRpdHlUeXBlTmFtZSIsImNvbGxlY3Rpb24iLCJnZXRUYXJnZXRPYmplY3RQYXRoIiwicm93IiwiZGlzcGxheU1vZGUiLCJpc0luRGlzcGxheU1vZGUiLCJzZWFyY2hhYmxlIiwiaW5pdGlhbEV4cGFuc2lvbkxldmVsIiwicmVxdWlyZWRQcm9wZXJ0aWVzIiwiZ2V0UmVxdWlyZWRQcm9wZXJ0aWVzIiwidGFyZ2V0TmF2aWdhdGlvblByb3BlcnR5UGF0aCIsImxhc3RJbmRleE9mIiwiZ2V0U2VsZWN0aW9uVmFyaWFudENvbmZpZ3VyYXRpb24iLCJzZWxlY3Rpb25WYXJpYW50UGF0aCIsInJlc29sdmVkVGFyZ2V0IiwiZ2V0RW50aXR5VHlwZUFubm90YXRpb24iLCJzZWxlY3Rpb24iLCJwcm9wZXJ0eU5hbWVzIiwiU2VsZWN0T3B0aW9ucyIsInNlbGVjdE9wdGlvbiIsIlByb3BlcnR5TmFtZSIsIlRleHQiLCJfZ2V0RnVsbFNjcmVlbkJhc2VkT25EZXZpY2UiLCJpc0lwaG9uZSIsImVuYWJsZUZ1bGxTY3JlZW4iLCJnZXREaWFnbm9zdGljcyIsImFkZElzc3VlIiwiSXNzdWVDYXRlZ29yeSIsIk1hbmlmZXN0IiwiSXNzdWVTZXZlcml0eSIsIkxvdyIsIklzc3VlVHlwZSIsIkZVTExTQ1JFRU5NT0RFX05PVF9PTl9MSVNUUkVQT1JUIiwiX2dldE11bHRpU2VsZWN0TW9kZSIsIm11bHRpU2VsZWN0TW9kZSIsInNlbGVjdEFsbCIsInVzZUljb25UYWJCYXIiLCJfZ2V0VGFibGVNb2RlIiwiaXNUZW1wbGF0ZUxpc3RSZXBvcnQiLCJyb3dDb3VudE1vZGUiLCJyb3dDb3VudCIsImluaXRpYWxSb3dDb3VudCIsIl9nZXRDb25kZW5zZWRUYWJsZUxheW91dCIsIl90YWJsZVR5cGUiLCJfdGFibGVTZXR0aW5ncyIsImNvbmRlbnNlZFRhYmxlTGF5b3V0IiwiX2dldFRhYmxlU2VsZWN0aW9uTGltaXQiLCJzZWxlY3Rpb25MaW1pdCIsIl9nZXRUYWJsZUlubGluZUNyZWF0aW9uUm93Q291bnQiLCJpbmxpbmVDcmVhdGlvblJvd0NvdW50IiwiX2dldEVuYWJsZUV4cG9ydCIsImVuYWJsZVBhc3RlIiwiZW5hYmxlRXhwb3J0IiwiX2dldEZyb3plbkNvbHVtbkNvdW50IiwiZnJvemVuQ29sdW1uQ291bnQiLCJfZ2V0V2lkdGhJbmNsdWRpbmdDb2x1bW5IZWFkZXIiLCJ3aWR0aEluY2x1ZGluZ0NvbHVtbkhlYWRlciIsImdldEZpbHRlckNvbmZpZ3VyYXRpb24iLCJoaWRlVGFibGVUaXRsZSIsImZpbHRlcnMiLCJxdWlja1ZhcmlhbnRTZWxlY3Rpb24iLCJxdWlja0ZpbHRlclBhdGhzIiwiZmlsdGVyUGF0aHMiLCJxdWlja0ZpbHRlcnMiLCJzaG93Q291bnRzIiwiaGlkZGVuRmlsdGVycyIsInNFbnRpdHlUeXBlIiwidXNlRW5hYmxlZEV4cHJlc3Npb24iLCJPcGVyYXRpb25BdmFpbGFibGUiLCJvdmVybG9hZEFjdGlvbiIsInNvdXJjZVR5cGUiLCJzdGF0aWNBY3Rpb24iLCJwYXJhbWV0ZXJzIiwiaXNDb2xsZWN0aW9uIiwidXBkYXRlVHJlZVRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uIiwidGFibGVDb25maWd1cmF0aW9uIiwiZGF0YU1vZGVsT2JqZWN0UGF0aCIsImhpZXJhcmNoeVBhcmVudE5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgiLCJnZXRIaWVyYXJjaHlQYXJlbnROYXZpZ2F0aW9uUHJvcGVydHlQYXRoIiwibm9uVXBkYXRhYmxlTmF2aWdhdGlvblByb3BlcnRpZXMiLCJnZXROb25VcGRhdGFibGVOYXZpZ2F0aW9uUHJvcGVydGllcyIsImlzSGllcmFyY2h5UGFyZW50Tm9kZVVwZGF0YWJsZSIsImlzTm9kZU1vdmFibGUiLCJnZXRDdXN0b21GdW5jdGlvbkluZm8iLCJpc05vZGVDb3B5YWJsZSIsImlzTW92ZVRvUG9zaXRpb25BbGxvd2VkIiwiaXNDb3B5VG9Qb3NpdGlvbkFsbG93ZWQiLCJjcmVhdGVFbmFibGVtZW50IiwiaXNDcmVhdGVFbmFibGVkIiwibm9kZVR5cGUiLCJub2RlVHlwZUluZm8iLCJjcmVhdGlvbkRpYWxvZ0ZpZWxkcyIsImdldEZpZWxkTGlzdCIsImNyZWF0aW9uRmllbGRzIiwiY3JlYXRlSW5QbGFjZSIsImxhc3REb3RJbmRleCIsIm1vZHVsZU5hbWUiLCJyZXBsYWNlIiwibWV0aG9kTmFtZSIsImFkZGl0aW9uYWxSZXF1aXJlZE1vZHVsZXMiLCJnZXRPcHRpbWlzdGljQmF0Y2hTZXR0aW5nc0Zyb21NYW5pZmVzdCIsImRpc2FibGVSZXF1ZXN0Q2FjaGUiLCJnZXRNYXNzRWRpdFNldHRpbmdzIiwiZGVmYXVsdEZpZWxkQ29uZmlndXJhdGlvbiIsInZpc2libGVGaWVsZHMiLCJpZ25vcmVkRmllbGRzIiwib3BlcmF0aW9uR3JvdXBpbmdNb2RlIiwiT3BlcmF0aW9uR3JvdXBpbmdNb2RlIiwiSXNvbGF0ZWQiLCJDaGFuZ2VTZXQiLCJlbmFibGVNYXNzRWRpdCIsImN1c3RvbUZyYWdtZW50IiwiZnJvbUlubGluZSIsImZpZWxkR3JvdXAiLCJpc0Fubm90YXRpb25PZlR5cGUiLCJEYXRhIiwiaXNEYXRhRmllbGQiLCJ0cmltIiwiY2hlY2tDb25kZW5zZWRMYXlvdXQiLCJfbWFuaWZlc3RXcmFwcGVyIiwiZ2xvYmFsRkVNYW5pZmVzdFNldHRpbmdzIiwiZ2V0U2FwRmVNYW5pZmVzdENvbmZpZ3VyYXRpb24iLCJkZWZhdWx0Q3JlYXRpb25Nb2RlIiwibWFjcm9zIiwidGFibGUiLCJJbmxpbmVDcmVhdGlvblJvd3MiLCJlbmFibGVBdXRvQ29sdW1uV2lkdGgiLCJpc1Bob25lIiwiZGlzYWJsZUNvcHlUb0NsaXBib2FyZCIsInRlbXBsYXRlVHlwZSIsImlzQ29uZGVuc2VkTGF5b3V0Q29tcGxpYW50Iiwib0ZpbHRlckNvbmZpZ3VyYXRpb24iLCJjdXN0b21WYWxpZGF0aW9uRnVuY3Rpb24iLCJleHBvcnRSZXF1ZXN0U2l6ZSIsImdldFRhYmxlVHlwZSIsInRhYmxlUm93TW9kZSIsImRlZmF1bHRTY3JvbGxUaHJlc2hvbGQiLCJpbmxpbmVDcmVhdGlvblJvd3NIaWRkZW5JbkVkaXRNb2RlIiwidXNlVGV4dEZvck5vRGF0YU1lc3NhZ2VzIiwiZ2V0VXNlVGV4dEZvck5vRGF0YU1lc3NhZ2VzIiwib0NvbmZpZ3VyYXRpb24iLCJoYXNEYXRhU3RhdGVJbmRpY2F0b3JGaWx0ZXIiLCJkaXNhYmxlQWRkUm93QnV0dG9uRm9yRW1wdHlEYXRhIiwiZW5hYmxlUGFzdGluZ09mQ29tcHV0ZWRQcm9wZXJ0aWVzIiwicmVhZE9ubHkiLCJlbmFibGVBZGRDYXJkVG9JbnNpZ2h0cyIsInNob3dSb3dDb3VudCIsImdldFZpZXdDb25maWd1cmF0aW9uIiwidXNlQ29uZGVuc2VkVGFibGVMYXlvdXQiLCJpc0NvbXBhY3RUeXBlIiwibW9kZUZvck5vRGF0YU1lc3NhZ2UiLCJzY3JvbGxUaHJlc2hvbGQiLCJiZWZvcmVSZWJpbmRUYWJsZSIsInNlbGVjdGlvbkNoYW5nZSIsInJvd1ByZXNzIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJUYWJsZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEVudGl0eVNldCwgRW50aXR5VHlwZSwgUGF0aEFubm90YXRpb25FeHByZXNzaW9uLCBQcm9wZXJ0eUFubm90YXRpb25WYWx1ZSwgUHJvcGVydHlQYXRoIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgdHlwZSB7IEVudGl0eVNldEFubm90YXRpb25zX0NvbW1vbiB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvQ29tbW9uX0VkbVwiO1xuaW1wb3J0IHR5cGUgeyBFbnRpdHlTZXRBbm5vdGF0aW9uc19TZXNzaW9uIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9TZXNzaW9uX0VkbVwiO1xuaW1wb3J0IHR5cGUge1xuXHRDcml0aWNhbGl0eSxcblx0RGF0YUZpZWxkQWJzdHJhY3RUeXBlcyxcblx0RGF0YUZpZWxkRm9yQWN0aW9uLFxuXHREYXRhRmllbGRGb3JBY3Rpb25BYnN0cmFjdFR5cGVzLFxuXHREYXRhRmllbGRGb3JBY3Rpb25Hcm91cCxcblx0RGF0YUZpZWxkRm9yQWN0aW9uVHlwZXMsXG5cdERhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbixcblx0RGF0YUZpZWxkVHlwZXMsXG5cdEZpZWxkR3JvdXAsXG5cdExpbmVJdGVtLFxuXHRQcmVzZW50YXRpb25WYXJpYW50VHlwZSxcblx0U2VsZWN0T3B0aW9uVHlwZSxcblx0U2VsZWN0aW9uVmFyaWFudCxcblx0U2VsZWN0aW9uVmFyaWFudFR5cGVcbn0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IHsgVUlBbm5vdGF0aW9uVGVybXMsIFVJQW5ub3RhdGlvblR5cGVzIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgdHlwZSB7IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiwgQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24gfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB7XG5cdGFuZCxcblx0Y29tcGlsZUV4cHJlc3Npb24sXG5cdGNvbnN0YW50LFxuXHRlcXVhbCxcblx0Zm9ybWF0UmVzdWx0LFxuXHRnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24sXG5cdGlmRWxzZSxcblx0aXNDb25zdGFudCxcblx0bm90LFxuXHRvcixcblx0cGF0aEluTW9kZWwsXG5cdHJlc29sdmVCaW5kaW5nU3RyaW5nXG59IGZyb20gXCJzYXAvZmUvYmFzZS9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHR5cGUgeyBQYWdlQ29udGV4dFBhdGhUYXJnZXQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9UZW1wbGF0ZUNvbnZlcnRlclwiO1xuaW1wb3J0IHtcblx0aXNEYXRhRmllbGQsXG5cdGlzRGF0YUZpZWxkRm9yQWN0aW9uQWJzdHJhY3QsXG5cdGlzRGF0YUZpZWxkRm9yQWN0aW9uR3JvdXAsXG5cdHZpc2libGVFeHByZXNzaW9uXG59IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2Fubm90YXRpb25zL0RhdGFGaWVsZFwiO1xuaW1wb3J0IHR5cGUge1xuXHRBbm5vdGF0aW9uQWN0aW9uLFxuXHRBbm5vdGF0aW9uQWN0aW9uR3JvdXAsXG5cdEJhc2VBY3Rpb24sXG5cdENvbWJpbmVkQWN0aW9uLFxuXHRDdXN0b21BY3Rpb24sXG5cdE92ZXJyaWRlVHlwZUFjdGlvblxufSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vQWN0aW9uXCI7XG5pbXBvcnQge1xuXHRhZGRDb2xsYWJvcmF0aW9uQ29uZGl0aW9uLFxuXHRkYXRhRmllbGRJc0NvcHlBY3Rpb24sXG5cdGdldEFjdGlvbnNGcm9tTWFuaWZlc3QsXG5cdGdldEFubm90YXRpb25NZW51QWN0aW9uSXRlbXMsXG5cdGdldENvcHlBY3Rpb24sXG5cdGdldEVuYWJsZWRGb3JBbm5vdGF0aW9uQWN0aW9uLFxuXHRnZXRNYXRjaGluZ01hbmlmZXN0QWN0aW9uLFxuXHRnZXRWaXNpYmlsaXR5RW5hYmxlbWVudE1lbnVBY3Rpb25zLFxuXHRpc0FjdGlvbkFJT3BlcmF0aW9uLFxuXHRpc01lbnVBSU9wZXJhdGlvbixcblx0cHJlcGFyZU1lbnVBY3Rpb25zLFxuXHRyZW1vdmVEdXBsaWNhdGVBY3Rpb25zXG59IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi9BY3Rpb25cIjtcbmltcG9ydCB7IE92ZXJyaWRlVHlwZSwgUGxhY2VtZW50LCBpbnNlcnRDdXN0b21FbGVtZW50cyB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2hlbHBlcnMvQ29uZmlndXJhYmxlT2JqZWN0XCI7XG5pbXBvcnQgeyBJc3N1ZUNhdGVnb3J5LCBJc3N1ZVNldmVyaXR5LCBJc3N1ZVR5cGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9oZWxwZXJzL0lzc3VlTWFuYWdlclwiO1xuaW1wb3J0IHsgS2V5SGVscGVyIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvaGVscGVycy9LZXlcIjtcbmltcG9ydCB7IEVudGl0eSwgVUkgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9CaW5kaW5nSGVscGVyXCI7XG5pbXBvcnQgTW9kZWxIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvTW9kZWxIZWxwZXJcIjtcbmltcG9ydCB7IGdlbmVyYXRlIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvU3RhYmxlSWRIZWxwZXJcIjtcbmltcG9ydCB7IGlzQW5ub3RhdGlvbk9mVHlwZSwgaXNOYXZpZ2F0aW9uUHJvcGVydHksIGlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvVHlwZUd1YXJkc1wiO1xuaW1wb3J0IHsgY3JpdGljYWxpdHlFeHByZXNzaW9uRm9ySW50ZWdyYXRpb25DYXJkcyB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0NyaXRpY2FsaXR5Rm9ybWF0dGVyc1wiO1xuaW1wb3J0IHtcblx0Z2V0SGllcmFyY2h5UGFyZW50TmF2aWdhdGlvblByb3BlcnR5UGF0aCxcblx0Z2V0Tm9uVXBkYXRhYmxlTmF2aWdhdGlvblByb3BlcnRpZXMsXG5cdGdldFRhcmdldE9iamVjdFBhdGgsXG5cdGlzUGF0aERlbGV0YWJsZSxcblx0aXNQYXRoU2VhcmNoYWJsZSxcblx0aXNQYXRoVXBkYXRhYmxlLFxuXHR0eXBlIERhdGFNb2RlbE9iamVjdFBhdGhcbn0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRGF0YU1vZGVsUGF0aEhlbHBlclwiO1xuaW1wb3J0IHsgZ2V0UmVzdHJpY3Rpb25zT25Qcm9wZXJ0aWVzIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRW50aXR5U2V0SGVscGVyXCI7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXJlc3RyaWN0ZWQtaW1wb3J0c1xuaW1wb3J0IHRhYmxlRm9ybWF0dGVycyBmcm9tIFwic2FwL2ZlL21hY3Jvcy9mb3JtYXR0ZXJzL1RhYmxlRm9ybWF0dGVyXCI7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXJlc3RyaWN0ZWQtaW1wb3J0c1xuaW1wb3J0IEFjdGlvbkhlbHBlciBmcm9tIFwic2FwL2ZlL21hY3Jvcy9pbnRlcm5hbC9oZWxwZXJzL0FjdGlvbkhlbHBlclwiO1xuaW1wb3J0IExpYnJhcnkgZnJvbSBcInNhcC91aS9jb3JlL0xpYlwiO1xuaW1wb3J0IE1lc3NhZ2VUeXBlIGZyb20gXCJzYXAvdWkvY29yZS9tZXNzYWdlL01lc3NhZ2VUeXBlXCI7XG5pbXBvcnQgdHlwZSBGb3JtQ29udGFpbmVyIGZyb20gXCJzYXAvdWkvbGF5b3V0L2Zvcm0vRm9ybUNvbnRhaW5lclwiO1xuaW1wb3J0IHR5cGUgQ29udmVydGVyQ29udGV4dCBmcm9tIFwiLi4vLi4vQ29udmVydGVyQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUge1xuXHRNYW5pZmVzdEFjdGlvbixcblx0TmF2aWdhdGlvblNldHRpbmdzQ29uZmlndXJhdGlvbixcblx0TmF2aWdhdGlvblRhcmdldENvbmZpZ3VyYXRpb24sXG5cdFRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uLFxuXHRUYWJsZU1hbmlmZXN0U2V0dGluZ3NDb25maWd1cmF0aW9uXG59IGZyb20gXCIuLi8uLi9NYW5pZmVzdFNldHRpbmdzXCI7XG5pbXBvcnQge1xuXHRBY3Rpb25UeXBlLFxuXHRDcmVhdGlvbk1vZGUsXG5cdE9wZXJhdGlvbkdyb3VwaW5nTW9kZSxcblx0U2VsZWN0aW9uTW9kZSxcblx0VGVtcGxhdGVUeXBlLFxuXHRWYXJpYW50TWFuYWdlbWVudFR5cGUsXG5cdFZpc3VhbGl6YXRpb25UeXBlXG59IGZyb20gXCIuLi8uLi9NYW5pZmVzdFNldHRpbmdzXCI7XG5pbXBvcnQgdHlwZSBNYW5pZmVzdFdyYXBwZXIgZnJvbSBcIi4uLy4uL01hbmlmZXN0V3JhcHBlclwiO1xuaW1wb3J0IHsgQWdncmVnYXRpb25IZWxwZXIgfSBmcm9tIFwiLi4vLi4vaGVscGVycy9BZ2dyZWdhdGlvblwiO1xuaW1wb3J0IHsgZ2V0VGFibGVJRCB9IGZyb20gXCIuLi8uLi9oZWxwZXJzL0lEXCI7XG5pbXBvcnQgeyBnZXRNZXNzYWdlVHlwZUZyb21Dcml0aWNhbGl0eVR5cGUgfSBmcm9tIFwiLi9Dcml0aWNhbGl0eVwiO1xuaW1wb3J0IHtcblx0Q29sdW1uVHlwZSxcblx0ZmluZENvbHVtbkJ5UGF0aCxcblx0Z2V0Q29sdW1uc0Zyb21FbnRpdHlUeXBlLFxuXHRnZXRSZXF1aXJlZFByb3BlcnRpZXMsXG5cdGdldFRhYmxlQ29sdW1ucyxcblx0dXBkYXRlTGlua2VkUHJvcGVydGllcyxcblx0dHlwZSBBbm5vdGF0aW9uVGFibGVDb2x1bW4sXG5cdHR5cGUgRXh0ZW5zaW9uRm9yQW5hbHl0aWNzLFxuXHR0eXBlIFRhYmxlQ29sdW1uXG59IGZyb20gXCIuL3RhYmxlL0NvbHVtbnNcIjtcbmltcG9ydCB0eXBlIHsgU3RhbmRhcmRBY3Rpb24gfSBmcm9tIFwiLi90YWJsZS9TdGFuZGFyZEFjdGlvbnNcIjtcbmltcG9ydCB7XG5cdFN0YW5kYXJkQWN0aW9uS2V5cyxcblx0Z2VuZXJhdGVTdGFuZGFyZEFjdGlvbnNDb250ZXh0LFxuXHRnZXRDcmVhdGlvblJvdyxcblx0Z2V0Q3V0VmlzaWJpbGl0eSxcblx0Z2V0RGVsZXRlVmlzaWJpbGl0eSxcblx0Z2V0SW5zZXJ0VXBkYXRlQWN0aW9uc1RlbXBsYXRpbmcsXG5cdGdldE1hc3NFZGl0VmlzaWJpbGl0eSxcblx0Z2V0UmVzdHJpY3Rpb25zLFxuXHRnZXRTdGFuZGFyZEFjdGlvbkNvcHksXG5cdGdldFN0YW5kYXJkQWN0aW9uQ3JlYXRlLFxuXHRnZXRTdGFuZGFyZEFjdGlvbkN1dCxcblx0Z2V0U3RhbmRhcmRBY3Rpb25EZWxldGUsXG5cdGdldFN0YW5kYXJkQWN0aW9uSW5zaWdodHMsXG5cdGdldFN0YW5kYXJkQWN0aW9uTWFzc0VkaXQsXG5cdGdldFN0YW5kYXJkQWN0aW9uTW92ZVVwRG93bixcblx0Z2V0U3RhbmRhcmRBY3Rpb25QYXN0ZSxcblx0aXNEcmFmdE9yU3RpY2t5U3VwcG9ydGVkLFxuXHRpc0luRGlzcGxheU1vZGVcbn0gZnJvbSBcIi4vdGFibGUvU3RhbmRhcmRBY3Rpb25zXCI7XG5cbnR5cGUgVXBsb2FkVGFibGVTZXR0aW5ncyA9IHtcblx0c3RyZWFtOiBzdHJpbmc7XG5cdGZpbGVOYW1lPzogc3RyaW5nO1xuXHRmaWxlTmFtZU1heExlbmd0aD86IGludDtcblx0YWNjZXB0YWJsZU1lZGlhVHlwZXM/OiBzdHJpbmdbXTtcblx0bWF4TGVuZ3RoPzogaW50O1xuXHR1cGxvYWRBY3Rpb24/OiBTdGFuZGFyZEFjdGlvbjtcbn07XG5cbnR5cGUgUm93TmF2aWdhdGlvbkluZm8gPVxuXHR8IHtcblx0XHRcdHR5cGU6IFwiT3V0Ym91bmRcIjtcblx0XHRcdG5hdmlnYXRpb25UYXJnZXQ6IHN0cmluZztcblx0XHRcdG5hdmlnYXRpb25JbkVkaXRNb2RlPzogYm9vbGVhbjtcblx0ICB9XG5cdHwge1xuXHRcdFx0dHlwZTogXCJOYXZpZ2F0aW9uXCI7XG5cdFx0XHR0YXJnZXRQYXRoOiBzdHJpbmc7XG5cdFx0XHRjaGVja0VkaXRhYmxlOiBib29sZWFuO1xuXHRcdFx0cmVjcmVhdGVDb250ZXh0OiBib29sZWFuO1xuXHRcdFx0cm91dGVQYXRoOiBzdHJpbmc7XG5cdFx0XHRuYXZpZ2F0aW9uSW5FZGl0TW9kZT86IGJvb2xlYW47XG5cdCAgfTtcblxudHlwZSBSb3dDb25maWd1cmF0aW9uID0ge1xuXHRhY3Rpb25UeXBlPzogc3RyaW5nO1xuXHRuYXZpZ2F0aW9uSW5mbz86IFJvd05hdmlnYXRpb25JbmZvO1xuXHRyb3dIaWdobGlnaHRpbmc6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uO1xuXHRyb3dOYXZpZ2F0ZWQ6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uO1xuXHRyb3dDcml0aWNhbGl0eUZvckluc2lnaHRzPzogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb247XG5cdHZpc2libGU/OiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjtcbn07XG5cbmV4cG9ydCB0eXBlIE1hc3NFZGl0VGFibGVDb25maWd1cmF0aW9uID0ge1xuXHRlbmFibGVkOiBib29sZWFuO1xuXHR2aXNpYmxlRmllbGRzOiBzdHJpbmdbXTtcblx0aWdub3JlZEZpZWxkczogc3RyaW5nW107XG5cdG9wZXJhdGlvbkdyb3VwaW5nTW9kZTogT3BlcmF0aW9uR3JvdXBpbmdNb2RlO1xuXHRjdXN0b21GcmFnbWVudD86IHN0cmluZyB8IEZvcm1Db250YWluZXI7XG5cdGZyb21JbmxpbmU/OiBib29sZWFuO1xufTtcblxudHlwZSBUYWJsZVNvcnRDb25kaXRpb25zID0ge1xuXHRzb3J0ZXJzOiB7XG5cdFx0bmFtZTogc3RyaW5nO1xuXHRcdGRlc2NlbmRpbmc6IGJvb2xlYW47XG5cdH1bXTtcbn07XG5cbnR5cGUgVGFibGVHcm91cENvbmRpdGlvbnMgPSB7XG5cdGdyb3VwTGV2ZWxzOiB7IG5hbWU6IHN0cmluZyB9W107XG59O1xuXG50eXBlIFRhYmxlQWdncmVnYXRlQ29uZGl0aW9ucyA9IFJlY29yZDxzdHJpbmcsIG9iamVjdD47XG5cbnR5cGUgVGFibGVQMTNuTW9kZSA9IFwiQWdncmVnYXRlXCIgfCBcIkNvbHVtblwiIHwgXCJGaWx0ZXJcIiB8IFwiR3JvdXBcIiB8IFwiU29ydFwiO1xuXG5leHBvcnQgdHlwZSBBbmFseXRpY2FsQ29uZmlndXJhdGlvbiA9IHtcblx0YWdncmVnYXRpb25PbkxlYWZMZXZlbD86IGJvb2xlYW47XG59O1xuXG5leHBvcnQgdHlwZSBUYWJsZUFubm90YXRpb25Db25maWd1cmF0aW9uID0ge1xuXHRjb2xsZWN0aW9uOiBzdHJpbmc7XG5cdHZhcmlhbnRNYW5hZ2VtZW50OiBWYXJpYW50TWFuYWdlbWVudFR5cGU7XG5cdGZpbHRlcklkPzogc3RyaW5nO1xuXHRpZDogc3RyaW5nO1xuXHRhcGlJZDogc3RyaW5nO1xuXHRuYXZpZ2F0aW9uUGF0aDogc3RyaW5nO1xuXHRwMTNuTW9kZT86IFRhYmxlUDEzbk1vZGVbXTtcblx0cm93PzogUm93Q29uZmlndXJhdGlvbjtcblx0c2VsZWN0aW9uTW9kZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXHRpc0luc2VydFVwZGF0ZUFjdGlvbnNUZW1wbGF0ZWQ6IGJvb2xlYW47XG5cdHVwZGF0YWJsZVByb3BlcnR5UGF0aDogc3RyaW5nO1xuXHRkaXNwbGF5TW9kZT86IGJvb2xlYW47XG5cdHRocmVzaG9sZDogbnVtYmVyO1xuXHRlbnRpdHlOYW1lOiBzdHJpbmc7XG5cdGVudGl0eVR5cGVOYW1lOiBzdHJpbmc7XG5cdHNvcnRDb25kaXRpb25zPzogVGFibGVTb3J0Q29uZGl0aW9ucztcblx0Z3JvdXBDb25kaXRpb25zPzogVGFibGVHcm91cENvbmRpdGlvbnM7XG5cdGFnZ3JlZ2F0ZUNvbmRpdGlvbnM/OiBUYWJsZUFnZ3JlZ2F0ZUNvbmRpdGlvbnM7XG5cdGluaXRpYWxFeHBhbnNpb25MZXZlbD86IG51bWJlcjtcblx0YWxsb3dEcm9wQmV0d2Vlbk5vZGVzPzogYm9vbGVhbjtcblx0Y2hhbmdlU2libGluZ0ZvclJvb3RzU3VwcG9ydGVkPzogYm9vbGVhbjtcblx0LyoqIENyZWF0ZSBuZXcgZW50cmllcyAqL1xuXHRjcmVhdGU6IENyZWF0ZUJlaGF2aW9yIHwgQ3JlYXRlQmVoYXZpb3JFeHRlcm5hbDtcblx0dGl0bGU6IHN0cmluZyB8IHVuZGVmaW5lZDtcblx0c2VhcmNoYWJsZTogYm9vbGVhbjtcblx0cmVxdWlyZWRQcm9wZXJ0aWVzPzogc3RyaW5nW107XG5cdHVwbG9hZFRhYmxlPzogVXBsb2FkVGFibGVTZXR0aW5ncztcbn07XG4vKipcbiAqIE5ldyBlbnRyaWVzIGFyZSBjcmVhdGVkIHdpdGhpbiB0aGUgYXBwIChkZWZhdWx0IGNhc2UpXG4gKi9cbmV4cG9ydCB0eXBlIENyZWF0ZUJlaGF2aW9yID0ge1xuXHRtb2RlOiBDcmVhdGlvbk1vZGU7XG5cdGFwcGVuZDogYm9vbGVhbjtcblx0bmV3QWN0aW9uPzogc3RyaW5nO1xuXHRuYXZpZ2F0ZVRvVGFyZ2V0Pzogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgRXh0ZXJuYWxNZXRob2RDb25maWcgPSB7XG5cdG1vZHVsZU5hbWU6IHN0cmluZztcblx0bWV0aG9kTmFtZTogc3RyaW5nO1xufTtcbi8qKlxuICogTmV3IGVudHJpZXMgYXJlIGNyZWF0ZWQgYnkgbmF2aWdhdGluZyB0byBzb21lIHRhcmdldFxuICovXG5leHBvcnQgdHlwZSBDcmVhdGVCZWhhdmlvckV4dGVybmFsID0ge1xuXHRtb2RlOiBcIkV4dGVybmFsXCI7XG5cdG91dGJvdW5kOiBzdHJpbmc7XG5cdG91dGJvdW5kRGV0YWlsOiBOYXZpZ2F0aW9uVGFyZ2V0Q29uZmlndXJhdGlvbltcIm91dGJvdW5kRGV0YWlsXCJdO1xufTtcbmV4cG9ydCB0eXBlIFRhYmxlQ2FwYWJpbGl0eVJlc3RyaWN0aW9uID0ge1xuXHRpc0RlbGV0YWJsZTogYm9vbGVhbjtcblx0aXNVcGRhdGFibGU6IGJvb2xlYW47XG59O1xuZXhwb3J0IHR5cGUgVGFibGVGaWx0ZXJzQ29uZmlndXJhdGlvbiA9IHtcblx0cGF0aHM6IHtcblx0XHRhbm5vdGF0aW9uUGF0aDogc3RyaW5nO1xuXHR9W107XG5cdHNob3dDb3VudHM/OiBib29sZWFuO1xufTtcbmV4cG9ydCB0eXBlIFNlbGVjdGlvblZhcmlhbnRDb25maWd1cmF0aW9uID0ge1xuXHRwcm9wZXJ0eU5hbWVzOiBzdHJpbmdbXTtcblx0dGV4dD86IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIFRhYmxlQ29udHJvbENvbmZpZ3VyYXRpb24gPSB7XG5cdGRpc2FibGVSZXF1ZXN0Q2FjaGU/OiBib29sZWFuO1xuXHRjcmVhdGVBdEVuZDogYm9vbGVhbjtcblx0Y3JlYXRlSW5QbGFjZT86IGJvb2xlYW47XG5cdGNyZWF0aW9uTW9kZTogQ3JlYXRpb25Nb2RlO1xuXHRvdXRib3VuZENyZWF0aW9uPzogc3RyaW5nO1xuXHRkaXNhYmxlQWRkUm93QnV0dG9uRm9yRW1wdHlEYXRhOiBib29sZWFuO1xuXHRjdXN0b21WYWxpZGF0aW9uRnVuY3Rpb246IHN0cmluZyB8IHVuZGVmaW5lZDtcblx0dXNlQ29uZGVuc2VkVGFibGVMYXlvdXQ6IGJvb2xlYW47XG5cdGVuYWJsZUV4cG9ydDogYm9vbGVhbjtcblx0ZW5hYmxlUGFzdGluZ09mQ29tcHV0ZWRQcm9wZXJ0aWVzPzogYm9vbGVhbjtcblx0ZnJvemVuQ29sdW1uQ291bnQ/OiBudW1iZXI7XG5cdHdpZHRoSW5jbHVkaW5nQ29sdW1uSGVhZGVyPzogYm9vbGVhbjtcblx0aGVhZGVyPzogc3RyaW5nO1xuXHRoZWFkZXJWaXNpYmxlPzogYm9vbGVhbjtcblx0ZmlsdGVycz86IFBhcnRpYWw8UmVjb3JkPFwicXVpY2tGaWx0ZXJzXCIgfCBcImhpZGRlbkZpbHRlcnNcIiwgVGFibGVGaWx0ZXJzQ29uZmlndXJhdGlvbj4+O1xuXHR0eXBlOiBUYWJsZVR5cGU7XG5cdHJvd0NvdW50TW9kZT86IFRhYmxlUm93Q291bnRNb2RlO1xuXHRyb3dDb3VudD86IG51bWJlcjtcblx0c2Nyb2xsVGhyZXNob2xkPzogbnVtYmVyO1xuXHRzZWxlY3RBbGw/OiBib29sZWFuO1xuXHRzZWxlY3Rpb25MaW1pdDogbnVtYmVyO1xuXHRtdWx0aVNlbGVjdE1vZGU6IHN0cmluZyB8IHVuZGVmaW5lZDtcblx0ZW5hYmxlUGFzdGU6IGJvb2xlYW47XG5cdGlnbm9yZWRGaWVsZHM/OiBzdHJpbmc7XG5cdHJlYWRPbmx5PzogYm9vbGVhbjtcblx0ZGlzYWJsZUNvcHlUb0NsaXBib2FyZD86IGJvb2xlYW47XG5cdGVuYWJsZUZ1bGxTY3JlZW46IGJvb2xlYW47XG5cdHNob3dSb3dDb3VudDogYm9vbGVhbjtcblx0aW5saW5lQ3JlYXRpb25Sb3dDb3VudD86IG51bWJlcjtcblx0aW5saW5lQ3JlYXRpb25Sb3dzSGlkZGVuSW5FZGl0TW9kZT86IGJvb2xlYW47XG5cdG1hc3NFZGl0OiBNYXNzRWRpdFRhYmxlQ29uZmlndXJhdGlvbjtcblx0ZW5hYmxlQXV0b0NvbHVtbldpZHRoOiBib29sZWFuO1xuXHRoYXNEYXRhU3RhdGVJbmRpY2F0b3JGaWx0ZXI6IGJvb2xlYW47XG5cdGlzQ29tcGFjdFR5cGU/OiBib29sZWFuO1xuXHRoaWVyYXJjaHlRdWFsaWZpZXI/OiBzdHJpbmc7XG5cdGlzSGllcmFyY2h5UGFyZW50Tm9kZVVwZGF0YWJsZT86IGJvb2xlYW47XG5cdGVuYWJsZUFkZENhcmRUb0luc2lnaHRzPzogYm9vbGVhbiB8IHVuZGVmaW5lZDtcblx0Y3JlYXRpb25EaWFsb2dGaWVsZHM/OiBzdHJpbmdbXTtcblx0bm9kZVR5cGU/OiB7XG5cdFx0cHJvcGVydHlOYW1lOiBzdHJpbmc7XG5cdFx0dmFsdWVzOiB7IHZhbHVlOiBzdHJpbmc7IHRleHQ6IHN0cmluZzsgY3JlYXRpb25EaWFsb2dGaWVsZHM/OiBzdHJpbmdbXSB9W107XG5cdH07XG5cdGNyZWF0ZUVuYWJsZW1lbnQ/OiBFeHRlcm5hbE1ldGhvZENvbmZpZztcblx0aXNOb2RlTW92YWJsZT86IEV4dGVybmFsTWV0aG9kQ29uZmlnO1xuXHRpc05vZGVDb3B5YWJsZT86IEV4dGVybmFsTWV0aG9kQ29uZmlnO1xuXHRpc01vdmVUb1Bvc2l0aW9uQWxsb3dlZD86IEV4dGVybmFsTWV0aG9kQ29uZmlnO1xuXHRpc0NvcHlUb1Bvc2l0aW9uQWxsb3dlZD86IEV4dGVybmFsTWV0aG9kQ29uZmlnO1xuXHRzZWxlY3Rpb25DaGFuZ2U/OiBzdHJpbmc7XG5cdGFkZGl0aW9uYWxSZXF1aXJlZE1vZHVsZXM/OiBzdHJpbmdbXTtcblx0cm93UHJlc3M/OiBzdHJpbmc7XG5cdGJlZm9yZVJlYmluZFRhYmxlPzogc3RyaW5nO1xuXHRleHBvcnRSZXF1ZXN0U2l6ZT86IG51bWJlcjtcblx0ZW5hYmxlVXBsb2FkUGx1Z2luPzogYm9vbGVhbjtcblx0bW9kZUZvck5vRGF0YU1lc3NhZ2U/OiBzdHJpbmc7XG5cdGFuYWx5dGljYWxDb25maWd1cmF0aW9uPzogQW5hbHl0aWNhbENvbmZpZ3VyYXRpb247XG59O1xuZXhwb3J0IHR5cGUgVGFibGVUeXBlID0gXCJHcmlkVGFibGVcIiB8IFwiUmVzcG9uc2l2ZVRhYmxlXCIgfCBcIkFuYWx5dGljYWxUYWJsZVwiIHwgXCJUcmVlVGFibGVcIjtcbmV4cG9ydCB0eXBlIFRhYmxlUm93Q291bnRNb2RlID0gXCJBdXRvXCIgfCBcIkZpeGVkXCIgfCBcIkludGVyYWN0aXZlXCI7XG5cbmV4cG9ydCB0eXBlIEludGVybmFsRXh0ZW5zaW9uRm9yQW5hbHl0aWNzID0gRXh0ZW5zaW9uRm9yQW5hbHl0aWNzICYge1xuXHRmcm9tR3JvdXBhYmxlUHJvcGVydHk6IGJvb2xlYW47XG5cdHJlbGF0aXZlUGF0aDogc3RyaW5nO1xufTtcbmV4cG9ydCB0eXBlIFRhYmxlVmlzdWFsaXphdGlvbiA9IHtcblx0dHlwZTogVmlzdWFsaXphdGlvblR5cGUuVGFibGU7XG5cdGFubm90YXRpb246IFRhYmxlQW5ub3RhdGlvbkNvbmZpZ3VyYXRpb247XG5cdGNvbnRyb2w6IFRhYmxlQ29udHJvbENvbmZpZ3VyYXRpb247XG5cdGNvbHVtbnM6IFRhYmxlQ29sdW1uW107XG5cdGFjdGlvbnM6IEJhc2VBY3Rpb25bXTtcblx0Y29tbWFuZEFjdGlvbnM/OiBSZWNvcmQ8c3RyaW5nLCBDdXN0b21BY3Rpb24+O1xuXHRhbmFseXRpY3NFeHRlbnNpb25zPzogUmVjb3JkPHN0cmluZywgSW50ZXJuYWxFeHRlbnNpb25Gb3JBbmFseXRpY3M+O1xuXHRyZXF1ZXN0QXRMZWFzdDogUmVxdWVzdEF0TGVhc3Q7XG5cdGVuYWJsZUFuYWx5dGljcz86IGJvb2xlYW47XG5cdGVuYWJsZUJhc2ljU2VhcmNoPzogYm9vbGVhbjtcblx0b3BlcmF0aW9uQXZhaWxhYmxlTWFwOiBzdHJpbmc7XG5cdG9wZXJhdGlvbkF2YWlsYWJsZVByb3BlcnRpZXM6IHN0cmluZztcblx0aGVhZGVySW5mb1RpdGxlOiBzdHJpbmc7XG5cdHNlbWFudGljS2V5czogc3RyaW5nW107XG5cdGhlYWRlckluZm9UeXBlTmFtZTogUHJvcGVydHlBbm5vdGF0aW9uVmFsdWU8U3RyaW5nPiB8IHVuZGVmaW5lZDtcblx0ZW5hYmxlJHNlbGVjdDogYm9vbGVhbjtcblx0ZW5hYmxlJCRnZXRLZWVwQWxpdmVDb250ZXh0OiBib29sZWFuO1xuXHRpc0luc2lnaHRzRW5hYmxlZD86IGJvb2xlYW47XG5cdGhlYWRlcj86IHN0cmluZztcblx0aGVhZGVyVmlzaWJsZT86IGJvb2xlYW47XG5cdGhhbmRsZVBhdGNoU2VudDogYm9vbGVhbjtcbn07XG5cbi8qKlxuICogUmV0dXJucyBhbiBhcnJheSBvZiBhbGwgc3RhbmRhcmQsIGFubm90YXRpb24tYmFzZWQsIGFuZCBtYW5pZmVzdC1iYXNlZCB0YWJsZSBhY3Rpb25zLlxuICogQHBhcmFtIGxpbmVJdGVtQW5ub3RhdGlvblxuICogQHBhcmFtIHZpc3VhbGl6YXRpb25QYXRoXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dFxuICogQHBhcmFtIHN0YW5kYXJkQWN0aW9uc1xuICogQHBhcmFtIG5hdmlnYXRpb25TZXR0aW5nc1xuICogQHJldHVybnMgVGhlIGNvbXBsZXRlIHRhYmxlIGFjdGlvbnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFRhYmxlQWN0aW9ucyhcblx0bGluZUl0ZW1Bbm5vdGF0aW9uOiBMaW5lSXRlbSxcblx0dmlzdWFsaXphdGlvblBhdGg6IHN0cmluZyxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHRzdGFuZGFyZEFjdGlvbnM6IFN0YW5kYXJkQWN0aW9uc0NvbmZpZ3VyYXRpb25bXCJzdGFuZGFyZEFjdGlvbnNcIl0sXG5cdG5hdmlnYXRpb25TZXR0aW5ncz86IE5hdmlnYXRpb25TZXR0aW5nc0NvbmZpZ3VyYXRpb25cbik6IENvbWJpbmVkQWN0aW9uIHtcblx0Ly8gMS4gR2V0IGFjdGlvbnMgZnJvbSBhbm5vdGF0aW9uc1xuXHRjb25zdCBpc0NvbGxhYm9yYXRpb25FbmFibGVkID0gTW9kZWxIZWxwZXIuaXNDb2xsYWJvcmF0aW9uRHJhZnRTdXBwb3J0ZWRGcm9tQ29udmVydGVyQ29udGV4dChjb252ZXJ0ZXJDb250ZXh0KTtcblxuXHRjb25zdCB0YWJsZUFjdGlvbnMgPSBnZXRUYWJsZUFubm90YXRpb25BY3Rpb25zKGxpbmVJdGVtQW5ub3RhdGlvbiwgdmlzdWFsaXphdGlvblBhdGgsIGNvbnZlcnRlckNvbnRleHQpO1xuXHQvLyAyLiBHZXQgYWN0aW9ucyBmcm9tIG1hbmlmZXN0XG5cdGNvbnN0IG1hbmlmZXN0QWN0aW9ucyA9IGdldEFjdGlvbnNGcm9tTWFuaWZlc3QoXG5cdFx0Y29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdENvbnRyb2xDb25maWd1cmF0aW9uPFRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uPih2aXN1YWxpemF0aW9uUGF0aCkuYWN0aW9ucyBhcyBSZWNvcmQ8XG5cdFx0XHRzdHJpbmcsXG5cdFx0XHRNYW5pZmVzdEFjdGlvblxuXHRcdD4sXG5cdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHR0YWJsZUFjdGlvbnMudGFibGVBY3Rpb25zLFxuXHRcdG5hdmlnYXRpb25TZXR0aW5ncyxcblx0XHR0cnVlXG5cdCk7XG5cdC8vIFRoZSBcIkNvcHlcIiBhY3Rpb24gYWx3YXlzIG5lZWRzIHRvIGJlIHBsYWNlZCBhZnRlciB0aGUgXCJDcmVhdGVcIiBhY3Rpb24sIHNvIHdlIG5lZWQgdG8gc2VwYXJhdGUgaXRcblx0Y29uc3QgY29weUFjdGlvbnMgPSB0YWJsZUFjdGlvbnMudGFibGVBY3Rpb25zLmZpbHRlcigoYSkgPT4gYS50eXBlID09PSBBY3Rpb25UeXBlLkNvcHkpO1xuXHRjb25zdCBhbm5vdGF0aW9uQWN0aW9ucyA9IHRhYmxlQWN0aW9ucy50YWJsZUFjdGlvbnMuZmlsdGVyKChhKSA9PiBhLnR5cGUgIT09IEFjdGlvblR5cGUuQ29weSk7XG5cdC8vIENvbWJpbmUgc3RhbmRhcmQsIGFubm90YXRpb24sIGFuZCBjdXN0b20gYWN0aW9ucyB0b2dldGhlciwgcmVzcGVjdGluZyB0aGUgZml4ZWQgb3JkZXIgb2Ygc3RhbmRhcmQgYWN0aW9uc1xuXHRjb25zdCBhbm5vdGF0aW9uQW5kU3RhbmRhcmRBY3Rpb25zID0gKFxuXHRcdFtcblx0XHRcdC4uLmFubm90YXRpb25BY3Rpb25zLFxuXHRcdFx0c3RhbmRhcmRBY3Rpb25zLmNyZWF0ZSxcblx0XHRcdC4uLmNvcHlBY3Rpb25zLFxuXHRcdFx0c3RhbmRhcmRBY3Rpb25zLmRlbGV0ZSxcblx0XHRcdHN0YW5kYXJkQWN0aW9ucy5tYXNzRWRpdCxcblx0XHRcdHN0YW5kYXJkQWN0aW9ucy5pbnNpZ2h0cyxcblx0XHRcdHN0YW5kYXJkQWN0aW9ucy5jcmVhdGlvblJvdywgLy8gTm90IHRlbXBsYXRlZCBhcyBhIGJ1dHRvblxuXHRcdFx0c3RhbmRhcmRBY3Rpb25zLmN1dCxcblx0XHRcdHN0YW5kYXJkQWN0aW9ucy5jb3B5LFxuXHRcdFx0c3RhbmRhcmRBY3Rpb25zLnBhc3RlLFxuXHRcdFx0c3RhbmRhcmRBY3Rpb25zLm1vdmVVcCxcblx0XHRcdHN0YW5kYXJkQWN0aW9ucy5tb3ZlRG93blxuXHRcdF0gYXMgQmFzZUFjdGlvbltdXG5cdCkuZmlsdGVyKChhY3Rpb24pID0+IGFjdGlvbiAhPT0gdW5kZWZpbmVkKTtcblx0Ly8gQW5jaG9yIGFsbCBub24tYW5jaG9yZWQgbWFuaWZlc3QgY3VzdG9tIGFjdGlvbnMvbWVudXMgYmVmb3JlIHRoZSBzdGFuZGFyZCBhY3Rpb25zXG5cdGZvciAoY29uc3QgbWFuaWZlc3RBY3Rpb24gb2YgT2JqZWN0LnZhbHVlcyhtYW5pZmVzdEFjdGlvbnMuYWN0aW9ucykpIHtcblx0XHRpZiAoKG1hbmlmZXN0QWN0aW9uLnR5cGUgPT09IEFjdGlvblR5cGUuRGVmYXVsdCB8fCBtYW5pZmVzdEFjdGlvbi50eXBlID09PSBBY3Rpb25UeXBlLk1lbnUpICYmICFtYW5pZmVzdEFjdGlvbi5wb3NpdGlvbj8uYW5jaG9yKSB7XG5cdFx0XHRtYW5pZmVzdEFjdGlvbi5wb3NpdGlvbiA9IHtcblx0XHRcdFx0YW5jaG9yOiBTdGFuZGFyZEFjdGlvbktleXMuQ3JlYXRlLFxuXHRcdFx0XHRwbGFjZW1lbnQ6IFBsYWNlbWVudC5CZWZvcmVcblx0XHRcdH07XG5cdFx0fVxuXHR9XG5cdC8vIEluc2VydCB0d2ljZSB0byBhbGxvdyByZWd1bGFyIG92ZXJyaWRlIGZvciBub24tc3RhbmRhcmQgYWN0aW9ucyBhbmQgcG9zaXRpb25hbCBvdmVycmlkZSBmb3Igc3RhbmRhcmQgYWN0aW9uc1xuXHRjb25zdCBtYW5pZmVzdEFjdGlvbkVudHJpZXMgPSBPYmplY3QuZW50cmllcyhtYW5pZmVzdEFjdGlvbnMuYWN0aW9ucyk7XG5cdGNvbnN0IHN0YW5kYXJkTWFuaWZlc3RBY3Rpb25zID0gT2JqZWN0LmZyb21FbnRyaWVzKG1hbmlmZXN0QWN0aW9uRW50cmllcy5maWx0ZXIoKFtrZXldKSA9PiBrZXkuc3RhcnRzV2l0aChcIlN0YW5kYXJkQWN0aW9uOjpcIikpKTtcblx0Y29uc3Qgbm9uU3RhbmRhcmRNYW5pZmVzdEFjdGlvbnMgPSBPYmplY3QuZnJvbUVudHJpZXMobWFuaWZlc3RBY3Rpb25FbnRyaWVzLmZpbHRlcigoW2tleV0pID0+ICFzdGFuZGFyZE1hbmlmZXN0QWN0aW9uc1trZXldKSk7XG5cdGNvbnN0IGFjdGlvbk92ZXJ3cml0ZUNvbmZpZzogT3ZlcnJpZGVUeXBlQWN0aW9uID0ge1xuXHRcdGlzTmF2aWdhYmxlOiBPdmVycmlkZVR5cGUub3ZlcndyaXRlLFxuXHRcdGVuYWJsZU9uU2VsZWN0OiBPdmVycmlkZVR5cGUub3ZlcndyaXRlLFxuXHRcdGVuYWJsZUF1dG9TY3JvbGw6IE92ZXJyaWRlVHlwZS5vdmVyd3JpdGUsXG5cdFx0ZW5hYmxlZDogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZSxcblx0XHR2aXNpYmxlOiBPdmVycmlkZVR5cGUub3ZlcndyaXRlLFxuXHRcdHZpc2libGVGb3JDb250ZXh0TWVudTogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZSxcblx0XHRkZWZhdWx0VmFsdWVzRXh0ZW5zaW9uRnVuY3Rpb246IE92ZXJyaWRlVHlwZS5vdmVyd3JpdGUsXG5cdFx0Y29tbWFuZDogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZSxcblx0XHRwb3NpdGlvbjogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZSxcblx0XHRtZW51OiBPdmVycmlkZVR5cGUub3ZlcndyaXRlXG5cdH07XG5cdC8vIDMuIEdldCBhbGwgYW5ub3RhdGlvbiBtZW51IGl0ZW1zXG5cdGNvbnN0IGFubm90YXRpb25NZW51QWN0aW9uSXRlbXMgPSBnZXRBbm5vdGF0aW9uTWVudUFjdGlvbkl0ZW1zKGFubm90YXRpb25BY3Rpb25zKTtcblx0Ly8gNC4gRmluZCBtYW5pZmVzdCBhY3Rpb25zIHdoaWNoIG92ZXJyaWRlIGFueSBhbm5vdGF0aW9uIG1lbnUgaXRlbXNcblx0Y29uc3QgbWF0Y2hpbmdNYW5pZmVzdEFjdGlvbnMgPSBnZXRNYXRjaGluZ01hbmlmZXN0QWN0aW9uKGFubm90YXRpb25NZW51QWN0aW9uSXRlbXMsIG1hbmlmZXN0QWN0aW9ucy5hY3Rpb25zKTtcblx0Ly8gNS4gR2V0IG92ZXJyaWRkZW4gYW5ub3RhdGlvbiBtZW51IGl0ZW1zXG5cdGNvbnN0IG92ZXJ3cml0dGVuTWVudUFjdGlvbkl0ZW1zID0gaW5zZXJ0Q3VzdG9tRWxlbWVudHMoYW5ub3RhdGlvbk1lbnVBY3Rpb25JdGVtcywgbWF0Y2hpbmdNYW5pZmVzdEFjdGlvbnMsIGFjdGlvbk92ZXJ3cml0ZUNvbmZpZyk7XG5cdC8vIDYuIE92ZXJyaWRlIGFsbCBhY3Rpb25zXG5cdGxldCBhY3Rpb25zID0gaW5zZXJ0Q3VzdG9tRWxlbWVudHMoYW5ub3RhdGlvbkFuZFN0YW5kYXJkQWN0aW9ucywgbm9uU3RhbmRhcmRNYW5pZmVzdEFjdGlvbnMsIGFjdGlvbk92ZXJ3cml0ZUNvbmZpZykgYXMgQ3VzdG9tQWN0aW9uW107XG5cdGFjdGlvbnMgPSBpbnNlcnRDdXN0b21FbGVtZW50cyhhY3Rpb25zLCBzdGFuZGFyZE1hbmlmZXN0QWN0aW9ucywge1xuXHRcdHBvc2l0aW9uOiBPdmVycmlkZVR5cGUub3ZlcndyaXRlXG5cdH0pO1xuXHQvLyA3LiBSZXBsYWNlIG9yaWdpbmFsIG1lbnUgaXRlbXMgd2l0aCB0aGVpciBjb3JyZXNwb25kaW5nIG92ZXJyaWRkZW4gbWVudSBpdGVtc1xuXHRwcmVwYXJlTWVudUFjdGlvbnMoYWN0aW9ucywgb3ZlcndyaXR0ZW5NZW51QWN0aW9uSXRlbXMpO1xuXHQvLyA4LiBSZW1vdmUgZHVwbGljYXRlIGFjdGlvbnMgd2hpY2ggYXJlIG1lbnUgaXRlbXNcblx0YWN0aW9ucyA9IHJlbW92ZUR1cGxpY2F0ZUFjdGlvbnMoYWN0aW9ucyk7XG5cdC8vIDkuIEhpZGUgbWVudXMgd2hlcmUgYWxsIG1lbnUgaXRlbXMgYXJlIGhpZGRlblxuXHRhY3Rpb25zID0gZ2V0VmlzaWJpbGl0eUVuYWJsZW1lbnRNZW51QWN0aW9ucyhhY3Rpb25zKTtcblx0Ly8gMTAuIEFkZCB0aGUgY29sbGFib3JhdGlvbiBjb25kaXRpb24gZm9yIGFjdGlvbnMgb3RoZXIgdGhhbiBuYXZpZ2F0aW9uXG5cdGlmIChpc0NvbGxhYm9yYXRpb25FbmFibGVkKSB7XG5cdFx0YWRkQ29sbGFib3JhdGlvbkNvbmRpdGlvbihhY3Rpb25zKTtcblx0fVxuXG5cdHJldHVybiB7XG5cdFx0YWN0aW9uczogYWN0aW9ucyxcblx0XHRjb21tYW5kQWN0aW9uczogbWFuaWZlc3RBY3Rpb25zLmNvbW1hbmRBY3Rpb25zXG5cdH07XG59XG5cbi8vUmV0dXJucyB0aGUgQ29udGV4dERlZmluaW5nUHJvcGVydGllcyBmcm9tIHRoZSBjdXN0b20gYWdncmVnYXRlIGFubm90YXRpb24gb3IgZnJvbSB0aGUgYWdncmVnYXRpb24gYW5ub3RhdGlvbiBvbiB0aGUgcHJvcGVydHkgaXRzZWxmLlxuZnVuY3Rpb24gZ2V0Q29udGV4dERlZmluaW5nUHJvcGVydGllc0Zyb21BZ2dyZWdhdGlvbkFubm90YXRpb24oYWdncmVnYXRpb25IZWxwZXI6IEFnZ3JlZ2F0aW9uSGVscGVyKTogUmVjb3JkPHN0cmluZywgc3RyaW5nW10+IHtcblx0Y29uc3QgY3VzdG9tQWdncmVnYXRlQW5ub3RhdGlvbnMgPSBhZ2dyZWdhdGlvbkhlbHBlci5nZXRDdXN0b21BZ2dyZWdhdGVEZWZpbml0aW9ucygpO1xuXHRjb25zdCBjdXN0b21BZ2dyZWdhdGVkZWZpbml0aW9uczogUmVjb3JkPHN0cmluZywgc3RyaW5nW10+ID0ge307XG5cdGN1c3RvbUFnZ3JlZ2F0ZUFubm90YXRpb25zLmZvckVhY2goKGFubm90YXRpb24pID0+IHtcblx0XHRjb25zdCBhZ2dyZWdhdGVkUHJvcGVydHkgPSBhZ2dyZWdhdGlvbkhlbHBlci5fZW50aXR5VHlwZS5lbnRpdHlQcm9wZXJ0aWVzLmZpbmQoKHByb3BlcnR5KSA9PiB7XG5cdFx0XHRyZXR1cm4gcHJvcGVydHkubmFtZSA9PT0gYW5ub3RhdGlvbi5xdWFsaWZpZXI7XG5cdFx0fSk7XG5cdFx0aWYgKGFnZ3JlZ2F0ZWRQcm9wZXJ0eSkge1xuXHRcdFx0Y29uc3QgY29udGV4dERlZmluaW5nUHJvcGVydGllcyA9XG5cdFx0XHRcdGFubm90YXRpb24uYW5ub3RhdGlvbnM/LkFnZ3JlZ2F0aW9uPy5Db250ZXh0RGVmaW5pbmdQcm9wZXJ0aWVzID8/XG5cdFx0XHRcdGFnZ3JlZ2F0ZWRQcm9wZXJ0eS5hbm5vdGF0aW9ucy5BZ2dyZWdhdGlvbj8uQ29udGV4dERlZmluaW5nUHJvcGVydGllcztcblx0XHRcdGN1c3RvbUFnZ3JlZ2F0ZWRlZmluaXRpb25zW2FnZ3JlZ2F0ZWRQcm9wZXJ0eS5uYW1lXSA9XG5cdFx0XHRcdGNvbnRleHREZWZpbmluZ1Byb3BlcnRpZXM/Lm1hcCgoY3R4RGVmUHJvcGVydHkpID0+IGN0eERlZlByb3BlcnR5LnZhbHVlKSA/PyBbXTtcblx0XHR9XG5cdH0pO1xuXHRyZXR1cm4gY3VzdG9tQWdncmVnYXRlZGVmaW5pdGlvbnM7XG59XG5cbi8qKlxuICogUmV0cmlldmUgdGhlIGV4dGVuc2lvbiBpbmZvcm1hdGlvbiBmb3IgYWxsIGFnZ3JlZ2FibGUgcHJvcGVydGllcyAuXG4gKiBAcGFyYW0gZW50aXR5VHlwZSBUaGUgdGFyZ2V0IGVudGl0eSB0eXBlLlxuICogQHBhcmFtIHRhYmxlQ29sdW1ucyBUaGUgYXJyYXkgb2YgY29sdW1ucyBmb3IgdGhlIGVudGl0eSB0eXBlLlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0LlxuICogQHJldHVybnMgVGhlIGFnZ3JlZ2F0ZSBkZWZpbml0aW9ucyBmcm9tIHRoZSBlbnRpdHlUeXBlLCBvciB1bmRlZmluZWQgaWYgdGhlIGVudGl0eSBkb2Vzbid0IHN1cHBvcnQgYW5hbHl0aWNhbCBxdWVyaWVzLlxuICovXG5leHBvcnQgY29uc3QgZ2V0RXh0ZW5zaW9uSW5mb0Zyb21FbnRpdHlUeXBlID0gZnVuY3Rpb24gKFxuXHRlbnRpdHlUeXBlOiBFbnRpdHlUeXBlLFxuXHR0YWJsZUNvbHVtbnM6IFRhYmxlQ29sdW1uW10sXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0PlxuKTogUmVjb3JkPHN0cmluZywgSW50ZXJuYWxFeHRlbnNpb25Gb3JBbmFseXRpY3M+IHwgdW5kZWZpbmVkIHtcblx0Y29uc3QgYWdncmVnYXRpb25IZWxwZXIgPSBuZXcgQWdncmVnYXRpb25IZWxwZXIoZW50aXR5VHlwZSwgY29udmVydGVyQ29udGV4dCk7XG5cdGlmICghYWdncmVnYXRpb25IZWxwZXIuaXNBbmFseXRpY3NTdXBwb3J0ZWQoKSkge1xuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblx0Ly8gS2VlcCBhIHNldCBvZiBhbGwgY3VycmVuY3kvdW5pdCBwcm9wZXJ0aWVzLCBhcyB3ZSBkb24ndCB3YW50IHRvIGNvbnNpZGVyIHRoZW0gYXMgYWdncmVnYXRlc1xuXHQvLyBUaGV5IGFyZSBhZ2dyZWdhdGVzIGZvciB0ZWNobmljYWwgcmVhc29ucyAodG8gbWFuYWdlIG11bHRpLXVuaXRzIHNpdHVhdGlvbnMpIGJ1dCBpdCBkb2Vzbid0IG1ha2Ugc2Vuc2UgZnJvbSBhIHVzZXIgc3RhbmRwb2ludFxuXHRjb25zdCBjdXJyZW5jeU9yVW5pdFByb3BlcnRpZXMgPSBuZXcgU2V0KCk7XG5cdHRhYmxlQ29sdW1ucy5mb3JFYWNoKChjb2x1bW4pID0+IHtcblx0XHRjb25zdCB0YWJsZUNvbHVtbiA9IGNvbHVtbiBhcyBBbm5vdGF0aW9uVGFibGVDb2x1bW47XG5cdFx0aWYgKHRhYmxlQ29sdW1uLnVuaXQpIHtcblx0XHRcdGNvbnN0IHRhcmdldFVuaXRQcm9wZXJ0eSA9IHRhYmxlQ29sdW1ucy5maW5kKChwcm9wKSA9PiBwcm9wLm5hbWUgPT09IHRhYmxlQ29sdW1uLnVuaXQpIGFzIEFubm90YXRpb25UYWJsZUNvbHVtbjtcblx0XHRcdGN1cnJlbmN5T3JVbml0UHJvcGVydGllcy5hZGQodGFyZ2V0VW5pdFByb3BlcnR5LnJlbGF0aXZlUGF0aCk7XG5cdFx0fVxuXHR9KTtcblx0Y29uc3QgY29udGV4dERlZmluaW5nUHJvcGVydGllc0Zyb21BZ2dyZWdhdGlvbiA9IGdldENvbnRleHREZWZpbmluZ1Byb3BlcnRpZXNGcm9tQWdncmVnYXRpb25Bbm5vdGF0aW9uKGFnZ3JlZ2F0aW9uSGVscGVyKTtcblx0Y29uc3QgcmVzdWx0OiBSZWNvcmQ8c3RyaW5nLCBJbnRlcm5hbEV4dGVuc2lvbkZvckFuYWx5dGljcz4gPSB7fTtcblx0dGFibGVDb2x1bW5zLmZvckVhY2goKGNvbHVtbikgPT4ge1xuXHRcdGNvbnN0IHRhYmxlQ29sdW1uID0gY29sdW1uIGFzIEFubm90YXRpb25UYWJsZUNvbHVtbjtcblx0XHRjb25zdCBwcm9wZXJ0eSA9IGVudGl0eVR5cGUuZW50aXR5UHJvcGVydGllcy5maW5kKChwcm9wKSA9PiBwcm9wLm5hbWUgPT09IHRhYmxlQ29sdW1uLnJlbGF0aXZlUGF0aCk7XG5cblx0XHRpZiAodGFibGVDb2x1bW4ucHJvcGVydHlJbmZvcyAhPT0gdW5kZWZpbmVkIHx8ICF0YWJsZUNvbHVtbi5yZWxhdGl2ZVBhdGgpIHtcblx0XHRcdC8vIElnbm9yZSBjb21wbGV4IGNvbHVtbnNcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRsZXQgcmF3Q29udGV4dERlZmluaW5nUHJvcGVydGllcyA9IGNvbnRleHREZWZpbmluZ1Byb3BlcnRpZXNGcm9tQWdncmVnYXRpb25bdGFibGVDb2x1bW4ucmVsYXRpdmVQYXRoXSBhcyBzdHJpbmdbXSB8IHVuZGVmaW5lZDtcblxuXHRcdC8vIGlmIHRoZXJlIGlzIG5vIGN1c3RvbSBhZ2dyZWdhdGUgZGVmaW5pdGlvbiwgYW5kIHRoZSBwcm9wZXJ0eSBpcyBncm91cGFibGUsIHRoZW4gd2UgY2FuIHVzZSB0aGUgZGVmYXVsdCBjb250ZXh0IGRlZmluaW5nIHByb3BlcnRpZXNcblx0XHRsZXQgZnJvbUdyb3VwYWJsZVByb3BlcnR5ID0gZmFsc2U7XG5cdFx0aWYgKCFyYXdDb250ZXh0RGVmaW5pbmdQcm9wZXJ0aWVzICYmIHByb3BlcnR5ICYmICEhYWdncmVnYXRpb25IZWxwZXIuaXNQcm9wZXJ0eUdyb3VwYWJsZShwcm9wZXJ0eSkpIHtcblx0XHRcdGZyb21Hcm91cGFibGVQcm9wZXJ0eSA9IHRydWU7XG5cdFx0XHRyYXdDb250ZXh0RGVmaW5pbmdQcm9wZXJ0aWVzID0gcHJvcGVydHkuYW5ub3RhdGlvbnMuQWdncmVnYXRpb24/LkNvbnRleHREZWZpbmluZ1Byb3BlcnRpZXM/Lm1hcChcblx0XHRcdFx0KGN0eERlZlByb3BlcnR5KSA9PiBjdHhEZWZQcm9wZXJ0eS52YWx1ZVxuXHRcdFx0KTtcblx0XHR9XG5cblx0XHRpZiAoIXJhd0NvbnRleHREZWZpbmluZ1Byb3BlcnRpZXMgfHwgY3VycmVuY3lPclVuaXRQcm9wZXJ0aWVzLmhhcyh0YWJsZUNvbHVtbi5yZWxhdGl2ZVBhdGgpKSB7XG5cdFx0XHQvLyBJZ25vcmUgYWdncmVnYXRlcyBjb3JyZXNwb25kaW5nIHRvIGN1cnJlbmNpZXMgb3IgdW5pdHMgb2YgbWVhc3VyZVxuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHJlc3VsdFt0YWJsZUNvbHVtbi5uYW1lXSA9IHtcblx0XHRcdGZyb21Hcm91cGFibGVQcm9wZXJ0eTogZnJvbUdyb3VwYWJsZVByb3BlcnR5LFxuXHRcdFx0cmVsYXRpdmVQYXRoOiB0YWJsZUNvbHVtbi5yZWxhdGl2ZVBhdGhcblx0XHR9O1xuXHRcdGNvbnN0IGNvbnRleHREZWZpbmluZ1Byb3BlcnRpZXM6IHN0cmluZ1tdID0gW107XG5cdFx0cmF3Q29udGV4dERlZmluaW5nUHJvcGVydGllcy5mb3JFYWNoKChjb250ZXh0RGVmaW5pbmdQcm9wZXJ0eU5hbWUpID0+IHtcblx0XHRcdC8vIElnbm9yZSBjb250ZXh0LWRlZmluaW5nIHByb3BlcnRpZXMgY29ycmVzcG9uZGluZyB0byBjdXJyZW5jaWVzIG9yIHVuaXRzIG9mIG1lYXN1cmUgb2YgYWdncmVnYXRhYmxlIHByb3BlcnRpZXNcblx0XHRcdC8vIChidXQgdGhpcyBpcyBhbGxvd2VkIGZvciBncm91cGFibGUgcHJvcGVydGllcylcblx0XHRcdGlmICghZnJvbUdyb3VwYWJsZVByb3BlcnR5ICYmIGN1cnJlbmN5T3JVbml0UHJvcGVydGllcy5oYXMoY29udGV4dERlZmluaW5nUHJvcGVydHlOYW1lKSkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IGZvdW5kQ29sdW1uID0gZmluZENvbHVtbkJ5UGF0aChjb250ZXh0RGVmaW5pbmdQcm9wZXJ0eU5hbWUsIHRhYmxlQ29sdW1ucyk7XG5cdFx0XHRpZiAoZm91bmRDb2x1bW4pIHtcblx0XHRcdFx0Y29udGV4dERlZmluaW5nUHJvcGVydGllcy5wdXNoKGZvdW5kQ29sdW1uLm5hbWUpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdGlmIChjb250ZXh0RGVmaW5pbmdQcm9wZXJ0aWVzLmxlbmd0aCkge1xuXHRcdFx0cmVzdWx0W3RhYmxlQ29sdW1uLm5hbWVdLmFkZGl0aW9uYWxQcm9wZXJ0aWVzID0gY29udGV4dERlZmluaW5nUHJvcGVydGllcztcblx0XHR9XG5cdH0pO1xuXHRyZXR1cm4gcmVzdWx0O1xufTtcbi8qKlxuICogVXBkYXRlcyBhIHRhYmxlIHZpc3VhbGl6YXRpb24gZm9yIGFuYWx5dGljYWwgdXNlIGNhc2VzLlxuICogQHBhcmFtIHRhYmxlVmlzdWFsaXphdGlvbiBUaGUgdmlzdWFsaXphdGlvbiB0byBiZSB1cGRhdGVkXG4gKiBAcGFyYW0gZW50aXR5VHlwZSBUaGUgZW50aXR5IHR5cGUgZGlzcGxheWVkIGluIHRoZSB0YWJsZVxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcGFyYW0gcHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb24gVGhlIHByZXNlbnRhdGlvblZhcmlhbnQgYW5ub3RhdGlvbiAoaWYgYW55KVxuICovXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlVGFibGVWaXN1YWxpemF0aW9uRm9yVHlwZShcblx0dGFibGVWaXN1YWxpemF0aW9uOiBUYWJsZVZpc3VhbGl6YXRpb24sXG5cdGVudGl0eVR5cGU6IEVudGl0eVR5cGUsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0cHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb24/OiBQcmVzZW50YXRpb25WYXJpYW50VHlwZVxuKTogdm9pZCB7XG5cdGlmICh0YWJsZVZpc3VhbGl6YXRpb24uY29udHJvbC50eXBlID09PSBcIkFuYWx5dGljYWxUYWJsZVwiKSB7XG5cdFx0Y29uc3QgYWdncmVnYXRpb25EYXRhID0gZ2V0RXh0ZW5zaW9uSW5mb0Zyb21FbnRpdHlUeXBlKGVudGl0eVR5cGUsIHRhYmxlVmlzdWFsaXphdGlvbi5jb2x1bW5zLCBjb252ZXJ0ZXJDb250ZXh0KSxcblx0XHRcdGFnZ3JlZ2F0aW9uSGVscGVyID0gbmV3IEFnZ3JlZ2F0aW9uSGVscGVyKGVudGl0eVR5cGUsIGNvbnZlcnRlckNvbnRleHQpO1xuXHRcdGlmIChhZ2dyZWdhdGlvbkRhdGEpIHtcblx0XHRcdHRhYmxlVmlzdWFsaXphdGlvbi5lbmFibGVBbmFseXRpY3MgPSB0cnVlO1xuXHRcdFx0dGFibGVWaXN1YWxpemF0aW9uLmVuYWJsZSRzZWxlY3QgPSBmYWxzZTtcblx0XHRcdHRhYmxlVmlzdWFsaXphdGlvbi5lbmFibGUkJGdldEtlZXBBbGl2ZUNvbnRleHQgPSBmYWxzZTtcblx0XHRcdHRhYmxlVmlzdWFsaXphdGlvbi5hbmFseXRpY3NFeHRlbnNpb25zID0gYWdncmVnYXRpb25EYXRhO1xuXHRcdFx0X3VwZGF0ZVByb3BlcnR5SW5mb3NXaXRoQWdncmVnYXRlc0RlZmluaXRpb25zKHRhYmxlVmlzdWFsaXphdGlvbik7XG5cdFx0XHRjb25zdCBhbGxvd2VkVHJhbnNmb3JtYXRpb25zID0gYWdncmVnYXRpb25IZWxwZXIuZ2V0QWxsb3dlZFRyYW5zZm9ybWF0aW9ucygpO1xuXHRcdFx0dGFibGVWaXN1YWxpemF0aW9uLmVuYWJsZUJhc2ljU2VhcmNoID0gYWxsb3dlZFRyYW5zZm9ybWF0aW9ucyA/IGFsbG93ZWRUcmFuc2Zvcm1hdGlvbnMuaW5jbHVkZXMoXCJzZWFyY2hcIikgOiB0cnVlO1xuXHRcdFx0Ly8gQWRkIGdyb3VwIGFuZCBzb3J0IGNvbmRpdGlvbnMgZnJvbSB0aGUgcHJlc2VudGF0aW9uIHZhcmlhbnRcblx0XHRcdHRhYmxlVmlzdWFsaXphdGlvbi5hbm5vdGF0aW9uLmdyb3VwQ29uZGl0aW9ucyA9IGdldEdyb3VwQ29uZGl0aW9ucyhcblx0XHRcdFx0cHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb24sXG5cdFx0XHRcdHRhYmxlVmlzdWFsaXphdGlvbi5jb2x1bW5zLFxuXHRcdFx0XHR0YWJsZVZpc3VhbGl6YXRpb24uY29udHJvbC50eXBlXG5cdFx0XHQpO1xuXHRcdFx0dGFibGVWaXN1YWxpemF0aW9uLmFubm90YXRpb24uYWdncmVnYXRlQ29uZGl0aW9ucyA9IGdldEFnZ3JlZ2F0ZUNvbmRpdGlvbnMoXG5cdFx0XHRcdHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uLFxuXHRcdFx0XHR0YWJsZVZpc3VhbGl6YXRpb24uY29sdW1ucyxcblx0XHRcdFx0YWdncmVnYXRpb25EYXRhXG5cdFx0XHQpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRMb2cuZXJyb3IoYEFnZ3JlZ2F0aW9uIG5vdCBzdXBwb3J0ZWQgZm9yIHRoaXMgZW50aXR5IHR5cGU6ICR7ZW50aXR5VHlwZS5uYW1lfWApO1xuXHRcdH1cblx0XHR0YWJsZVZpc3VhbGl6YXRpb24uY29udHJvbC50eXBlID0gXCJHcmlkVGFibGVcIjsgLy8gQW5hbHl0aWNhbFRhYmxlIGlzbid0IGEgcmVhbCB0eXBlIGZvciB0aGUgTURDOlRhYmxlLCBzbyB3ZSBhbHdheXMgc3dpdGNoIGJhY2sgdG8gR3JpZFxuXHR9IGVsc2UgaWYgKHRhYmxlVmlzdWFsaXphdGlvbi5jb250cm9sLnR5cGUgPT09IFwiUmVzcG9uc2l2ZVRhYmxlXCIpIHtcblx0XHR0YWJsZVZpc3VhbGl6YXRpb24uYW5ub3RhdGlvbi5ncm91cENvbmRpdGlvbnMgPSBnZXRHcm91cENvbmRpdGlvbnMoXG5cdFx0XHRwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbixcblx0XHRcdHRhYmxlVmlzdWFsaXphdGlvbi5jb2x1bW5zLFxuXHRcdFx0dGFibGVWaXN1YWxpemF0aW9uLmNvbnRyb2wudHlwZVxuXHRcdCk7XG5cdH0gZWxzZSBpZiAodGFibGVWaXN1YWxpemF0aW9uLmNvbnRyb2wudHlwZSA9PT0gXCJUcmVlVGFibGVcIikge1xuXHRcdGNvbnN0IGFnZ3JlZ2F0aW9uSGVscGVyID0gbmV3IEFnZ3JlZ2F0aW9uSGVscGVyKGVudGl0eVR5cGUsIGNvbnZlcnRlckNvbnRleHQpO1xuXHRcdGNvbnN0IGFsbG93ZWRUcmFuc2Zvcm1hdGlvbnMgPSBhZ2dyZWdhdGlvbkhlbHBlci5nZXRBbGxvd2VkVHJhbnNmb3JtYXRpb25zKCk7XG5cdFx0dGFibGVWaXN1YWxpemF0aW9uLmVuYWJsZUJhc2ljU2VhcmNoID0gYWxsb3dlZFRyYW5zZm9ybWF0aW9ucyA/IGFsbG93ZWRUcmFuc2Zvcm1hdGlvbnMuaW5jbHVkZXMoXCJzZWFyY2hcIikgOiB0cnVlO1xuXHRcdHRhYmxlVmlzdWFsaXphdGlvbi5lbmFibGUkJGdldEtlZXBBbGl2ZUNvbnRleHQgPSB0cnVlO1xuXHRcdHRhYmxlVmlzdWFsaXphdGlvbi5hbm5vdGF0aW9uLmNoYW5nZVNpYmxpbmdGb3JSb290c1N1cHBvcnRlZCA9IChlbnRpdHlUeXBlPy5hbm5vdGF0aW9ucy5IaWVyYXJjaHk/Lltcblx0XHRcdGBSZWN1cnNpdmVIaWVyYXJjaHlBY3Rpb25zIyR7dGFibGVWaXN1YWxpemF0aW9uLmNvbnRyb2wuaGllcmFyY2h5UXVhbGlmaWVyID8/IFwiXCJ9YFxuXHRcdF0/LkNoYW5nZVNpYmxpbmdGb3JSb290c1N1cHBvcnRlZCA/PyB0cnVlKSBhcyBib29sZWFuO1xuXG5cdFx0dGFibGVWaXN1YWxpemF0aW9uLmFubm90YXRpb24uYWxsb3dEcm9wQmV0d2Vlbk5vZGVzID1cblx0XHRcdCEhZW50aXR5VHlwZS5hbm5vdGF0aW9ucy5IaWVyYXJjaHk/LltgUmVjdXJzaXZlSGllcmFyY2h5QWN0aW9ucyMke3RhYmxlVmlzdWFsaXphdGlvbi5jb250cm9sLmhpZXJhcmNoeVF1YWxpZmllciA/PyBcIlwifWBdXG5cdFx0XHRcdD8uQ2hhbmdlTmV4dFNpYmxpbmdBY3Rpb247XG5cdH1cblxuXHQvLyBTb21lIHByb3BlcnRpZXMgYXJlIGFsd2F5cyBsb2FkZWQgYmVjYXVzZSB0aGV5IGFyZSBuZWVkZWQgYnkgb3VyIGludGVybmFsIGxvZ2ljXG5cdC8vIC0gSGFzQWN0aXZlRW50aXR5IGlzIG5lZWRlZCBmb3IgdGhlIHJvdyBjcml0aWNhbGl0eSBleHByZXNzaW9uXG5cdC8vIC0gSGFzRHJhZnRFbnRpdHkgaXMgbmVlZGVkIGluIExSIHdpdGggVHJlZVRhYmxlIGFuZCBBbmFseXRpY2FsIFRhYmxlIHRvIG5hdmlnYXRlIHRvIHRoZSBkcmFmdCBpbnN0YW5jZSBpZiB0aGVyZSdzIG9uZSB3aGVuIGNsaWNraW5nIG9uIHRoZSBhY3RpdmUgaW5zdGFuY2Vcblx0Ly8gLSBIYXNEcmFmdEVudGl0eSBhbmQgRHJhZnRBZG1pbmlzdHJhdGl2ZURhdGEuSW5Qcm9jZXNzQnlVc2VyIGFyZSBuZWVkZWQgaW4gdGhlIExSIGZvciB0aGUgZGVsZXRlIGxvZ2ljXG5cdGlmIChNb2RlbEhlbHBlci5pc09iamVjdFBhdGhEcmFmdFN1cHBvcnRlZChjb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKSkpIHtcblx0XHR0YWJsZVZpc3VhbGl6YXRpb24ucmVxdWVzdEF0TGVhc3RbXCJIYXNBY3RpdmVFbnRpdHlcIl0gPSBbXCJkcmFmdEtleXNcIl07XG5cdFx0aWYgKHRhYmxlVmlzdWFsaXphdGlvbi5jb250cm9sLmFuYWx5dGljYWxDb25maWd1cmF0aW9uPy5hZ2dyZWdhdGlvbk9uTGVhZkxldmVsKSB7XG5cdFx0XHQvLyBJc0FjdGl2ZUVudGl0eSBrZXkgaXMgbmVlZGVkIGZvciBuYXZpZ2F0aW9uIHRvIHRoZSBkcmFmdCBpbnN0YW5jZVxuXHRcdFx0dGFibGVWaXN1YWxpemF0aW9uLnJlcXVlc3RBdExlYXN0W1wiSXNBY3RpdmVFbnRpdHlcIl0gPSBbXCJkcmFmdEtleXNcIl07XG5cdFx0fVxuXG5cdFx0aWYgKE1vZGVsSGVscGVyLmlzRHJhZnRSb290KGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0KCkpKSB7XG5cdFx0XHR0YWJsZVZpc3VhbGl6YXRpb24ucmVxdWVzdEF0TGVhc3RbXCJIYXNEcmFmdEVudGl0eVwiXSA9IFtcImRyYWZ0S2V5c1wiXTtcblx0XHRcdGlmICh0YWJsZVZpc3VhbGl6YXRpb24uZW5hYmxlQW5hbHl0aWNzICE9PSB0cnVlICYmIHRhYmxlVmlzdWFsaXphdGlvbi5jb250cm9sLnR5cGUgIT09IFwiVHJlZVRhYmxlXCIpIHtcblx0XHRcdFx0Ly8gV2UgZG9uJ3QgbG9hZCBEcmFmdEFkbWluaXN0cmF0aXZlRGF0YSBmb3IgQW5hbHl0aWNhbCBhbmQgVHJlZSB0YWJsZXMgaW4gTFIgYmVjYXVzZSB0aGV5IGRpc3BsYXkgYWN0aXZlIGluc3RhbmNlcyBvbmx5XG5cdFx0XHRcdC8vICh0aGVyZWZvcmUgbm8gRHJhZnRBZG1pbmlzdHJhdGl2ZURhdGEgaXMgYXZhaWxhYmxlKVxuXHRcdFx0XHR0YWJsZVZpc3VhbGl6YXRpb24ucmVxdWVzdEF0TGVhc3RbXCJEcmFmdEFkbWluaXN0cmF0aXZlRGF0YS9JblByb2Nlc3NCeVVzZXJcIl0gPSBbXCJkcmFmdEtleXNcIl07XG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHRNb2RlbEhlbHBlci5pc0NvbGxhYm9yYXRpb25EcmFmdFN1cHBvcnRlZEZyb21Db252ZXJ0ZXJDb250ZXh0KGNvbnZlcnRlckNvbnRleHQpICYmXG5cdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKS5pc0ZjbEVuYWJsZWQoKVxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHR0YWJsZVZpc3VhbGl6YXRpb24ucmVxdWVzdEF0TGVhc3RbXCJEcmFmdEFkbWluaXN0cmF0aXZlRGF0YS9EcmFmdEFkbWluaXN0cmF0aXZlVXNlclwiXSA9IFtcImRyYWZ0S2V5c1wiXTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGlmICh0YWJsZVZpc3VhbGl6YXRpb24uY29udHJvbC5lbmFibGVVcGxvYWRQbHVnaW4pIHtcblx0XHRjb25zdCBzdHJlYW1Qcm9wZXJ0eSA9IGNvbnZlcnRlckNvbnRleHQuZ2V0QW5ub3RhdGlvbkVudGl0eVR5cGUoKS5hbm5vdGF0aW9ucz8uVUk/Lk1lZGlhUmVzb3VyY2U/LlN0cmVhbT8uJHRhcmdldDtcblx0XHRpZiAoIXN0cmVhbVByb3BlcnR5KSB7XG5cdFx0XHR0aHJvdyBcIlVJLk1lZGlhUmVzb3VyY2UgYW5ub3RhdGlvbiB3aXRoIFN0cmVhbSBwcm9wZXJ0eSBtaXNzaW5nXCI7XG5cdFx0fVxuXG5cdFx0Ly8gdGhlIHVwbG9hZCBhY3Rpb24gaXMgdHJlYXRlZCBhcyB0aGUgY3JlYXRlIGFjdGlvblxuXHRcdGNvbnN0IHVwbG9hZEFjdGlvbiA9IHRhYmxlVmlzdWFsaXphdGlvbi5hY3Rpb25zLmZpbmQoKGEpID0+IGEua2V5ID09PSBTdGFuZGFyZEFjdGlvbktleXMuQ3JlYXRlKSBhcyBTdGFuZGFyZEFjdGlvbjtcblxuXHRcdHRhYmxlVmlzdWFsaXphdGlvbi5hbm5vdGF0aW9uLnVwbG9hZFRhYmxlID0ge1xuXHRcdFx0c3RyZWFtOiBzdHJlYW1Qcm9wZXJ0eS5uYW1lLFxuXHRcdFx0ZmlsZU5hbWU6IChzdHJlYW1Qcm9wZXJ0eS5hbm5vdGF0aW9ucy5Db3JlPy5Db250ZW50RGlzcG9zaXRpb24/LkZpbGVuYW1lIGFzIFBhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbjxzdHJpbmc+IHwgdW5kZWZpbmVkKT8ucGF0aCxcblx0XHRcdGZpbGVOYW1lTWF4TGVuZ3RoOiBzdHJlYW1Qcm9wZXJ0eS5hbm5vdGF0aW9ucy5Db3JlPy5Db250ZW50RGlzcG9zaXRpb24/LkZpbGVuYW1lPy4kdGFyZ2V0Py5tYXhMZW5ndGgsXG5cdFx0XHRhY2NlcHRhYmxlTWVkaWFUeXBlczogc3RyZWFtUHJvcGVydHkuYW5ub3RhdGlvbnMuQ29yZT8uQWNjZXB0YWJsZU1lZGlhVHlwZXMsXG5cdFx0XHRtYXhMZW5ndGg6IHN0cmVhbVByb3BlcnR5Lm1heExlbmd0aCxcblx0XHRcdHVwbG9hZEFjdGlvbjogdXBsb2FkQWN0aW9uXG5cdFx0fTtcblx0fVxufVxuXG50eXBlIGZpZWxkT3JpZ2luID1cblx0fCBcInNlbWFudGljS2V5XCJcblx0fCBcInJlc3RyaWN0aW9uXCJcblx0fCBcInNlY29uZGFyeUtleVwiXG5cdHwgXCJwcmVzZW50YXRpb25WYXJpYW50XCJcblx0fCBcIm5hdmlnYXRpb25cIlxuXHR8IFwib3BlcmF0aW9uXCJcblx0fCBcImFsdGVybmF0ZUFuZFNlY29uZGFyeUtleXNcIlxuXHR8IFwiZHJhZnRLZXlzXCI7XG5leHBvcnQgdHlwZSBSZXF1ZXN0QXRMZWFzdCA9IFJlY29yZDxzdHJpbmcsIGZpZWxkT3JpZ2luW10+O1xuXG4vKipcbiAqIENyZWF0ZXMgYW5kIHJldHVybnMgYSBzZWxlY3QgcXVlcnkgd2l0aCB0aGUgc2VsZWN0ZWQgZmllbGRzIGZyb20gdGhlIHBhcmFtZXRlcnMgdGhhdCB3ZXJlIHBhc3NlZC5cbiAqIEBwYXJhbSBsaW5lSXRlbSBUaGUgTGluZUl0ZW0gd2Ugd2FudCB0aGUgcmVxdWVzdGVkIHByb3BlcnRpZXMgZnJvbS5cbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBjb252ZXJ0ZXIgY29udGV4dC5cbiAqIEBwYXJhbSBvcGVyYXRpb25BdmFpbGFibGUgQSBzdHJpbmcgY29udGFpbmluZyB0aGUgYXZhaWxhYmxlIG9wZXJhdGlvbiwgd2hpY2ggd2UnbGwgdGFrZSB0aGUgcHJvcGVydGllcyB0byBhZGQgdG8gdGhlIHNlbGVjdCBxdWVyeS5cbiAqIEBwYXJhbSBwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbiBUaGUgcHJlc2VudGF0aW9uIHZhcmlhbnQgYW5ub3RhdGlvbiB3aGljaCB3ZSdsbCB0YWtlIHRoZSBSZXF1ZXN0QXRMZWFzdCBwcm9wZXJ0aWVzIGZyb20uXG4gKiBAcmV0dXJucyBUaGUgJ3NlbGVjdCcgcXVlcnkgdGhhdCBoYXMgdGhlIHNlbGVjdGVkIGZpZWxkcyBmcm9tIHRoZSBwYXJhbWV0ZXJzIHRoYXQgd2VyZSBwYXNzZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVSZXF1ZXN0ZWRQcm9wZXJ0aWVzKFxuXHRsaW5lSXRlbTogTGluZUl0ZW0sXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdG9wZXJhdGlvbkF2YWlsYWJsZT86IHN0cmluZyxcblx0cHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb24/OiBQcmVzZW50YXRpb25WYXJpYW50VHlwZVxuKTogUmVxdWVzdEF0TGVhc3Qge1xuXHRjb25zdCBlbnRpdHlUeXBlID0gY29udmVydGVyQ29udGV4dC5nZXRBbm5vdGF0aW9uRW50aXR5VHlwZShsaW5lSXRlbSk7XG5cdGNvbnN0IHNlbGVjdGVkRmllbGRzOiBSZXF1ZXN0QXRMZWFzdCA9IHt9O1xuXHRmdW5jdGlvbiBwdXNoRmllbGQoZmllbGROYW1lOiBzdHJpbmcsIG9yaWdpbjogZmllbGRPcmlnaW4pOiB2b2lkIHtcblx0XHRpZiAoZmllbGROYW1lICYmIGZpZWxkTmFtZS5pbmRleE9mKFwiL1wiKSAhPT0gMCkge1xuXHRcdFx0Ly8gRG8gbm90IGFkZCBzaW5nbGV0b24gcHJvcGVydHkgKHdpdGggYWJzb2x1dGUgcGF0aCkgdG8gJHNlbGVjdFxuXHRcdFx0aWYgKCFzZWxlY3RlZEZpZWxkc1tmaWVsZE5hbWVdKSB7XG5cdFx0XHRcdHNlbGVjdGVkRmllbGRzW2ZpZWxkTmFtZV0gPSBbb3JpZ2luXTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHNlbGVjdGVkRmllbGRzW2ZpZWxkTmFtZV0ucHVzaChvcmlnaW4pO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGZ1bmN0aW9uIHB1c2hGaWVsZExpc3QoZmllbGRzOiBzdHJpbmdbXSwgb3JpZ2luOiBmaWVsZE9yaWdpbik6IHZvaWQge1xuXHRcdGlmIChmaWVsZHM/Lmxlbmd0aCkge1xuXHRcdFx0ZmllbGRzLmZvckVhY2goKGZpZWxkKSA9PiBwdXNoRmllbGQoZmllbGQsIG9yaWdpbikpO1xuXHRcdH1cblx0fVxuXG5cdGNvbnN0IG9wZXJhdGlvbkF2YWlsYWJsZVByb3BlcnRpZXMgPSAob3BlcmF0aW9uQXZhaWxhYmxlIHx8IFwiXCIpLnNwbGl0KFwiLFwiKTtcblx0Y29uc3QgdmFsaWRQcm9wZXJ0aWVzID0gb3BlcmF0aW9uQXZhaWxhYmxlUHJvcGVydGllcy5maWx0ZXIoZnVuY3Rpb24gKHByb3BOYW1lOiBzdHJpbmcpIHtcblx0XHRyZXR1cm4gZW50aXR5VHlwZS5yZXNvbHZlUGF0aChwcm9wTmFtZSk7XG5cdH0pO1xuXHRjb25zdCBzZW1hbnRpY0tleXM6IHN0cmluZ1tdID0gKGVudGl0eVR5cGUuYW5ub3RhdGlvbnMuQ29tbW9uPy5TZW1hbnRpY0tleSB8fCBbXSkubWFwKChzZW1hbnRpY0tleSkgPT4gc2VtYW50aWNLZXkudmFsdWUpO1xuXHRjb25zdCBjYXBhYmlsaXRpZXNBbm5vdGF0aW9uID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXQoKT8uYW5ub3RhdGlvbnM/LkNhcGFiaWxpdGllcztcblx0Y29uc3QgYWx0ZXJuYXRlQW5kU2Vjb25kYXJ5S2V5cyA9IE1vZGVsSGVscGVyLmdldEFsdGVybmF0ZUFuZFNlY29uZGFyeUtleXMoZW50aXR5VHlwZSwgY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXQoKSBhcyBFbnRpdHlTZXQpO1xuXHRpZiAocHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb24pIHtcblx0XHRwdXNoRmllbGRMaXN0KHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uLlJlcXVlc3RBdExlYXN0Py5tYXAoKHByb3BlcnR5UGF0aCkgPT4gcHJvcGVydHlQYXRoLnZhbHVlKSwgXCJwcmVzZW50YXRpb25WYXJpYW50XCIpO1xuXHR9XG5cdHB1c2hGaWVsZExpc3QoZ2V0TmF2aWdhdGlvbkF2YWlsYWJsZUZpZWxkc0Zyb21MaW5lSXRlbShsaW5lSXRlbSwgZW50aXR5VHlwZSksIFwibmF2aWdhdGlvblwiKTtcblx0cHVzaEZpZWxkTGlzdCh2YWxpZFByb3BlcnRpZXMsIFwib3BlcmF0aW9uXCIpO1xuXHRwdXNoRmllbGRMaXN0KHNlbWFudGljS2V5cywgXCJzZW1hbnRpY0tleVwiKTtcblx0cHVzaEZpZWxkTGlzdChhbHRlcm5hdGVBbmRTZWNvbmRhcnlLZXlzLCBcImFsdGVybmF0ZUFuZFNlY29uZGFyeUtleXNcIik7XG5cdGlmIChjYXBhYmlsaXRpZXNBbm5vdGF0aW9uKSB7XG5cdFx0cHVzaEZpZWxkKChjYXBhYmlsaXRpZXNBbm5vdGF0aW9uLkRlbGV0ZVJlc3RyaWN0aW9ucz8uRGVsZXRhYmxlIGFzIFBhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbjxib29sZWFuPik/LnBhdGgsIFwicmVzdHJpY3Rpb25cIik7XG5cdFx0cHVzaEZpZWxkKChjYXBhYmlsaXRpZXNBbm5vdGF0aW9uLlVwZGF0ZVJlc3RyaWN0aW9ucz8uVXBkYXRhYmxlIGFzIFBhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbjxib29sZWFuPik/LnBhdGgsIFwicmVzdHJpY3Rpb25cIik7XG5cdH1cblxuXHRyZXR1cm4gc2VsZWN0ZWRGaWVsZHM7XG59XG5cbi8qKlxuICogVGhpcyByZXR1cm4gdGhlIHByb3BlcnR5IHRoYXQgYXJlIGF2YWlsYWJsZSBmcm9tIHRoZSBOYXZpZ2F0aW9uQXZhaWxhYmxlIGFubm90YXRpb24gb24gSUJOIEZpZWxkcy5cbiAqIEBwYXJhbSBsaW5lSXRlbSBUaGUgbGluZSBpdGVtIGFubm90YXRpb24uXG4gKiBAcGFyYW0gZW50aXR5VHlwZSBUaGUgRW50aXR5IFR5cGUuXG4gKiBAcmV0dXJucyBBbiBhcnJheSBjb250YWluaW5nIHRoZSBwcm9wZXJ0aWVzIG5hbWUuXG4gKi9cbmZ1bmN0aW9uIGdldE5hdmlnYXRpb25BdmFpbGFibGVGaWVsZHNGcm9tTGluZUl0ZW0obGluZUl0ZW06IExpbmVJdGVtLCBlbnRpdHlUeXBlOiBFbnRpdHlUeXBlKTogc3RyaW5nW10ge1xuXHRjb25zdCBzZWxlY3RlZEZpZWxkczogc3RyaW5nW10gPSBbXTtcblx0bGluZUl0ZW0uZm9yRWFjaChmdW5jdGlvbiAocmVjb3JkKSB7XG5cdFx0aWYgKFxuXHRcdFx0cmVjb3JkLiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24gJiZcblx0XHRcdCFyZWNvcmQuSW5saW5lICYmXG5cdFx0XHQhcmVjb3JkLkRldGVybWluaW5nICYmXG5cdFx0XHRpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbihyZWNvcmQuTmF2aWdhdGlvbkF2YWlsYWJsZSlcblx0XHQpIHtcblx0XHRcdGNvbnN0IHBhdGggPSAocmVjb3JkLk5hdmlnYXRpb25BdmFpbGFibGUgYXMgdW5rbm93biBhcyB7IHBhdGg6IHN0cmluZyB9KS5wYXRoO1xuXHRcdFx0aWYgKGVudGl0eVR5cGUucmVzb2x2ZVBhdGgocGF0aCkpIHtcblx0XHRcdFx0c2VsZWN0ZWRGaWVsZHMucHVzaChwYXRoKTtcblx0XHRcdH1cblx0XHR9XG5cdH0pO1xuXHRyZXR1cm4gc2VsZWN0ZWRGaWVsZHM7XG59XG5cbi8qKlxuICogR2V0IHRoZSBuYXZpZ2F0aW9uIHRhcmdldCBwYXRoIGZyb20gbWFuaWZlc3Qgc2V0dGluZ3MuXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgY29udmVydGVyIGNvbnRleHRcbiAqIEBwYXJhbSBuYXZpZ2F0aW9uUHJvcGVydHlQYXRoIFRoZSBuYXZpZ2F0aW9uIHBhdGggdG8gY2hlY2sgaW4gdGhlIG1hbmlmZXN0IHNldHRpbmdzXG4gKiBAcmV0dXJucyBOYXZpZ2F0aW9uIHBhdGggZnJvbSBtYW5pZmVzdCBzZXR0aW5nc1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TmF2aWdhdGlvblRhcmdldFBhdGgoY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LCBuYXZpZ2F0aW9uUHJvcGVydHlQYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuXHRjb25zdCBtYW5pZmVzdFdyYXBwZXIgPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpO1xuXHRpZiAobmF2aWdhdGlvblByb3BlcnR5UGF0aCAmJiBtYW5pZmVzdFdyYXBwZXIuZ2V0TmF2aWdhdGlvbkNvbmZpZ3VyYXRpb24obmF2aWdhdGlvblByb3BlcnR5UGF0aCkpIHtcblx0XHRjb25zdCBuYXZDb25maWcgPSBtYW5pZmVzdFdyYXBwZXIuZ2V0TmF2aWdhdGlvbkNvbmZpZ3VyYXRpb24obmF2aWdhdGlvblByb3BlcnR5UGF0aCk7XG5cdFx0aWYgKE9iamVjdC5rZXlzKG5hdkNvbmZpZykubGVuZ3RoID4gMCkge1xuXHRcdFx0cmV0dXJuIG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGg7XG5cdFx0fVxuXHR9XG5cdGNvbnN0IGRhdGFNb2RlbFBhdGggPSBjb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKTtcblx0Y29uc3QgY29udGV4dFBhdGggPSBjb252ZXJ0ZXJDb250ZXh0LmdldENvbnRleHRQYXRoKCk7XG5cdGNvbnN0IG5hdkNvbmZpZ0ZvckNvbnRleHRQYXRoID0gbWFuaWZlc3RXcmFwcGVyLmdldE5hdmlnYXRpb25Db25maWd1cmF0aW9uKGNvbnRleHRQYXRoKTtcblx0aWYgKG5hdkNvbmZpZ0ZvckNvbnRleHRQYXRoICYmIE9iamVjdC5rZXlzKG5hdkNvbmZpZ0ZvckNvbnRleHRQYXRoKS5sZW5ndGggPiAwKSB7XG5cdFx0cmV0dXJuIGNvbnRleHRQYXRoO1xuXHR9XG5cdHJldHVybiBkYXRhTW9kZWxQYXRoLnRhcmdldEVudGl0eVNldCA/IGRhdGFNb2RlbFBhdGgudGFyZ2V0RW50aXR5U2V0Lm5hbWUgOiBkYXRhTW9kZWxQYXRoLnN0YXJ0aW5nRW50aXR5U2V0Lm5hbWU7XG59XG5cbmZ1bmN0aW9uIGdldFNlbWFudGljS2V5c0FuZFRpdGxlSW5mbyhjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4pOiB7XG5cdGhlYWRlckluZm9UaXRsZVBhdGg6IHN0cmluZztcblx0c2VtYW50aWNLZXlDb2x1bW5zOiBzdHJpbmdbXTtcblx0aGVhZGVySW5mb1R5cGVOYW1lOiBQcm9wZXJ0eUFubm90YXRpb25WYWx1ZTxTdHJpbmc+IHwgdW5kZWZpbmVkO1xufSB7XG5cdGNvbnN0IGhlYWRlckluZm9UaXRsZVBhdGggPSAoY29udmVydGVyQ29udGV4dC5nZXRBbm5vdGF0aW9uRW50aXR5VHlwZSgpPy5hbm5vdGF0aW9ucz8uVUk/LkhlYWRlckluZm8/LlRpdGxlIGFzIERhdGFGaWVsZFR5cGVzKT8uVmFsdWVcblx0XHQ/LnBhdGg7XG5cdGNvbnN0IHNlbWFudGljS2V5QW5ub3RhdGlvbnMgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEFubm90YXRpb25FbnRpdHlUeXBlKCk/LmFubm90YXRpb25zPy5Db21tb24/LlNlbWFudGljS2V5O1xuXHRjb25zdCBoZWFkZXJJbmZvVHlwZU5hbWUgPSBjb252ZXJ0ZXJDb250ZXh0Py5nZXRBbm5vdGF0aW9uRW50aXR5VHlwZSgpPy5hbm5vdGF0aW9ucz8uVUk/LkhlYWRlckluZm8/LlR5cGVOYW1lO1xuXHRjb25zdCBzZW1hbnRpY0tleUNvbHVtbnM6IHN0cmluZ1tdID0gW107XG5cdGlmIChzZW1hbnRpY0tleUFubm90YXRpb25zKSB7XG5cdFx0c2VtYW50aWNLZXlBbm5vdGF0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uIChvQ29sdW1uKSB7XG5cdFx0XHRzZW1hbnRpY0tleUNvbHVtbnMucHVzaChvQ29sdW1uLnZhbHVlKTtcblx0XHR9KTtcblx0fVxuXHRyZXR1cm4geyBoZWFkZXJJbmZvVGl0bGVQYXRoLCBzZW1hbnRpY0tleUNvbHVtbnMsIGhlYWRlckluZm9UeXBlTmFtZSB9O1xufVxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVRhYmxlVmlzdWFsaXphdGlvbihcblx0bGluZUl0ZW1Bbm5vdGF0aW9uOiBMaW5lSXRlbSxcblx0dmlzdWFsaXphdGlvblBhdGg6IHN0cmluZyxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHRwYXJhbXM/OiBQYXJ0aWFsPHtcblx0XHRwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbjogUHJlc2VudGF0aW9uVmFyaWFudFR5cGU7XG5cdFx0c2VsZWN0aW9uVmFyaWFudEFubm90YXRpb246IFNlbGVjdGlvblZhcmlhbnRUeXBlO1xuXHRcdGlzQ29uZGVuc2VkVGFibGVMYXlvdXRDb21wbGlhbnQ6IGJvb2xlYW47XG5cdH0+XG4pOiBUYWJsZVZpc3VhbGl6YXRpb24ge1xuXHRjb25zdCB7IHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uLCBpc0NvbmRlbnNlZFRhYmxlTGF5b3V0Q29tcGxpYW50LCBzZWxlY3Rpb25WYXJpYW50QW5ub3RhdGlvbiB9ID0gcGFyYW1zID8/IHt9O1xuXHRjb25zdCB0YWJsZU1hbmlmZXN0Q29uZmlnID0gZ2V0VGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24oXG5cdFx0bGluZUl0ZW1Bbm5vdGF0aW9uLFxuXHRcdHZpc3VhbGl6YXRpb25QYXRoLFxuXHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0aXNDb25kZW5zZWRUYWJsZUxheW91dENvbXBsaWFudCxcblx0XHRzZWxlY3Rpb25WYXJpYW50QW5ub3RhdGlvblxuXHQpO1xuXHRjb25zdCB7IG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGggfSA9IHNwbGl0UGF0aCh2aXN1YWxpemF0aW9uUGF0aCk7XG5cdGNvbnN0IG5hdmlnYXRpb25UYXJnZXRQYXRoID0gZ2V0TmF2aWdhdGlvblRhcmdldFBhdGgoY29udmVydGVyQ29udGV4dCwgbmF2aWdhdGlvblByb3BlcnR5UGF0aCk7XG5cdGNvbnN0IG5hdmlnYXRpb25TZXR0aW5ncyA9IGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCkuZ2V0TmF2aWdhdGlvbkNvbmZpZ3VyYXRpb24obmF2aWdhdGlvblRhcmdldFBhdGgpO1xuXHRjb25zdCBjb2x1bW5zID0gZ2V0VGFibGVDb2x1bW5zKGxpbmVJdGVtQW5ub3RhdGlvbiwgdGFibGVNYW5pZmVzdENvbmZpZy50eXBlLCB2aXN1YWxpemF0aW9uUGF0aCwgY29udmVydGVyQ29udGV4dCk7XG5cdGNvbnN0IG9wZXJhdGlvbkF2YWlsYWJsZU1hcCA9IGdldE9wZXJhdGlvbkF2YWlsYWJsZU1hcChsaW5lSXRlbUFubm90YXRpb24sIGNvbnZlcnRlckNvbnRleHQpO1xuXHRjb25zdCBzZW1hbnRpY0tleXNBbmRIZWFkZXJJbmZvVGl0bGUgPSBnZXRTZW1hbnRpY0tleXNBbmRUaXRsZUluZm8oY29udmVydGVyQ29udGV4dCk7XG5cdGNvbnN0IHN0YW5kYXJkQWN0aW9uc0NvbmZpZ3VyYXRpb24gPSBnZXRTdGFuZGFyZEFjdGlvbnNDb25maWd1cmF0aW9uKFxuXHRcdGxpbmVJdGVtQW5ub3RhdGlvbixcblx0XHR2aXN1YWxpemF0aW9uUGF0aCxcblx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdHRhYmxlTWFuaWZlc3RDb25maWcsXG5cdFx0bmF2aWdhdGlvblNldHRpbmdzXG5cdCk7XG5cdGNvbnN0IHRhYmxlQW5ub3RhdGlvbiA9IGdldFRhYmxlQW5ub3RhdGlvbkNvbmZpZ3VyYXRpb24oXG5cdFx0bGluZUl0ZW1Bbm5vdGF0aW9uLFxuXHRcdHZpc3VhbGl6YXRpb25QYXRoLFxuXHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0dGFibGVNYW5pZmVzdENvbmZpZyxcblx0XHRjb2x1bW5zLFxuXHRcdG5hdmlnYXRpb25TZXR0aW5ncyxcblx0XHRzdGFuZGFyZEFjdGlvbnNDb25maWd1cmF0aW9uLFxuXHRcdHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uXG5cdCk7XG5cdGNvbnN0IHRhYmxlQWN0aW9ucyA9IGdldFRhYmxlQWN0aW9ucyhcblx0XHRsaW5lSXRlbUFubm90YXRpb24sXG5cdFx0dmlzdWFsaXphdGlvblBhdGgsXG5cdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHRzdGFuZGFyZEFjdGlvbnNDb25maWd1cmF0aW9uLnN0YW5kYXJkQWN0aW9ucyxcblx0XHRuYXZpZ2F0aW9uU2V0dGluZ3Ncblx0KTtcblx0Y29uc3Qgb3BlcmF0aW9uQXZhaWxhYmxlID0gZ2V0T3BlcmF0aW9uQXZhaWxhYmxlUHJvcGVydGllcyhvcGVyYXRpb25BdmFpbGFibGVNYXAsIGNvbnZlcnRlckNvbnRleHQpO1xuXHRsZXQgaGVhZGVyID0gdGFibGVNYW5pZmVzdENvbmZpZy5oZWFkZXI7XG5cdGhlYWRlciA/Pz0gdGFibGVBbm5vdGF0aW9uLnRpdGxlID09PSBcIlwiID8gdW5kZWZpbmVkIDogdGFibGVBbm5vdGF0aW9uLnRpdGxlO1xuXHRjb25zdCBvVmlzdWFsaXphdGlvbjogVGFibGVWaXN1YWxpemF0aW9uID0ge1xuXHRcdHR5cGU6IFZpc3VhbGl6YXRpb25UeXBlLlRhYmxlLFxuXHRcdGFubm90YXRpb246IHRhYmxlQW5ub3RhdGlvbixcblx0XHRjb250cm9sOiB0YWJsZU1hbmlmZXN0Q29uZmlnLFxuXHRcdGFjdGlvbnM6IHRhYmxlQWN0aW9ucy5hY3Rpb25zLFxuXHRcdGNvbW1hbmRBY3Rpb25zOiB0YWJsZUFjdGlvbnMuY29tbWFuZEFjdGlvbnMsXG5cdFx0Y29sdW1uczogY29sdW1ucyxcblx0XHRvcGVyYXRpb25BdmFpbGFibGVNYXA6IEpTT04uc3RyaW5naWZ5KG9wZXJhdGlvbkF2YWlsYWJsZU1hcCksXG5cdFx0b3BlcmF0aW9uQXZhaWxhYmxlUHJvcGVydGllczogb3BlcmF0aW9uQXZhaWxhYmxlLFxuXHRcdGhlYWRlckluZm9UaXRsZTogc2VtYW50aWNLZXlzQW5kSGVhZGVySW5mb1RpdGxlLmhlYWRlckluZm9UaXRsZVBhdGgsXG5cdFx0c2VtYW50aWNLZXlzOiBzZW1hbnRpY0tleXNBbmRIZWFkZXJJbmZvVGl0bGUuc2VtYW50aWNLZXlDb2x1bW5zLFxuXHRcdGhlYWRlckluZm9UeXBlTmFtZTogc2VtYW50aWNLZXlzQW5kSGVhZGVySW5mb1RpdGxlLmhlYWRlckluZm9UeXBlTmFtZSxcblx0XHRlbmFibGUkc2VsZWN0OiB0cnVlLFxuXHRcdGVuYWJsZSQkZ2V0S2VlcEFsaXZlQ29udGV4dDogdHJ1ZSxcblx0XHRoZWFkZXI6IGhlYWRlcixcblx0XHRoZWFkZXJWaXNpYmxlOiB0YWJsZU1hbmlmZXN0Q29uZmlnLmhlYWRlclZpc2libGUsXG5cdFx0cmVxdWVzdEF0TGVhc3Q6IGNyZWF0ZVJlcXVlc3RlZFByb3BlcnRpZXMobGluZUl0ZW1Bbm5vdGF0aW9uLCBjb252ZXJ0ZXJDb250ZXh0LCBvcGVyYXRpb25BdmFpbGFibGUsIHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uKSxcblx0XHRoYW5kbGVQYXRjaFNlbnQ6IGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCkuZ2V0VGVtcGxhdGVUeXBlKCkgIT09IFRlbXBsYXRlVHlwZS5MaXN0UmVwb3J0XG5cdH07XG5cdHVwZGF0ZUxpbmtlZFByb3BlcnRpZXMoY29udmVydGVyQ29udGV4dCwgY29sdW1ucyk7XG5cdHVwZGF0ZVRhYmxlVmlzdWFsaXphdGlvbkZvclR5cGUoXG5cdFx0b1Zpc3VhbGl6YXRpb24sXG5cdFx0Y29udmVydGVyQ29udGV4dC5nZXRBbm5vdGF0aW9uRW50aXR5VHlwZShsaW5lSXRlbUFubm90YXRpb24pLFxuXHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0cHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb25cblx0KTtcblx0cmV0dXJuIG9WaXN1YWxpemF0aW9uO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZURlZmF1bHRUYWJsZVZpc3VhbGl6YXRpb24oXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0aXNCbGFua1RhYmxlPzogYm9vbGVhblxuKTogVGFibGVWaXN1YWxpemF0aW9uIHtcblx0Y29uc3QgdGFibGVNYW5pZmVzdENvbmZpZyA9IGdldFRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uKHVuZGVmaW5lZCwgXCJcIiwgY29udmVydGVyQ29udGV4dCwgZmFsc2UpO1xuXHRjb25zdCBjb2x1bW5zID0gZ2V0Q29sdW1uc0Zyb21FbnRpdHlUeXBlKFxuXHRcdHt9LFxuXHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpLFxuXHRcdFtdLFxuXHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0dGFibGVNYW5pZmVzdENvbmZpZy50eXBlLFxuXHRcdHRhYmxlTWFuaWZlc3RDb25maWcuY3JlYXRpb25Nb2RlLFxuXHRcdHt9XG5cdCk7XG5cdGNvbnN0IG9wZXJhdGlvbkF2YWlsYWJsZU1hcCA9IGdldE9wZXJhdGlvbkF2YWlsYWJsZU1hcCh1bmRlZmluZWQsIGNvbnZlcnRlckNvbnRleHQpO1xuXHRjb25zdCBzZW1hbnRpY0tleXNBbmRIZWFkZXJJbmZvVGl0bGUgPSBnZXRTZW1hbnRpY0tleXNBbmRUaXRsZUluZm8oY29udmVydGVyQ29udGV4dCk7XG5cdGNvbnN0IG5hdmlnYXRpb25UYXJnZXRQYXRoID0gZ2V0TmF2aWdhdGlvblRhcmdldFBhdGgoY29udmVydGVyQ29udGV4dCwgXCJcIik7XG5cdGNvbnN0IG5hdmlnYXRpb25TZXR0aW5ncyA9IGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCkuZ2V0TmF2aWdhdGlvbkNvbmZpZ3VyYXRpb24obmF2aWdhdGlvblRhcmdldFBhdGgpO1xuXHRjb25zdCBzdGFuZGFyZEFjdGlvbnNDb25maWd1cmF0aW9uID0gZ2V0U3RhbmRhcmRBY3Rpb25zQ29uZmlndXJhdGlvbihcblx0XHR1bmRlZmluZWQsXG5cdFx0XCJcIixcblx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdHRhYmxlTWFuaWZlc3RDb25maWcsXG5cdFx0bmF2aWdhdGlvblNldHRpbmdzXG5cdCk7XG5cdGNvbnN0IG9WaXN1YWxpemF0aW9uOiBUYWJsZVZpc3VhbGl6YXRpb24gPSB7XG5cdFx0dHlwZTogVmlzdWFsaXphdGlvblR5cGUuVGFibGUsXG5cdFx0YW5ub3RhdGlvbjogZ2V0VGFibGVBbm5vdGF0aW9uQ29uZmlndXJhdGlvbihcblx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdFwiXCIsXG5cdFx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdFx0dGFibGVNYW5pZmVzdENvbmZpZyxcblx0XHRcdGlzQmxhbmtUYWJsZSA/IFtdIDogY29sdW1ucyxcblx0XHRcdG5hdmlnYXRpb25TZXR0aW5ncyxcblx0XHRcdHN0YW5kYXJkQWN0aW9uc0NvbmZpZ3VyYXRpb25cblx0XHQpLFxuXHRcdGNvbnRyb2w6IHRhYmxlTWFuaWZlc3RDb25maWcsXG5cdFx0YWN0aW9uczogW10sXG5cdFx0Y29sdW1uczogY29sdW1ucyxcblx0XHRvcGVyYXRpb25BdmFpbGFibGVNYXA6IEpTT04uc3RyaW5naWZ5KG9wZXJhdGlvbkF2YWlsYWJsZU1hcCksXG5cdFx0b3BlcmF0aW9uQXZhaWxhYmxlUHJvcGVydGllczogZ2V0T3BlcmF0aW9uQXZhaWxhYmxlUHJvcGVydGllcyhvcGVyYXRpb25BdmFpbGFibGVNYXAsIGNvbnZlcnRlckNvbnRleHQpLFxuXHRcdGhlYWRlckluZm9UaXRsZTogc2VtYW50aWNLZXlzQW5kSGVhZGVySW5mb1RpdGxlLmhlYWRlckluZm9UaXRsZVBhdGgsXG5cdFx0c2VtYW50aWNLZXlzOiBzZW1hbnRpY0tleXNBbmRIZWFkZXJJbmZvVGl0bGUuc2VtYW50aWNLZXlDb2x1bW5zLFxuXHRcdGhlYWRlckluZm9UeXBlTmFtZTogc2VtYW50aWNLZXlzQW5kSGVhZGVySW5mb1RpdGxlLmhlYWRlckluZm9UeXBlTmFtZSxcblx0XHRlbmFibGUkc2VsZWN0OiB0cnVlLFxuXHRcdGVuYWJsZSQkZ2V0S2VlcEFsaXZlQ29udGV4dDogdHJ1ZSxcblx0XHRoZWFkZXI6IHRhYmxlTWFuaWZlc3RDb25maWcuaGVhZGVyLFxuXHRcdGhlYWRlclZpc2libGU6IHRhYmxlTWFuaWZlc3RDb25maWcuaGVhZGVyVmlzaWJsZSxcblx0XHRoYW5kbGVQYXRjaFNlbnQ6IGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCkuZ2V0VGVtcGxhdGVUeXBlKCkgIT09IFRlbXBsYXRlVHlwZS5MaXN0UmVwb3J0LFxuXHRcdHJlcXVlc3RBdExlYXN0OiB7fVxuXHR9O1xuXHR1cGRhdGVMaW5rZWRQcm9wZXJ0aWVzKGNvbnZlcnRlckNvbnRleHQsIGNvbHVtbnMpO1xuXHR1cGRhdGVUYWJsZVZpc3VhbGl6YXRpb25Gb3JUeXBlKG9WaXN1YWxpemF0aW9uLCBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKSwgY29udmVydGVyQ29udGV4dCk7XG5cdHJldHVybiBvVmlzdWFsaXphdGlvbjtcbn1cbi8qKlxuICogR2V0cyB0aGUgbWFwIG9mIENvcmUuT3BlcmF0aW9uQXZhaWxhYmxlIHByb3BlcnR5IHBhdGhzIGZvciBhbGwgRGF0YUZpZWxkRm9yQWN0aW9ucy5cbiAqIEBwYXJhbSBsaW5lSXRlbUFubm90YXRpb24gVGhlIGluc3RhbmNlIG9mIHRoZSBsaW5lIGl0ZW1cbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBpbnN0YW5jZSBvZiB0aGUgY29udmVydGVyIGNvbnRleHRcbiAqIEByZXR1cm5zIFRoZSByZWNvcmQgY29udGFpbmluZyBhbGwgYWN0aW9uIG5hbWVzIGFuZCB0aGVpciBjb3JyZXNwb25kaW5nIENvcmUuT3BlcmF0aW9uQXZhaWxhYmxlIHByb3BlcnR5IHBhdGhzXG4gKi9cbmZ1bmN0aW9uIGdldE9wZXJhdGlvbkF2YWlsYWJsZU1hcChcblx0bGluZUl0ZW1Bbm5vdGF0aW9uOiBMaW5lSXRlbSB8IHVuZGVmaW5lZCxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+XG4pOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG5cdHJldHVybiBBY3Rpb25IZWxwZXIuZ2V0T3BlcmF0aW9uQXZhaWxhYmxlTWFwKGxpbmVJdGVtQW5ub3RhdGlvbiwgXCJ0YWJsZVwiLCBjb252ZXJ0ZXJDb250ZXh0KTtcbn1cbi8qKlxuICogR2V0cyB1cGRhdGFibGUgcHJvcGVydHlQYXRoIGZvciB0aGUgY3VycmVudCBlbnRpdHlzZXQgaWYgdmFsaWQuXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgaW5zdGFuY2Ugb2YgdGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcmV0dXJucyBUaGUgdXBkYXRhYmxlIHByb3BlcnR5IGZvciB0aGUgcm93c1xuICovXG5mdW5jdGlvbiBnZXRDdXJyZW50RW50aXR5U2V0VXBkYXRhYmxlUGF0aChjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4pOiBzdHJpbmcge1xuXHRjb25zdCByZXN0cmljdGlvbnMgPSBnZXRSZXN0cmljdGlvbnMoY29udmVydGVyQ29udGV4dCk7XG5cdGNvbnN0IGVudGl0eVNldCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0KCk7XG5cdGNvbnN0IHVwZGF0YWJsZSA9IHJlc3RyaWN0aW9ucy5pc1VwZGF0YWJsZTtcblx0Y29uc3QgaXNPbmx5RHluYW1pY09uQ3VycmVudEVudGl0eSA9ICFpc0NvbnN0YW50KHVwZGF0YWJsZS5leHByZXNzaW9uKSAmJiB1cGRhdGFibGUubmF2aWdhdGlvbkV4cHJlc3Npb24uX3R5cGUgPT09IFwiVW5yZXNvbHZhYmxlXCI7XG5cdGNvbnN0IHVwZGF0YWJsZUV4cHJlc3Npb24gPSBlbnRpdHlTZXQ/LmFubm90YXRpb25zLkNhcGFiaWxpdGllcz8uVXBkYXRlUmVzdHJpY3Rpb25zPy5VcGRhdGFibGU7XG5cdGNvbnN0IHVwZGF0YWJsZVByb3BlcnR5UGF0aCA9IGlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uKHVwZGF0YWJsZUV4cHJlc3Npb24pICYmIHVwZGF0YWJsZUV4cHJlc3Npb24ucGF0aDtcblx0cmV0dXJuIGlzT25seUR5bmFtaWNPbkN1cnJlbnRFbnRpdHkgPyAodXBkYXRhYmxlUHJvcGVydHlQYXRoIGFzIHN0cmluZykgOiBcIlwiO1xufVxuLyoqXG4gKiBNZXRob2QgdG8gcmV0cmlldmUgYWxsIHByb3BlcnR5IHBhdGhzIGFzc2lnbmVkIHRvIHRoZSBDb3JlLk9wZXJhdGlvbkF2YWlsYWJsZSBhbm5vdGF0aW9uLlxuICogQHBhcmFtIG9wZXJhdGlvbkF2YWlsYWJsZU1hcCBUaGUgcmVjb3JkIGNvbnNpc3Rpbmcgb2YgYWN0aW9ucyBhbmQgdGhlaXIgQ29yZS5PcGVyYXRpb25BdmFpbGFibGUgcHJvcGVydHkgcGF0aHNcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBpbnN0YW5jZSBvZiB0aGUgY29udmVydGVyIGNvbnRleHRcbiAqIEByZXR1cm5zIFRoZSBDU1Ygc3RyaW5nIG9mIGFsbCBwcm9wZXJ0eSBwYXRocyBhc3NvY2lhdGVkIHdpdGggdGhlIENvcmUuT3BlcmF0aW9uQXZhaWxhYmxlIGFubm90YXRpb25cbiAqL1xuZnVuY3Rpb24gZ2V0T3BlcmF0aW9uQXZhaWxhYmxlUHJvcGVydGllcyhcblx0b3BlcmF0aW9uQXZhaWxhYmxlTWFwOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+XG4pOiBzdHJpbmcge1xuXHRjb25zdCBwcm9wZXJ0aWVzID0gbmV3IFNldCgpO1xuXHRmb3IgKGNvbnN0IGFjdGlvbk5hbWUgaW4gb3BlcmF0aW9uQXZhaWxhYmxlTWFwKSB7XG5cdFx0Y29uc3QgcHJvcGVydHlOYW1lID0gb3BlcmF0aW9uQXZhaWxhYmxlTWFwW2FjdGlvbk5hbWVdO1xuXHRcdGlmIChwcm9wZXJ0eU5hbWUgPT09IG51bGwpIHtcblx0XHRcdC8vIEFubm90YXRpb24gY29uZmlndXJlZCB3aXRoIGV4cGxpY2l0ICdudWxsJyAoYWN0aW9uIGFkdmVydGlzZW1lbnQgcmVsZXZhbnQpXG5cdFx0XHRwcm9wZXJ0aWVzLmFkZChhY3Rpb25OYW1lKTtcblx0XHR9IGVsc2UgaWYgKHR5cGVvZiBwcm9wZXJ0eU5hbWUgPT09IFwic3RyaW5nXCIpIHtcblx0XHRcdC8vIEFkZCBwcm9wZXJ0eSBwYXRocyBhbmQgbm90IENvbnN0YW50IHZhbHVlcy5cblx0XHRcdHByb3BlcnRpZXMuYWRkKHByb3BlcnR5TmFtZSk7XG5cdFx0fVxuXHR9XG5cdGlmIChwcm9wZXJ0aWVzLnNpemUpIHtcblx0XHQvLyBTb21lIGFjdGlvbnMgaGF2ZSBhbiBvcGVyYXRpb24gYXZhaWxhYmxlIGJhc2VkIG9uIHByb3BlcnR5IC0tPiB3ZSBuZWVkIHRvIGxvYWQgdGhlIEhlYWRlckluZm8uVGl0bGUgcHJvcGVydHlcblx0XHQvLyBzbyB0aGF0IHRoZSBkaWFsb2cgb24gcGFydGlhbCBhY3Rpb25zIGlzIGRpc3BsYXllZCBwcm9wZXJseSAoQkNQIDIxODAyNzE0MjUpXG5cdFx0Y29uc3QgZW50aXR5VHlwZSA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpO1xuXHRcdGNvbnN0IHRpdGxlUHJvcGVydHkgPSAoZW50aXR5VHlwZS5hbm5vdGF0aW9ucz8uVUk/LkhlYWRlckluZm8/LlRpdGxlIGFzIERhdGFGaWVsZFR5cGVzKT8uVmFsdWU/LnBhdGg7XG5cdFx0aWYgKHRpdGxlUHJvcGVydHkpIHtcblx0XHRcdHByb3BlcnRpZXMuYWRkKHRpdGxlUHJvcGVydHkpO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gQXJyYXkuZnJvbShwcm9wZXJ0aWVzKS5qb2luKFwiLFwiKTtcbn1cbi8qKlxuICogSXRlcmF0ZXMgb3ZlciB0aGUgRGF0YUZpZWxkRm9yQWN0aW9uIGFuZCBEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24gb2YgYSBsaW5lIGl0ZW0gYW5kXG4gKiByZXR1cm5zIGFsbCB0aGUgVUkuSGlkZGVuIGFubm90YXRpb24gZXhwcmVzc2lvbnMuXG4gKiBAcGFyYW0gbGluZUl0ZW1Bbm5vdGF0aW9uIENvbGxlY3Rpb24gb2YgZGF0YSBmaWVsZHMgdXNlZCBmb3IgcmVwcmVzZW50YXRpb24gaW4gYSB0YWJsZSBvciBsaXN0XG4gKiBAcGFyYW0gY3VycmVudEVudGl0eVR5cGUgQ3VycmVudCBlbnRpdHkgdHlwZVxuICogQHBhcmFtIGNvbnRleHREYXRhTW9kZWxPYmplY3RQYXRoIE9iamVjdCBwYXRoIG9mIHRoZSBkYXRhIG1vZGVsXG4gKiBAcmV0dXJucyBBbGwgdGhlIGBVSS5IaWRkZW5gIHBhdGggZXhwcmVzc2lvbnMgZm91bmQgaW4gdGhlIHJlbGV2YW50IGFjdGlvbnNcbiAqL1xuZnVuY3Rpb24gZ2V0VUlIaWRkZW5FeHBGb3JBY3Rpb25zUmVxdWlyaW5nQ29udGV4dChcblx0bGluZUl0ZW1Bbm5vdGF0aW9uOiBMaW5lSXRlbSxcblx0Y3VycmVudEVudGl0eVR5cGU6IEVudGl0eVR5cGUsXG5cdGNvbnRleHREYXRhTW9kZWxPYmplY3RQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPFBhZ2VDb250ZXh0UGF0aFRhcmdldD5cbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPltdIHtcblx0Y29uc3QgYVVpSGlkZGVuUGF0aEV4cHJlc3Npb25zOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj5bXSA9IFtdO1xuXHRsaW5lSXRlbUFubm90YXRpb24uZm9yRWFjaCgoZGF0YUZpZWxkKSA9PiB7XG5cdFx0Ly8gQ2hlY2sgaWYgdGhlIGxpbmVJdGVtIGNvbnRleHQgaXMgdGhlIHNhbWUgYXMgdGhhdCBvZiB0aGUgYWN0aW9uOlxuXHRcdGlmIChcblx0XHRcdChkYXRhRmllbGQuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFjdGlvbiAmJlxuXHRcdFx0XHRkYXRhRmllbGQ/LkFjdGlvblRhcmdldD8uaXNCb3VuZCAmJlxuXHRcdFx0XHRjdXJyZW50RW50aXR5VHlwZSA9PT0gZGF0YUZpZWxkPy5BY3Rpb25UYXJnZXQuc291cmNlRW50aXR5VHlwZSkgfHxcblx0XHRcdChkYXRhRmllbGQuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbiAmJlxuXHRcdFx0XHRkYXRhRmllbGQuUmVxdWlyZXNDb250ZXh0ICYmXG5cdFx0XHRcdGRhdGFGaWVsZD8uSW5saW5lPy52YWx1ZU9mKCkgIT09IHRydWUpXG5cdFx0KSB7XG5cdFx0XHRpZiAodHlwZW9mIGRhdGFGaWVsZC5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbj8udmFsdWVPZigpID09PSBcIm9iamVjdFwiKSB7XG5cdFx0XHRcdGFVaUhpZGRlblBhdGhFeHByZXNzaW9ucy5wdXNoKGVxdWFsKGdldEhpZGRlbkV4cHJlc3Npb25BdFRhYmxlTGV2ZWwoZGF0YUZpZWxkLCBjb250ZXh0RGF0YU1vZGVsT2JqZWN0UGF0aCksIGZhbHNlKSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9KTtcblx0cmV0dXJuIGFVaUhpZGRlblBhdGhFeHByZXNzaW9ucztcbn1cbi8qKlxuICogVGhpcyBtZXRob2QgaXMgdXNlZCB0byBnZXQgdGhlIGJpbmRpbmcgZXhwcmVzc2lvbiBvZiB0aGUgcGF0aCBvZiBhIERhdGFGaWVsZC5cbiAqIEBwYXJhbSBleHByZXNzaW9uIENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uXG4gKiBAcmV0dXJucyBUaGUgYmluZGluZyBleHByZXNzaW9uXG4gKi9cbmZ1bmN0aW9uIGdldFBhdGhGcm9tQWN0aW9uQW5ub3RhdGlvbihleHByZXNzaW9uOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbik6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIHtcblx0bGV0IHBhdGg6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uO1xuXHRpZiAoaXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24oZXhwcmVzc2lvbikpIHtcblx0XHRwYXRoID0gZXhwcmVzc2lvbi5wYXRoO1xuXHR9IGVsc2Uge1xuXHRcdHBhdGggPSBleHByZXNzaW9uO1xuXHR9XG5cdHJldHVybiBwYXRoO1xufVxuLyoqXG4gKiBUaGlzIG1ldGhvZCBpcyB1c2VkIHRvIGNoYW5nZSB0aGUgY29udGV4dCBjdXJyZW50bHkgcmVmZXJlbmNlZCBieSB0aGlzIGJpbmRpbmcgYnkgcmVtb3ZpbmcgdGhlIGxhc3QgbmF2aWdhdGlvbiBwcm9wZXJ0eS5cbiAqXG4gKiBJdCBpcyB1c2VkIChzcGVjaWZpY2FsbHkgaW4gdGhpcyBjYXNlKSwgdG8gdHJhbnNmb3JtIGEgYmluZGluZyBtYWRlIGZvciBhIE5hdlByb3AgY29udGV4dCAvTWFpbk9iamVjdC9OYXZQcm9wMS9OYXZQcm9wMixcbiAqIGludG8gYSBiaW5kaW5nIG9uIHRoZSBwcmV2aW91cyBjb250ZXh0IC9NYWluT2JqZWN0L05hdlByb3AxLlxuICogQHBhcmFtIHNvdXJjZSBEYXRhRmllbGRGb3JBY3Rpb24gfCBEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24gfCBDdXN0b21BY3Rpb25cbiAqIEBwYXJhbSBjb250ZXh0RGF0YU1vZGVsT2JqZWN0UGF0aCBEYXRhTW9kZWxPYmplY3RQYXRoXG4gKiBAcmV0dXJucyBUaGUgYmluZGluZyBleHByZXNzaW9uXG4gKi9cbmZ1bmN0aW9uIGdldEhpZGRlbkV4cHJlc3Npb25BdFRhYmxlTGV2ZWwoXG5cdHNvdXJjZTogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcyxcblx0Y29udGV4dERhdGFNb2RlbE9iamVjdFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8UGFnZUNvbnRleHRQYXRoVGFyZ2V0PlxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHVua25vd24+IHtcblx0Y29uc3QgZXhwcmVzc2lvbiA9IHNvdXJjZS5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbiBhcyBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjtcblx0bGV0IHBhdGggPSBnZXRQYXRoRnJvbUFjdGlvbkFubm90YXRpb24oZXhwcmVzc2lvbik7XG5cdGlmICh0eXBlb2YgcGF0aCA9PT0gXCJvYmplY3RcIikge1xuXHRcdHJldHVybiBjb25zdGFudChmYWxzZSk7XG5cdH0gZWxzZSBpZiAodHlwZW9mIHBhdGggPT09IFwic3RyaW5nXCIpIHtcblx0XHRpZiAoXCJ2aXNpYmxlXCIgaW4gc291cmNlKSB7XG5cdFx0XHRwYXRoID0gcGF0aC5zdWJzdHJpbmcoMSwgcGF0aC5sZW5ndGggLSAxKTtcblx0XHR9XG5cdFx0aWYgKHBhdGguaW5kZXhPZihcIi9cIikgPiAwKSB7XG5cdFx0XHQvL2NoZWNrIGlmIHRoZSBuYXZpZ2F0aW9uIHByb3BlcnR5IGlzIGNvcnJlY3Q6XG5cdFx0XHRjb25zdCBzcGxpdFBhdGhGb3JOYXZpZ2F0aW9uUHJvcGVydHkgPSBwYXRoLnNwbGl0KFwiL1wiKTtcblx0XHRcdGNvbnN0IG5hdmlnYXRpb25QYXRoID0gc3BsaXRQYXRoRm9yTmF2aWdhdGlvblByb3BlcnR5WzBdO1xuXHRcdFx0aWYgKFxuXHRcdFx0XHRpc05hdmlnYXRpb25Qcm9wZXJ0eShjb250ZXh0RGF0YU1vZGVsT2JqZWN0UGF0aD8udGFyZ2V0T2JqZWN0KSAmJlxuXHRcdFx0XHRjb250ZXh0RGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRPYmplY3QucGFydG5lciA9PT0gbmF2aWdhdGlvblBhdGhcblx0XHRcdCkge1xuXHRcdFx0XHRyZXR1cm4gcGF0aEluTW9kZWwoc3BsaXRQYXRoRm9yTmF2aWdhdGlvblByb3BlcnR5LnNsaWNlKDEpLmpvaW4oXCIvXCIpKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJldHVybiBjb25zdGFudCh0cnVlKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIGNvbnN0YW50KGZhbHNlKTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGNvbnN0YW50KHRydWUpO1xufVxuLyoqXG4gKiBMb29wIHRocm91Z2ggdGhlIG1hbmlmZXN0IGFjdGlvbnMgYW5kIGNoZWNrIHRoZSBmb2xsb3dpbmc6XG4gKlxuICogSWYgdGhlIGRhdGEgZmllbGQgaXMgYWxzbyByZWZlcmVuY2VkIGFzIGEgY3VzdG9tIGFjdGlvbi5cbiAqIElmIHRoZSB1bmRlcmx5aW5nIG1hbmlmZXN0IGFjdGlvbiBpcyBlaXRoZXIgYSBib3VuZCBhY3Rpb24gb3IgaGFzIHRoZSAnUmVxdWlyZXNDb250ZXh0JyBwcm9wZXJ0eSBzZXQgdG8gdHJ1ZS5cbiAqXG4gKiBJZiBzbywgdGhlICdyZXF1aXJlc1NlbGVjdGlvbicgcHJvcGVydHkgaXMgZm9yY2VkIHRvICd0cnVlJyBpbiB0aGUgbWFuaWZlc3QuXG4gKiBAcGFyYW0gZGF0YUZpZWxkSWQgSWQgb2YgdGhlIERhdGFGaWVsZCBldmFsdWF0ZWRcbiAqIEBwYXJhbSBkYXRhRmllbGQgRGF0YUZpZWxkIGV2YWx1YXRlZFxuICogQHBhcmFtIG1hbmlmZXN0QWN0aW9ucyBUaGUgYWN0aW9ucyBkZWZpbmVkIGluIHRoZSBtYW5pZmVzdFxuICogQHJldHVybnMgYHRydWVgIGlmIHRoZSBEYXRhRmllbGQgaXMgZm91bmQgYW1vbmcgdGhlIG1hbmlmZXN0IGFjdGlvbnNcbiAqL1xuZnVuY3Rpb24gdXBkYXRlTWFuaWZlc3RBY3Rpb25BbmRUYWdJdChcblx0ZGF0YUZpZWxkSWQ6IHN0cmluZyxcblx0ZGF0YUZpZWxkOiBEYXRhRmllbGRGb3JBY3Rpb24gfCBEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24sXG5cdG1hbmlmZXN0QWN0aW9uczogUmVjb3JkPHN0cmluZywgQ3VzdG9tQWN0aW9uPlxuKTogYm9vbGVhbiB7XG5cdHJldHVybiBPYmplY3Qua2V5cyhtYW5pZmVzdEFjdGlvbnMpLnNvbWUoKGFjdGlvbktleSkgPT4ge1xuXHRcdGlmIChhY3Rpb25LZXkgPT09IGRhdGFGaWVsZElkKSB7XG5cdFx0XHRpZiAoXG5cdFx0XHRcdChkYXRhRmllbGQgYXMgRGF0YUZpZWxkRm9yQWN0aW9uKT8uQWN0aW9uVGFyZ2V0Py5pc0JvdW5kIHx8XG5cdFx0XHRcdChkYXRhRmllbGQgYXMgRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uKT8uUmVxdWlyZXNDb250ZXh0XG5cdFx0XHQpIHtcblx0XHRcdFx0bWFuaWZlc3RBY3Rpb25zW2RhdGFGaWVsZElkXS5yZXF1aXJlc1NlbGVjdGlvbiA9IHRydWU7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9KTtcbn1cbi8qKlxuICogTG9vcCB0aHJvdWdoIHRoZSBEYXRhRmllbGRGb3JBY3Rpb24gYW5kIERhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbiBvZiBhIGxpbmUgaXRlbSBhbmRcbiAqIGNoZWNrIHRoZSBmb2xsb3dpbmc6XG4gKiBJZiBhdCBsZWFzdCBvbmUgb2YgdGhlbSBpcyBhbHdheXMgdmlzaWJsZSBpbiB0aGUgdGFibGUgdG9vbGJhciBhbmQgcmVxdWlyZXMgYSBjb250ZXh0XG4gKiBJZiBhbiBhY3Rpb24gaXMgYWxzbyBkZWZpbmVkIGluIHRoZSBtYW5pZmVzdCwgaXQgaXMgc2V0IGFzaWRlIGFuZCB3aWxsIGJlIGNvbnNpZGVyZWRcbiAqIHdoZW4gZ29pbmcgdGhyb3VnaCB0aGUgbWFuaWZlc3QuXG4gKiBAcGFyYW0gbGluZUl0ZW1Bbm5vdGF0aW9uIENvbGxlY3Rpb24gb2YgZGF0YSBmaWVsZHMgZm9yIHJlcHJlc2VudGF0aW9uIGluIGEgdGFibGUgb3IgbGlzdFxuICogQHBhcmFtIG1hbmlmZXN0QWN0aW9ucyBUaGUgYWN0aW9ucyBkZWZpbmVkIGluIHRoZSBtYW5pZmVzdFxuICogQHBhcmFtIGN1cnJlbnRFbnRpdHlUeXBlIEN1cnJlbnQgRW50aXR5IFR5cGVcbiAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGVyZSBpcyBhdCBsZWFzdCAxIGFjdGlvbiB0aGF0IG1lZXRzIHRoZSBjcml0ZXJpYVxuICovXG5mdW5jdGlvbiBoYXNCb3VuZEFjdGlvbnNBbHdheXNWaXNpYmxlSW5Ub29sQmFyKFxuXHRsaW5lSXRlbUFubm90YXRpb246IExpbmVJdGVtIHwgRGF0YUZpZWxkRm9yQWN0aW9uQWJzdHJhY3RUeXBlc1tdLFxuXHRtYW5pZmVzdEFjdGlvbnM6IFJlY29yZDxzdHJpbmcsIEN1c3RvbUFjdGlvbj4sXG5cdGN1cnJlbnRFbnRpdHlUeXBlOiBFbnRpdHlUeXBlXG4pOiBib29sZWFuIHtcblx0cmV0dXJuIGxpbmVJdGVtQW5ub3RhdGlvbi5zb21lKChkYXRhRmllbGQpID0+IHtcblx0XHRpZiAoXG5cdFx0XHQoZGF0YUZpZWxkLiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBY3Rpb24gfHxcblx0XHRcdFx0ZGF0YUZpZWxkLiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24pICYmXG5cdFx0XHRkYXRhRmllbGQ/LklubGluZT8udmFsdWVPZigpICE9PSB0cnVlICYmXG5cdFx0XHQoZGF0YUZpZWxkLmFubm90YXRpb25zPy5VST8uSGlkZGVuPy52YWx1ZU9mKCkgPT09IGZhbHNlIHx8IGRhdGFGaWVsZC5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbj8udmFsdWVPZigpID09PSB1bmRlZmluZWQpXG5cdFx0KSB7XG5cdFx0XHRpZiAoZGF0YUZpZWxkLiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBY3Rpb24pIHtcblx0XHRcdFx0Y29uc3QgbWFuaWZlc3RBY3Rpb25JZCA9IGdlbmVyYXRlKFtcIkRhdGFGaWVsZEZvckFjdGlvblwiLCBkYXRhRmllbGQuQWN0aW9uIGFzIHN0cmluZ10pO1xuXHRcdFx0XHQvLyBpZiB0aGUgRGF0YUZpZWxkRm9yQWN0b24gZnJvbSBhbm5vdGF0aW9uIGFsc28gZXhpc3RzIGluIHRoZSBtYW5pZmVzdCwgaXRzIHZpc2liaWxpdHkgd2lsbCBiZSBldmFsdWF0ZWQgbGF0ZXIgb25cblx0XHRcdFx0aWYgKHVwZGF0ZU1hbmlmZXN0QWN0aW9uQW5kVGFnSXQobWFuaWZlc3RBY3Rpb25JZCwgZGF0YUZpZWxkLCBtYW5pZmVzdEFjdGlvbnMpKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdC8vIENoZWNrIGlmIHRoZSBsaW5lSXRlbSBjb250ZXh0IGlzIHRoZSBzYW1lIGFzIHRoYXQgb2YgdGhlIGFjdGlvbjpcblx0XHRcdFx0cmV0dXJuIGRhdGFGaWVsZD8uQWN0aW9uVGFyZ2V0Py5pc0JvdW5kICYmIGN1cnJlbnRFbnRpdHlUeXBlID09PSBkYXRhRmllbGQ/LkFjdGlvblRhcmdldC5zb3VyY2VFbnRpdHlUeXBlO1xuXHRcdFx0fSBlbHNlIGlmIChkYXRhRmllbGQuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbikge1xuXHRcdFx0XHQvLyBpZiB0aGUgRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uIGZyb20gYW5ub3RhdGlvbiBhbHNvIGV4aXN0cyBpbiB0aGUgbWFuaWZlc3QsIGl0cyB2aXNpYmlsaXR5IHdpbGwgYmUgZXZhbHVhdGVkIGxhdGVyIG9uXG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHR1cGRhdGVNYW5pZmVzdEFjdGlvbkFuZFRhZ0l0KFxuXHRcdFx0XHRcdFx0YERhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbjo6JHtkYXRhRmllbGQuU2VtYW50aWNPYmplY3R9Ojoke2RhdGFGaWVsZC5BY3Rpb259YCxcblx0XHRcdFx0XHRcdGRhdGFGaWVsZCxcblx0XHRcdFx0XHRcdG1hbmlmZXN0QWN0aW9uc1xuXHRcdFx0XHRcdClcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBkYXRhRmllbGQuUmVxdWlyZXNDb250ZXh0O1xuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAoXG5cdFx0XHRkYXRhRmllbGQuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFjdGlvbkdyb3VwICYmXG5cdFx0XHQoZGF0YUZpZWxkLmFubm90YXRpb25zPy5VST8uSGlkZGVuPy52YWx1ZU9mKCkgPT09IGZhbHNlIHx8IGRhdGFGaWVsZC5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbj8udmFsdWVPZigpID09PSB1bmRlZmluZWQpXG5cdFx0KSB7XG5cdFx0XHRyZXR1cm4gaGFzQm91bmRBY3Rpb25zQWx3YXlzVmlzaWJsZUluVG9vbEJhcihkYXRhRmllbGQuQWN0aW9ucywgbWFuaWZlc3RBY3Rpb25zLCBjdXJyZW50RW50aXR5VHlwZSk7XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fSk7XG59XG4vKipcbiAqIENoZWNrcyBpZiBhIGN1c3RvbSBhY3Rpb24gdGhhdCByZXF1aXJlcyBhIGNvbnRleHQgaXMgYWx3YXlzIHZpc2libGUgaW4gdGhlIHRvb2xiYXIuXG4gKiBAcGFyYW0gbWFuaWZlc3RBY3Rpb25zIFRoZSBhY3Rpb25zIGRlZmluZWQgaW4gdGhlIG1hbmlmZXN0XG4gKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhlcmUgaXMgYXQgbGVhc3QgMSBhY3Rpb24gdGhhdCBtZWV0cyB0aGUgY3JpdGVyaWFcbiAqL1xuZnVuY3Rpb24gaGFzQ3VzdG9tQWN0aW9uc0Fsd2F5c1Zpc2libGVJblRvb2xCYXIobWFuaWZlc3RBY3Rpb25zOiBSZWNvcmQ8c3RyaW5nLCBDdXN0b21BY3Rpb24+KTogYm9vbGVhbiB7XG5cdGNvbnN0IGN1c3RvbUFjdGlvbnMgPSBPYmplY3Qua2V5cyhtYW5pZmVzdEFjdGlvbnMpLnJlZHVjZSgoYWN0aW9uczogQ3VzdG9tQWN0aW9uW10sIGFjdGlvbktleSkgPT4ge1xuXHRcdGNvbnN0IGFjdGlvbiA9IG1hbmlmZXN0QWN0aW9uc1thY3Rpb25LZXldO1xuXHRcdGlmICghYWN0aW9uLm1lbnUpIHtcblx0XHRcdC8vc2ltcGxlIGN1c3RvbSBhY3Rpb25cblx0XHRcdGFjdGlvbnMucHVzaChhY3Rpb24pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBncm91cGVkIGFjdGlvbnNcblx0XHRcdGFjdGlvbnMgPSBbLi4uYWN0aW9ucywgLi4uKGFjdGlvbi5tZW51LmZpbHRlcigobWVudUFjdGlvbikgPT4gdHlwZW9mIG1lbnVBY3Rpb24gIT09IFwic3RyaW5nXCIpIGFzIEN1c3RvbUFjdGlvbltdKV07XG5cdFx0fVxuXHRcdHJldHVybiBhY3Rpb25zO1xuXHR9LCBbXSk7XG5cdHJldHVybiAhIWN1c3RvbUFjdGlvbnMuZmluZChcblx0XHQoYWN0aW9uKSA9PiBhY3Rpb24ucmVxdWlyZXNTZWxlY3Rpb24gJiYgKGFjdGlvbi52aXNpYmxlID09PSB1bmRlZmluZWQgfHwgYWN0aW9uLnZpc2libGU/LnRvU3RyaW5nKCkgPT09IFwidHJ1ZVwiKVxuXHQpO1xufVxuLyoqXG4gKiBJdGVyYXRlcyBvdmVyIHRoZSBjdXN0b20gYWN0aW9ucyAod2l0aCBrZXkgcmVxdWlyZXNTZWxlY3Rpb24pIGRlY2xhcmVkIGluIHRoZSBtYW5pZmVzdCBmb3IgdGhlIGN1cnJlbnQgbGluZSBpdGVtIGFuZCByZXR1cm5zIGFsbCB0aGVcbiAqIHZpc2libGUga2V5IHZhbHVlcyBhcyBhbiBleHByZXNzaW9uLlxuICogQHBhcmFtIG1hbmlmZXN0QWN0aW9ucyBUaGUgYWN0aW9ucyBkZWZpbmVkIGluIHRoZSBtYW5pZmVzdFxuICogQHJldHVybnMgQXJyYXk8RXhwcmVzc2lvbjxib29sZWFuPj4gQWxsIHRoZSB2aXNpYmxlIHBhdGggZXhwcmVzc2lvbnMgb2YgdGhlIGFjdGlvbnMgdGhhdCBtZWV0IHRoZSBjcml0ZXJpYVxuICovXG5mdW5jdGlvbiBnZXRWaXNpYmxlRXhwRm9yQ3VzdG9tQWN0aW9uc1JlcXVpcmluZ0NvbnRleHQobWFuaWZlc3RBY3Rpb25zOiBSZWNvcmQ8c3RyaW5nLCBDdXN0b21BY3Rpb24+KTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+W10ge1xuXHRjb25zdCBhVmlzaWJsZVBhdGhFeHByZXNzaW9uczogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+W10gPSBbXTtcblx0aWYgKG1hbmlmZXN0QWN0aW9ucykge1xuXHRcdE9iamVjdC5rZXlzKG1hbmlmZXN0QWN0aW9ucykuZm9yRWFjaCgoYWN0aW9uS2V5KSA9PiB7XG5cdFx0XHRjb25zdCBhY3Rpb24gPSBtYW5pZmVzdEFjdGlvbnNbYWN0aW9uS2V5XTtcblx0XHRcdGlmIChhY3Rpb24ucmVxdWlyZXNTZWxlY3Rpb24gPT09IHRydWUgJiYgYWN0aW9uLnZpc2libGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRpZiAodHlwZW9mIGFjdGlvbi52aXNpYmxlID09PSBcInN0cmluZ1wiKSB7XG5cdFx0XHRcdFx0LypUaGUgZmluYWwgYWltIHdvdWxkIGJlIHRvIGNoZWNrIGlmIHRoZSBwYXRoIGV4cHJlc3Npb24gZGVwZW5kcyBvbiB0aGUgcGFyZW50IGNvbnRleHRcblx0XHRcdFx0XHRhbmQgY29uc2lkZXJzIG9ubHkgdGhvc2UgZXhwcmVzc2lvbnMgZm9yIHRoZSBleHByZXNzaW9uIGV2YWx1YXRpb24sXG5cdFx0XHRcdFx0YnV0IGN1cnJlbnRseSBub3QgcG9zc2libGUgZnJvbSB0aGUgbWFuaWZlc3QgYXMgdGhlIHZpc2libGUga2V5IGlzIGJvdW5kIG9uIHRoZSBwYXJlbnQgZW50aXR5LlxuXHRcdFx0XHRcdFRyaWNreSB0byBkaWZmZXJlbnRpYXRlIHRoZSBwYXRoIGFzIGl0J3MgZG9uZSBmb3IgdGhlIEhpZGRlbiBhbm5vdGF0aW9uLlxuXHRcdFx0XHRcdEZvciB0aGUgdGltZSBiZWluZyB3ZSBjb25zaWRlciBhbGwgdGhlIHBhdGhzIG9mIHRoZSBtYW5pZmVzdCovXG5cdFx0XHRcdFx0YVZpc2libGVQYXRoRXhwcmVzc2lvbnMucHVzaChyZXNvbHZlQmluZGluZ1N0cmluZyhhY3Rpb24/LnZpc2libGU/LnZhbHVlT2YoKSwgXCJib29sZWFuXCIpKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cdHJldHVybiBhVmlzaWJsZVBhdGhFeHByZXNzaW9ucztcbn1cbi8qKlxuICogRXZhbHVhdGUgaWYgdGhlIHBhdGggaXMgc3RhdGljYWxseSBkZWxldGFibGUgb3IgdXBkYXRhYmxlLlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEByZXR1cm5zIFRoZSB0YWJsZSBjYXBhYmlsaXRpZXNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldENhcGFiaWxpdHlSZXN0cmljdGlvbihjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4pOiBUYWJsZUNhcGFiaWxpdHlSZXN0cmljdGlvbiB7XG5cdGNvbnN0IGlzRGVsZXRhYmxlID0gaXNQYXRoRGVsZXRhYmxlKGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpKTtcblx0Y29uc3QgaXNVcGRhdGFibGUgPSBpc1BhdGhVcGRhdGFibGUoY29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCkpO1xuXHRyZXR1cm4ge1xuXHRcdGlzRGVsZXRhYmxlOiAhKGlzQ29uc3RhbnQoaXNEZWxldGFibGUpICYmIGlzRGVsZXRhYmxlLnZhbHVlID09PSBmYWxzZSksXG5cdFx0aXNVcGRhdGFibGU6ICEoaXNDb25zdGFudChpc1VwZGF0YWJsZSkgJiYgaXNVcGRhdGFibGUudmFsdWUgPT09IGZhbHNlKVxuXHR9O1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldFNlbGVjdGlvbk1vZGUoXG5cdGxpbmVJdGVtQW5ub3RhdGlvbjogTGluZUl0ZW0gfCB1bmRlZmluZWQsXG5cdHZpc3VhbGl6YXRpb25QYXRoOiBzdHJpbmcsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0aXNFbnRpdHlTZXQ6IGJvb2xlYW4sXG5cdHRhcmdldENhcGFiaWxpdGllczogVGFibGVDYXBhYmlsaXR5UmVzdHJpY3Rpb24sXG5cdGRlbGV0ZUJ1dHRvblZpc2liaWxpdHlFeHByZXNzaW9uPzogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+LFxuXHRtYXNzRWRpdFZpc2liaWxpdHlFeHByZXNzaW9uOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4gPSBjb25zdGFudChmYWxzZSksXG5cdGN1dEJ1dHRvblZpc2liaWxpdHlFeHByZXNzaW9uOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4gPSBjb25zdGFudChmYWxzZSlcbik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdGNvbnN0IHRhYmxlTWFuaWZlc3RTZXR0aW5ncyA9IGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RDb250cm9sQ29uZmlndXJhdGlvbjxUYWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbj4odmlzdWFsaXphdGlvblBhdGgpO1xuXHRjb25zdCB0YWJsZVR5cGUgPSB0YWJsZU1hbmlmZXN0U2V0dGluZ3MudGFibGVTZXR0aW5ncz8udHlwZTtcblx0bGV0IHNlbGVjdGlvbk1vZGUgPSB0YWJsZU1hbmlmZXN0U2V0dGluZ3MudGFibGVTZXR0aW5ncz8uc2VsZWN0aW9uTW9kZTtcblxuXHQvLyBUaGUgY29sbGFwc2UvRXhwYW5kIGFjdGlvbiBvZiBhIHRyZWUgdGFibGUgaXMgYSBib3VuZCBhY3Rpb24sIGFzIGEgcmVzdWx0LCBhIHRyZWUgdGFibGUgc2hvdWxkIGFsd2F5cyBoYXZlIGEgc2VsZWN0aW9uIG1vZGUgdG8gXCJNdWx0aVwiIHdoZW4gbm8gc2VsZWN0aW9uTW9kZSBoYXMgYmVlbiBzZXQgaW4gdGhlIG1hbmlmZXN0XG5cdGlmICh0YWJsZVR5cGUgPT09IFwiVHJlZVRhYmxlXCIgJiYgIXNlbGVjdGlvbk1vZGUpIHtcblx0XHRyZXR1cm4gU2VsZWN0aW9uTW9kZS5NdWx0aTtcblx0fVxuXG5cdC8vIElmIHRoZSBzZWxlY3Rpb24gbW9kZSBpcyBmb3JjZWQgdG8gJ05vbmUnIGluIHRoZSBtYW5pZmVzdC9tYWNybyB0YWJsZSBwYXJhbWV0ZXJzLCB3ZSBrZWVwIGl0IHVubGVzcyBoZXJlIGlzIGEgZGVsZXRlIGJ1dHRvblxuXHRpZiAoIWxpbmVJdGVtQW5ub3RhdGlvbiB8fCBzZWxlY3Rpb25Nb2RlID09PSBTZWxlY3Rpb25Nb2RlLk5vbmUpIHtcblx0XHRpZiAodGFyZ2V0Q2FwYWJpbGl0aWVzLmlzRGVsZXRhYmxlICYmIGRlbGV0ZUJ1dHRvblZpc2liaWxpdHlFeHByZXNzaW9uKSB7XG5cdFx0XHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24oaWZFbHNlKGRlbGV0ZUJ1dHRvblZpc2liaWxpdHlFeHByZXNzaW9uLCBjb25zdGFudChTZWxlY3Rpb25Nb2RlLk11bHRpKSwgY29uc3RhbnQoU2VsZWN0aW9uTW9kZS5Ob25lKSkpO1xuXHRcdH1cblx0XHRyZXR1cm4gU2VsZWN0aW9uTW9kZS5Ob25lO1xuXHR9XG5cdGlmIChzZWxlY3Rpb25Nb2RlID09PSBTZWxlY3Rpb25Nb2RlLkZvcmNlTXVsdGkpIHtcblx0XHRyZXR1cm4gU2VsZWN0aW9uTW9kZS5NdWx0aTtcblx0fSBlbHNlIGlmIChzZWxlY3Rpb25Nb2RlID09PSBTZWxlY3Rpb25Nb2RlLkZvcmNlU2luZ2xlKSB7XG5cdFx0cmV0dXJuIFNlbGVjdGlvbk1vZGUuU2luZ2xlO1xuXHR9XG5cdGxldCBhSGlkZGVuQmluZGluZ0V4cHJlc3Npb25zOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj5bXSA9IFtdLFxuXHRcdGFWaXNpYmxlQmluZGluZ0V4cHJlc3Npb25zOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj5bXSA9IFtdO1xuXHRjb25zdCBtYW5pZmVzdEFjdGlvbnMgPSBnZXRBY3Rpb25zRnJvbU1hbmlmZXN0KFxuXHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RDb250cm9sQ29uZmlndXJhdGlvbjxUYWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbj4odmlzdWFsaXphdGlvblBhdGgpLmFjdGlvbnMsXG5cdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHRbXSxcblx0XHR1bmRlZmluZWQsXG5cdFx0ZmFsc2Vcblx0KTtcblx0bGV0IGlzUGFyZW50RGVsZXRhYmxlLCBwYXJlbnRFbnRpdHlTZXREZWxldGFibGU7XG5cdGlmIChjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpID09PSBUZW1wbGF0ZVR5cGUuT2JqZWN0UGFnZSkge1xuXHRcdGlzUGFyZW50RGVsZXRhYmxlID0gaXNQYXRoRGVsZXRhYmxlKGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpKTtcblx0XHRwYXJlbnRFbnRpdHlTZXREZWxldGFibGUgPSBpc1BhcmVudERlbGV0YWJsZSA/IGNvbXBpbGVFeHByZXNzaW9uKGlzUGFyZW50RGVsZXRhYmxlLCB0cnVlKSA6IGlzUGFyZW50RGVsZXRhYmxlO1xuXHR9XG5cdGNvbnN0IGJNYXNzRWRpdEVuYWJsZWQ6IGJvb2xlYW4gPSAhaXNDb25zdGFudChtYXNzRWRpdFZpc2liaWxpdHlFeHByZXNzaW9uKSB8fCBtYXNzRWRpdFZpc2liaWxpdHlFeHByZXNzaW9uLnZhbHVlICE9PSBmYWxzZTtcblx0aWYgKCFzZWxlY3Rpb25Nb2RlIHx8IHNlbGVjdGlvbk1vZGUgPT09IFNlbGVjdGlvbk1vZGUuQXV0bykge1xuXHRcdHNlbGVjdGlvbk1vZGUgPSBTZWxlY3Rpb25Nb2RlLk11bHRpO1xuXHR9XG5cdGlmIChiTWFzc0VkaXRFbmFibGVkKSB7XG5cdFx0Ly8gT3ZlcnJpZGUgZGVmYXVsdCBzZWxlY3Rpb24gbW9kZSB3aGVuIG1hc3MgZWRpdCBpcyB2aXNpYmxlXG5cdFx0c2VsZWN0aW9uTW9kZSA9IHNlbGVjdGlvbk1vZGUgPT09IFNlbGVjdGlvbk1vZGUuU2luZ2xlID8gU2VsZWN0aW9uTW9kZS5TaW5nbGUgOiBTZWxlY3Rpb25Nb2RlLk11bHRpO1xuXHR9XG5cdGlmIChcblx0XHRoYXNCb3VuZEFjdGlvbnNBbHdheXNWaXNpYmxlSW5Ub29sQmFyKGxpbmVJdGVtQW5ub3RhdGlvbiwgbWFuaWZlc3RBY3Rpb25zLmFjdGlvbnMsIGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpKSB8fFxuXHRcdGhhc0N1c3RvbUFjdGlvbnNBbHdheXNWaXNpYmxlSW5Ub29sQmFyKG1hbmlmZXN0QWN0aW9ucy5hY3Rpb25zKVxuXHQpIHtcblx0XHRyZXR1cm4gc2VsZWN0aW9uTW9kZTtcblx0fVxuXHRhSGlkZGVuQmluZGluZ0V4cHJlc3Npb25zID0gZ2V0VUlIaWRkZW5FeHBGb3JBY3Rpb25zUmVxdWlyaW5nQ29udGV4dChcblx0XHRsaW5lSXRlbUFubm90YXRpb24sXG5cdFx0Y29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCksXG5cdFx0Y29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKClcblx0KTtcblx0YVZpc2libGVCaW5kaW5nRXhwcmVzc2lvbnMgPSBnZXRWaXNpYmxlRXhwRm9yQ3VzdG9tQWN0aW9uc1JlcXVpcmluZ0NvbnRleHQobWFuaWZlc3RBY3Rpb25zLmFjdGlvbnMpO1xuXHQvLyBObyBhY3Rpb24gcmVxdWlyaW5nIGEgY29udGV4dDpcblx0aWYgKFxuXHRcdGFIaWRkZW5CaW5kaW5nRXhwcmVzc2lvbnMubGVuZ3RoID09PSAwICYmXG5cdFx0YVZpc2libGVCaW5kaW5nRXhwcmVzc2lvbnMubGVuZ3RoID09PSAwICYmXG5cdFx0KGN1dEJ1dHRvblZpc2liaWxpdHlFeHByZXNzaW9uIHx8IGRlbGV0ZUJ1dHRvblZpc2liaWxpdHlFeHByZXNzaW9uIHx8IGJNYXNzRWRpdEVuYWJsZWQpXG5cdCkge1xuXHRcdGlmICghaXNFbnRpdHlTZXQpIHtcblx0XHRcdC8vIEV4YW1wbGU6IE9QIGNhc2Vcblx0XHRcdGlmICh0YXJnZXRDYXBhYmlsaXRpZXMuaXNEZWxldGFibGUgfHwgcGFyZW50RW50aXR5U2V0RGVsZXRhYmxlICE9PSBcImZhbHNlXCIgfHwgYk1hc3NFZGl0RW5hYmxlZCkge1xuXHRcdFx0XHQvLyBCdWlsZGluZyBleHByZXNzaW9uIGZvciBkZWxldGUgYW5kIG1hc3MgZWRpdFxuXHRcdFx0XHRjb25zdCBidXR0b25WaXNpYmlsaXR5RXhwcmVzc2lvbiA9IG9yKFxuXHRcdFx0XHRcdGN1dEJ1dHRvblZpc2liaWxpdHlFeHByZXNzaW9uIHx8IHRydWUsXG5cdFx0XHRcdFx0ZGVsZXRlQnV0dG9uVmlzaWJpbGl0eUV4cHJlc3Npb24gfHwgdHJ1ZSwgLy8gZGVmYXVsdCBkZWxldGUgdmlzaWJpbGl0eSBhcyB0cnVlXG5cdFx0XHRcdFx0bWFzc0VkaXRWaXNpYmlsaXR5RXhwcmVzc2lvblxuXHRcdFx0XHQpO1xuXHRcdFx0XHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24oXG5cdFx0XHRcdFx0aWZFbHNlKGFuZChVSS5Jc0VkaXRhYmxlLCBidXR0b25WaXNpYmlsaXR5RXhwcmVzc2lvbiksIGNvbnN0YW50KHNlbGVjdGlvbk1vZGUpLCBjb25zdGFudChTZWxlY3Rpb25Nb2RlLk5vbmUpKVxuXHRcdFx0XHQpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKFxuXHRcdFx0XHRcdGlmRWxzZShjdXRCdXR0b25WaXNpYmlsaXR5RXhwcmVzc2lvbiwgY29uc3RhbnQoU2VsZWN0aW9uTW9kZS5TaW5nbGUpLCBjb25zdGFudChTZWxlY3Rpb25Nb2RlLk5vbmUpKVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdFx0Ly8gRW50aXR5U2V0IGRlbGV0YWJsZTpcblx0XHR9IGVsc2UgaWYgKGJNYXNzRWRpdEVuYWJsZWQpIHtcblx0XHRcdC8vIGV4YW1wbGU6IExSIHNjZW5hcmlvXG5cdFx0XHRyZXR1cm4gc2VsZWN0aW9uTW9kZTtcblx0XHR9IGVsc2UgaWYgKHRhcmdldENhcGFiaWxpdGllcy5pc0RlbGV0YWJsZSAmJiBkZWxldGVCdXR0b25WaXNpYmlsaXR5RXhwcmVzc2lvbikge1xuXHRcdFx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKGlmRWxzZShkZWxldGVCdXR0b25WaXNpYmlsaXR5RXhwcmVzc2lvbiwgY29uc3RhbnQoc2VsZWN0aW9uTW9kZSksIGNvbnN0YW50KFNlbGVjdGlvbk1vZGUuTm9uZSkpKTtcblx0XHRcdC8vIEVudGl0eVNldCBub3QgZGVsZXRhYmxlOlxuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gU2VsZWN0aW9uTW9kZS5Ob25lO1xuXHRcdH1cblx0XHQvLyBUaGVyZSBhcmUgYWN0aW9ucyByZXF1aXJpbmcgYSBjb250ZXh0OlxuXHR9IGVsc2UgaWYgKCFpc0VudGl0eVNldCkge1xuXHRcdC8vIEV4YW1wbGU6IE9QIGNhc2Vcblx0XHRpZiAodGFyZ2V0Q2FwYWJpbGl0aWVzLmlzRGVsZXRhYmxlIHx8IHBhcmVudEVudGl0eVNldERlbGV0YWJsZSAhPT0gXCJmYWxzZVwiIHx8IGJNYXNzRWRpdEVuYWJsZWQpIHtcblx0XHRcdC8vIFVzZSBzZWxlY3Rpb25Nb2RlIGluIGVkaXQgbW9kZSBpZiBkZWxldGUgaXMgZW5hYmxlZCBvciBtYXNzIGVkaXQgaXMgdmlzaWJsZVxuXHRcdFx0Y29uc3QgZWRpdE1vZGVidXR0b25WaXNpYmlsaXR5RXhwcmVzc2lvbiA9IGlmRWxzZShcblx0XHRcdFx0Yk1hc3NFZGl0RW5hYmxlZCAmJiAhdGFyZ2V0Q2FwYWJpbGl0aWVzLmlzRGVsZXRhYmxlLFxuXHRcdFx0XHRtYXNzRWRpdFZpc2liaWxpdHlFeHByZXNzaW9uLFxuXHRcdFx0XHRjb25zdGFudCh0cnVlKVxuXHRcdFx0KTtcblx0XHRcdHJldHVybiBjb21waWxlRXhwcmVzc2lvbihcblx0XHRcdFx0aWZFbHNlKFxuXHRcdFx0XHRcdGFuZChVSS5Jc0VkaXRhYmxlLCBlZGl0TW9kZWJ1dHRvblZpc2liaWxpdHlFeHByZXNzaW9uKSxcblx0XHRcdFx0XHRjb25zdGFudChzZWxlY3Rpb25Nb2RlKSxcblx0XHRcdFx0XHRpZkVsc2UoXG5cdFx0XHRcdFx0XHRvciguLi5hSGlkZGVuQmluZGluZ0V4cHJlc3Npb25zLmNvbmNhdChhVmlzaWJsZUJpbmRpbmdFeHByZXNzaW9ucykpLFxuXHRcdFx0XHRcdFx0Y29uc3RhbnQoc2VsZWN0aW9uTW9kZSksXG5cdFx0XHRcdFx0XHRjb25zdGFudChTZWxlY3Rpb25Nb2RlLk5vbmUpXG5cdFx0XHRcdFx0KVxuXHRcdFx0XHQpXG5cdFx0XHQpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24oXG5cdFx0XHRcdGlmRWxzZShcblx0XHRcdFx0XHRvciguLi5hSGlkZGVuQmluZGluZ0V4cHJlc3Npb25zLmNvbmNhdChhVmlzaWJsZUJpbmRpbmdFeHByZXNzaW9ucykpLFxuXHRcdFx0XHRcdGNvbnN0YW50KHNlbGVjdGlvbk1vZGUpLFxuXHRcdFx0XHRcdGNvbnN0YW50KFNlbGVjdGlvbk1vZGUuTm9uZSlcblx0XHRcdFx0KVxuXHRcdFx0KTtcblx0XHR9XG5cdFx0Ly9FbnRpdHlTZXQgZGVsZXRhYmxlOlxuXHR9IGVsc2UgaWYgKHRhcmdldENhcGFiaWxpdGllcy5pc0RlbGV0YWJsZSB8fCBiTWFzc0VkaXRFbmFibGVkKSB7XG5cdFx0Ly8gRXhhbXBsZTogTFIgc2NlbmFyaW9cblx0XHRyZXR1cm4gc2VsZWN0aW9uTW9kZTtcblx0XHQvL0VudGl0eVNldCBub3QgZGVsZXRhYmxlOlxuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBjb21waWxlRXhwcmVzc2lvbihcblx0XHRcdGlmRWxzZShcblx0XHRcdFx0b3IoLi4uYUhpZGRlbkJpbmRpbmdFeHByZXNzaW9ucy5jb25jYXQoYVZpc2libGVCaW5kaW5nRXhwcmVzc2lvbnMpLCBtYXNzRWRpdFZpc2liaWxpdHlFeHByZXNzaW9uKSxcblx0XHRcdFx0Y29uc3RhbnQoc2VsZWN0aW9uTW9kZSksXG5cdFx0XHRcdGNvbnN0YW50KFNlbGVjdGlvbk1vZGUuTm9uZSlcblx0XHRcdClcblx0XHQpO1xuXHR9XG59XG5cbi8qKlxuICogTWV0aG9kIHRvIHJldHJpZXZlIGFsbCB0YWJsZSBhY3Rpb25zIGZyb20gYW5ub3RhdGlvbnMuXG4gKiBAcGFyYW0gbGluZUl0ZW1Bbm5vdGF0aW9uXG4gKiBAcGFyYW0gdmlzdWFsaXphdGlvblBhdGhcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcmV0dXJucyBUaGUgdGFibGUgYW5ub3RhdGlvbiBhY3Rpb25zXG4gKi9cbmZ1bmN0aW9uIGdldFRhYmxlQW5ub3RhdGlvbkFjdGlvbnMoXG5cdGxpbmVJdGVtQW5ub3RhdGlvbjogTGluZUl0ZW0sXG5cdHZpc3VhbGl6YXRpb25QYXRoOiBzdHJpbmcsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0PlxuKTogeyB0YWJsZUFjdGlvbnM6IEFycmF5PEFubm90YXRpb25BY3Rpb24gfCBBbm5vdGF0aW9uQWN0aW9uR3JvdXA+IH0ge1xuXHRjb25zdCB0YWJsZUFjdGlvbnM6IEFycmF5PEFubm90YXRpb25BY3Rpb24gfCBBbm5vdGF0aW9uQWN0aW9uR3JvdXA+ID0gW107XG5cdGNvbnN0IGNvcHlEYXRhRmllbGQgPSBnZXRDb3B5QWN0aW9uKFxuXHRcdGxpbmVJdGVtQW5ub3RhdGlvbi5maWx0ZXIoKGRhdGFGaWVsZCkgPT4ge1xuXHRcdFx0cmV0dXJuIGRhdGFGaWVsZElzQ29weUFjdGlvbihkYXRhRmllbGQgYXMgRGF0YUZpZWxkRm9yQWN0aW9uVHlwZXMpO1xuXHRcdH0pIGFzIERhdGFGaWVsZEZvckFjdGlvblR5cGVzW11cblx0KTtcblx0aWYgKGNvcHlEYXRhRmllbGQpIHtcblx0XHR0YWJsZUFjdGlvbnMucHVzaCh7XG5cdFx0XHR0eXBlOiBBY3Rpb25UeXBlLkNvcHksXG5cdFx0XHRhbm5vdGF0aW9uUGF0aDogY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXRCYXNlZEFubm90YXRpb25QYXRoKGNvcHlEYXRhRmllbGQuZnVsbHlRdWFsaWZpZWROYW1lKSxcblx0XHRcdGtleTogS2V5SGVscGVyLmdlbmVyYXRlS2V5RnJvbURhdGFGaWVsZChjb3B5RGF0YUZpZWxkKSxcblx0XHRcdHZpc2libGU6IGNvbXBpbGVFeHByZXNzaW9uKHZpc2libGVFeHByZXNzaW9uKGNvcHlEYXRhRmllbGQsIGNvbnZlcnRlckNvbnRleHQpKSxcblx0XHRcdHZpc2libGVGb3JDb250ZXh0TWVudTogY29tcGlsZUV4cHJlc3Npb24odmlzaWJsZUZvckNvbnRleHRNZW51RXhwcmVzc2lvbihjb3B5RGF0YUZpZWxkLCBjb252ZXJ0ZXJDb250ZXh0KSksXG5cdFx0XHR0ZXh0OiBjb3B5RGF0YUZpZWxkLkxhYmVsPy50b1N0cmluZygpID8/IExpYnJhcnkuZ2V0UmVzb3VyY2VCdW5kbGVGb3IoXCJzYXAuZmUuY29yZVwiKSEuZ2V0VGV4dChcIkNfQ09NTU9OX0NPUFlcIiksXG5cdFx0XHRpc05hdmlnYWJsZTogdHJ1ZVxuXHRcdH0pO1xuXHR9XG5cdGxpbmVJdGVtQW5ub3RhdGlvblxuXHRcdC5maWx0ZXIoKGRhdGFGaWVsZCkgPT4ge1xuXHRcdFx0cmV0dXJuICFkYXRhRmllbGRJc0NvcHlBY3Rpb24oZGF0YUZpZWxkIGFzIERhdGFGaWVsZEZvckFjdGlvbik7XG5cdFx0fSlcblx0XHQuZm9yRWFjaCgoZGF0YUZpZWxkOiBEYXRhRmllbGRBYnN0cmFjdFR5cGVzKSA9PiB7XG5cdFx0XHRpZiAoXG5cdFx0XHRcdGlzRGF0YUZpZWxkRm9yQWN0aW9uQWJzdHJhY3QoZGF0YUZpZWxkKSAmJlxuXHRcdFx0XHRkYXRhRmllbGQuSW5saW5lPy52YWx1ZU9mKCkgIT09IHRydWUgJiZcblx0XHRcdFx0ZGF0YUZpZWxkLkRldGVybWluaW5nPy52YWx1ZU9mKCkgIT09IHRydWVcblx0XHRcdCkge1xuXHRcdFx0XHRjb25zdCB0YWJsZUFjdGlvbiA9IGdldERhdGFGaWVsZEFubm90YXRpb25BY3Rpb24oZGF0YUZpZWxkLCBjb252ZXJ0ZXJDb250ZXh0KTtcblx0XHRcdFx0aWYgKHRhYmxlQWN0aW9uKSB7XG5cdFx0XHRcdFx0dGFibGVBY3Rpb25zLnB1c2godGFibGVBY3Rpb24pO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2UgaWYgKGlzRGF0YUZpZWxkRm9yQWN0aW9uR3JvdXAoZGF0YUZpZWxkKSkge1xuXHRcdFx0XHRjb25zdCBkYXRhRmllbGRHcm91cCA9IGdldERhdGFGaWVsZEFubm90YXRpb25BY3Rpb24oZGF0YUZpZWxkLCBjb252ZXJ0ZXJDb250ZXh0KTtcblx0XHRcdFx0aWYgKGRhdGFGaWVsZEdyb3VwKSB7XG5cdFx0XHRcdFx0dGFibGVBY3Rpb25zLnB1c2goZGF0YUZpZWxkR3JvdXApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0cmV0dXJuIHtcblx0XHR0YWJsZUFjdGlvbnNcblx0fTtcbn1cblxuLy8gRm9yIHRoZSBjb250ZXh0IG1lbnUsIHRoZSB2aXNpYmlsaXR5IHNob3VsZCBhbHNvIGNvbnNpZGVyIHRoZSAnaW5hY3RpdmVDb250ZXh0JyBwcm9wZXJ0eTpcbi8vIG9ubHkgd2hlbiBhdCBsZWFzdCBvbmUgc2VsZWN0ZWQgY29udGV4dCBpcyBhY3RpdmUgKGkuZS4gXCJjb250ZXh0bWVudS9pbmFjdGl2ZUNvbnRleHRcIiBpcyBmYWxzZSksIHRoZSBhY3Rpb24gc2hvdWxkIGJlIHZpc2libGUgaW4gdGhlIGNvbnRleHQgbWVudVxuLy8gVGhpcyBpcyBvbmx5IHJlbGV2YW50IHdoZW4gdGhlIHRhYmxlIG1hbmlmZXN0IHNldHRpbmcgXCJjcmVhdGlvbk1vZGVcIiBpcyBcIklubGluZUNyZWF0aW9uUm93c1wiXG5mdW5jdGlvbiB2aXNpYmxlRm9yQ29udGV4dE1lbnVFeHByZXNzaW9uKFxuXHRkYXRhRmllbGQ6IERhdGFGaWVsZEZvckFjdGlvbiB8IERhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbiB8IERhdGFGaWVsZEZvckFjdGlvbkdyb3VwIHwgdW5kZWZpbmVkLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD5cbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdHJldHVybiBhbmQodmlzaWJsZUV4cHJlc3Npb24oZGF0YUZpZWxkLCBjb252ZXJ0ZXJDb250ZXh0KSwgZXF1YWwocGF0aEluTW9kZWwoXCJjb250ZXh0bWVudS9pbmFjdGl2ZUNvbnRleHRcIiwgXCJpbnRlcm5hbFwiKSwgZmFsc2UpKTtcbn1cblxuZnVuY3Rpb24gZ2V0RGF0YUZpZWxkQW5ub3RhdGlvbkFjdGlvbihcblx0ZGF0YUZpZWxkOiBEYXRhRmllbGRBYnN0cmFjdFR5cGVzLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD5cbik6IEFubm90YXRpb25BY3Rpb24gfCBBbm5vdGF0aW9uQWN0aW9uR3JvdXAgfCB2b2lkIHtcblx0bGV0IHRhYmxlQWN0aW9uOiBBbm5vdGF0aW9uQWN0aW9uO1xuXHRsZXQgZW50aXR5VHlwZTtcblx0c3dpdGNoIChkYXRhRmllbGQuJFR5cGUpIHtcblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFjdGlvbjpcblx0XHRcdHRhYmxlQWN0aW9uID0ge1xuXHRcdFx0XHR0eXBlOiBBY3Rpb25UeXBlLkRhdGFGaWVsZEZvckFjdGlvbixcblx0XHRcdFx0YW5ub3RhdGlvblBhdGg6IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0QmFzZWRBbm5vdGF0aW9uUGF0aChkYXRhRmllbGQuZnVsbHlRdWFsaWZpZWROYW1lKSxcblx0XHRcdFx0a2V5OiBLZXlIZWxwZXIuZ2VuZXJhdGVLZXlGcm9tRGF0YUZpZWxkKGRhdGFGaWVsZCksXG5cdFx0XHRcdHZpc2libGU6IGNvbXBpbGVFeHByZXNzaW9uKHZpc2libGVFeHByZXNzaW9uKGRhdGFGaWVsZCwgY29udmVydGVyQ29udGV4dCkpLFxuXHRcdFx0XHR2aXNpYmxlRm9yQ29udGV4dE1lbnU6IGNvbXBpbGVFeHByZXNzaW9uKHZpc2libGVGb3JDb250ZXh0TWVudUV4cHJlc3Npb24oZGF0YUZpZWxkLCBjb252ZXJ0ZXJDb250ZXh0KSksXG5cdFx0XHRcdGlzTmF2aWdhYmxlOiB0cnVlLFxuXHRcdFx0XHRpc0FJT3BlcmF0aW9uOiBpc0FjdGlvbkFJT3BlcmF0aW9uKGRhdGFGaWVsZCkgPT09IHRydWUgfHwgdW5kZWZpbmVkXG5cdFx0XHR9O1xuXHRcdFx0ZW50aXR5VHlwZSA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpLmZ1bGx5UXVhbGlmaWVkTmFtZTtcblx0XHRcdGlmIChfdXNlRW5hYmxlZEV4cHJlc3Npb24oZGF0YUZpZWxkLCBlbnRpdHlUeXBlKSkge1xuXHRcdFx0XHR0YWJsZUFjdGlvbi5lbmFibGVkID0gZ2V0RW5hYmxlZEZvckFubm90YXRpb25BY3Rpb24oY29udmVydGVyQ29udGV4dCwgZGF0YUZpZWxkLkFjdGlvblRhcmdldCwgdHJ1ZSk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdGFibGVBY3Rpb247XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb246XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHR0eXBlOiBBY3Rpb25UeXBlLkRhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbixcblx0XHRcdFx0YW5ub3RhdGlvblBhdGg6IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0QmFzZWRBbm5vdGF0aW9uUGF0aChkYXRhRmllbGQuZnVsbHlRdWFsaWZpZWROYW1lKSxcblx0XHRcdFx0a2V5OiBLZXlIZWxwZXIuZ2VuZXJhdGVLZXlGcm9tRGF0YUZpZWxkKGRhdGFGaWVsZCksXG5cdFx0XHRcdHZpc2libGU6IGNvbXBpbGVFeHByZXNzaW9uKHZpc2libGVFeHByZXNzaW9uKGRhdGFGaWVsZCwgY29udmVydGVyQ29udGV4dCkpLFxuXHRcdFx0XHR2aXNpYmxlRm9yQ29udGV4dE1lbnU6IGNvbXBpbGVFeHByZXNzaW9uKHZpc2libGVGb3JDb250ZXh0TWVudUV4cHJlc3Npb24oZGF0YUZpZWxkLCBjb252ZXJ0ZXJDb250ZXh0KSlcblx0XHRcdH07XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBY3Rpb25Hcm91cDpcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdHR5cGU6IEFjdGlvblR5cGUuTWVudSxcblx0XHRcdFx0a2V5OiBLZXlIZWxwZXIuZ2VuZXJhdGVLZXlGcm9tRGF0YUZpZWxkKGRhdGFGaWVsZCksXG5cdFx0XHRcdGlkOiBLZXlIZWxwZXIuZ2VuZXJhdGVLZXlGcm9tRGF0YUZpZWxkKGRhdGFGaWVsZCksXG5cdFx0XHRcdHRleHQ6IGRhdGFGaWVsZC5MYWJlbD8udG9TdHJpbmcoKSxcblx0XHRcdFx0dmlzaWJsZTogY29tcGlsZUV4cHJlc3Npb24odmlzaWJsZUV4cHJlc3Npb24oZGF0YUZpZWxkLCBjb252ZXJ0ZXJDb250ZXh0KSksXG5cdFx0XHRcdHZpc2libGVGb3JDb250ZXh0TWVudTogY29tcGlsZUV4cHJlc3Npb24odmlzaWJsZUZvckNvbnRleHRNZW51RXhwcmVzc2lvbihkYXRhRmllbGQsIGNvbnZlcnRlckNvbnRleHQpKSxcblx0XHRcdFx0aXNBSU9wZXJhdGlvbjogaXNNZW51QUlPcGVyYXRpb24oZGF0YUZpZWxkLkFjdGlvbnMpID09PSB0cnVlIHx8IHVuZGVmaW5lZCxcblx0XHRcdFx0bWVudTogZGF0YUZpZWxkLkFjdGlvbnMubWFwKChhY3Rpb24pID0+IGdldERhdGFGaWVsZEFubm90YXRpb25BY3Rpb24oYWN0aW9uLCBjb252ZXJ0ZXJDb250ZXh0KSlcblx0XHRcdH0gYXMgQW5ub3RhdGlvbkFjdGlvbkdyb3VwO1xuXHRcdGRlZmF1bHQ6XG5cdFx0XHRyZXR1cm47XG5cdH1cbn1cblxuLyoqXG4gKiBHZW5lcmF0ZSB0aGUgYmluZGluZ0V4cHJlc3Npb24gZm9yIHRoZSBoaWdobGlnaHQgcm93U2V0dGluZyBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0gY3JpdGljYWxpdHlBbm5vdGF0aW9uIFBhdGggb3IgdmFsdWUgb2YgdGhlIGNyaXRpY2FsaXR5XG4gKiBAcGFyYW0gaXNEcmFmdFJvb3RPck5vZGUgIElzIHRoZSBjdXJyZW50IGVudGl0eVNldCBhbiBEcmFmdCByb290IG9yIGEgbm9kZVxuICogQHBhcmFtIHRhcmdldEVudGl0eVR5cGUgVGhlIHRhcmdldGVkIGVudGl0eVR5cGVcbiAqIEByZXR1cm5zIEFuIGV4cHJlc3Npb25CaW5kaW5nXG4gKi9cbmZ1bmN0aW9uIGdldEhpZ2hsaWdodFJvd0JpbmRpbmcoXG5cdGNyaXRpY2FsaXR5QW5ub3RhdGlvbjogQ3JpdGljYWxpdHkgfCB1bmRlZmluZWQsXG5cdGlzRHJhZnRSb290T3JOb2RlOiBib29sZWFuLFxuXHR0YXJnZXRFbnRpdHlUeXBlPzogRW50aXR5VHlwZVxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPE1lc3NhZ2VUeXBlPiB7XG5cdGxldCBkZWZhdWx0SGlnaGxpZ2h0Um93RGVmaW5pdGlvbjogTWVzc2FnZVR5cGUgfCBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248TWVzc2FnZVR5cGU+ID0gTWVzc2FnZVR5cGUuTm9uZTtcblx0aWYgKGNyaXRpY2FsaXR5QW5ub3RhdGlvbikge1xuXHRcdGlmICh0eXBlb2YgY3JpdGljYWxpdHlBbm5vdGF0aW9uID09PSBcIm9iamVjdFwiKSB7XG5cdFx0XHRkZWZhdWx0SGlnaGxpZ2h0Um93RGVmaW5pdGlvbiA9IGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihjcml0aWNhbGl0eUFubm90YXRpb24pIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxNZXNzYWdlVHlwZT47XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIEVudW0gVmFsdWUgc28gd2UgZ2V0IHRoZSBjb3JyZXNwb25kaW5nIHN0YXRpYyBwYXJ0XG5cdFx0XHRkZWZhdWx0SGlnaGxpZ2h0Um93RGVmaW5pdGlvbiA9IGdldE1lc3NhZ2VUeXBlRnJvbUNyaXRpY2FsaXR5VHlwZShjcml0aWNhbGl0eUFubm90YXRpb24pO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gZm9ybWF0UmVzdWx0KFxuXHRcdFtcblx0XHRcdGRlZmF1bHRIaWdobGlnaHRSb3dEZWZpbml0aW9uLFxuXHRcdFx0cGF0aEluTW9kZWwoYGZpbHRlcmVkTWVzc2FnZXNgLCBcImludGVybmFsXCIpLFxuXHRcdFx0aXNEcmFmdFJvb3RPck5vZGUgJiYgRW50aXR5Lkhhc0FjdGl2ZSxcblx0XHRcdGlzRHJhZnRSb290T3JOb2RlICYmIEVudGl0eS5Jc0FjdGl2ZSxcblx0XHRcdGAke2lzRHJhZnRSb290T3JOb2RlfWAsXG5cdFx0XHRwYXRoSW5Nb2RlbChcIkAkdWk1LmZlLmNvbnRleHRQYXRoXCIpLFxuXHRcdFx0VUkuSXNJbmFjdGl2ZVxuXHRcdF0sXG5cdFx0dGFibGVGb3JtYXR0ZXJzLnJvd0hpZ2hsaWdodGluZyxcblx0XHR0YXJnZXRFbnRpdHlUeXBlXG5cdCk7XG59XG5cbi8qKlxuICogR2V0cyB0aGUgZXh0ZXJuYWwgY3JlYXRpb24gYmVoYXZpb3IgaWYgdGhlcmUncyBvbmUuXG4gKiBAcGFyYW0gdGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb25cbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcGFyYW0gbmF2aWdhdGlvblNldHRpbmdzXG4gKiBAcmV0dXJucyBUaGUgZXh0ZXJuYWwgY3JlYXRpb24gYmVoYXZpb3IsIG9yIHVuZGVmaW5lZCBpZiB0aGVyZSdzIG5vbmUuXG4gKi9cbmZ1bmN0aW9uIGdldEV4dGVybmFsQ3JlYXRpb25CZWhhdmlvcihcblx0dGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb246IFRhYmxlQ29udHJvbENvbmZpZ3VyYXRpb24sXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0bmF2aWdhdGlvblNldHRpbmdzOiBOYXZpZ2F0aW9uU2V0dGluZ3NDb25maWd1cmF0aW9uXG4pOiBDcmVhdGVCZWhhdmlvckV4dGVybmFsIHwgdW5kZWZpbmVkIHtcblx0Ly8gTGVnYWN5IHNldHRpbmdzOiB0aGUgb3V0Ym91bmQgaXMgc3BlY2lmaWVkIGluIG5hdmlnYXRpb24vY3JlYXRlXG5cdC8vIE5ldyBzZXR0aW5nczogdGhlIG91dGJvdW5kIGlzIHNwZWNpZmllZCBpbiB0YWJsZVNldHRpbmdzL2NyZWF0aW9uTW9kZVxuXHRjb25zdCBjcmVhdGlvbkRldGFpbHMgPSBuYXZpZ2F0aW9uU2V0dGluZ3M/LmNyZWF0ZTtcblx0Y29uc3Qgb3V0Ym91bmRLZXkgPSB0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbi5vdXRib3VuZENyZWF0aW9uID8/IGNyZWF0aW9uRGV0YWlscz8ub3V0Ym91bmQ7XG5cdGNvbnN0IG91dGJvdW5kRGV0YWlsID0gb3V0Ym91bmRLZXkgPyBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpLmdldE91dGJvdW5kTmF2aWdhdGlvbkVudHJpZXMoKT8uW291dGJvdW5kS2V5XSA6IHVuZGVmaW5lZDtcblx0aWYgKG91dGJvdW5kS2V5ICYmIG91dGJvdW5kRGV0YWlsKSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdG1vZGU6IFwiRXh0ZXJuYWxcIixcblx0XHRcdG91dGJvdW5kOiBvdXRib3VuZEtleSxcblx0XHRcdG91dGJvdW5kRGV0YWlsXG5cdFx0fTtcblx0fSBlbHNlIHtcblx0XHRpZiAodGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24uY3JlYXRpb25Nb2RlID09PSBDcmVhdGlvbk1vZGUuRXh0ZXJuYWwpIHtcblx0XHRcdC8vIE91dGJvdW5kIGNvbmZpZ3VyYXRpb24gaW5jb3JyZWN0IC0tPiBmYWxsYmFjayB0byBOZXdQYWdlXG5cdFx0XHRMb2cud2FybmluZyhgQ2Fubm90IGZpbmQgb3V0Ym91bmQgcGFyYW1ldGVycyBmb3IgXCJFeHRlcm5hbFwiIGNyZWF0aW9uIG1vZGUuIEluc3RlYWQsIHRoZSBkZWZhdWx0IG1vZGUgXCJOZXdQYWdlXCIgaXMgdXNlZC5gKTtcblx0XHRcdHRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uLmNyZWF0aW9uTW9kZSA9IENyZWF0aW9uTW9kZS5OZXdQYWdlO1xuXHRcdFx0ZGVsZXRlIHRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uLm91dGJvdW5kQ3JlYXRpb247XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxufVxuXG5mdW5jdGlvbiBfZ2V0Q3JlYXRpb25CZWhhdmlvdXIoXG5cdGxpbmVJdGVtQW5ub3RhdGlvbjogTGluZUl0ZW0gfCB1bmRlZmluZWQsXG5cdHRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uOiBUYWJsZUNvbnRyb2xDb25maWd1cmF0aW9uLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdG5hdmlnYXRpb25TZXR0aW5nczogTmF2aWdhdGlvblNldHRpbmdzQ29uZmlndXJhdGlvbixcblx0dmlzdWFsaXphdGlvblBhdGg6IHN0cmluZ1xuKTogQ3JlYXRlQmVoYXZpb3IgfCBDcmVhdGVCZWhhdmlvckV4dGVybmFsIHtcblx0Y29uc3QgZXh0ZXJuYWxCZWhhdmlvciA9IGdldEV4dGVybmFsQ3JlYXRpb25CZWhhdmlvcih0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbiwgY29udmVydGVyQ29udGV4dCwgbmF2aWdhdGlvblNldHRpbmdzKTtcblx0aWYgKGV4dGVybmFsQmVoYXZpb3IpIHtcblx0XHR0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbi5jcmVhdGlvbk1vZGUgPSBDcmVhdGlvbk1vZGUuRXh0ZXJuYWw7XG5cdFx0dGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24ub3V0Ym91bmRDcmVhdGlvbiA9IGV4dGVybmFsQmVoYXZpb3Iub3V0Ym91bmQ7XG5cdFx0cmV0dXJuIGV4dGVybmFsQmVoYXZpb3I7XG5cdH1cblxuXHRjb25zdCB0YWJsZU1hbmlmZXN0U2V0dGluZ3M6IFRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdENvbnRyb2xDb25maWd1cmF0aW9uKHZpc3VhbGl6YXRpb25QYXRoKTtcblx0Y29uc3Qgb3JpZ2luYWxUYWJsZVNldHRpbmdzID0gdGFibGVNYW5pZmVzdFNldHRpbmdzPy50YWJsZVNldHRpbmdzID8/IHt9O1xuXHRjb25zdCBuYXZpZ2F0aW9uRGV0YWlscyA9IG5hdmlnYXRpb25TZXR0aW5ncz8uZGV0YWlsO1xuXHRpZiAoXG5cdFx0Y29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSA9PT0gVGVtcGxhdGVUeXBlLkxpc3RSZXBvcnQgJiZcblx0XHQhW0NyZWF0aW9uTW9kZS5OZXdQYWdlLCBDcmVhdGlvbk1vZGUuRXh0ZXJuYWwsIENyZWF0aW9uTW9kZS5DcmVhdGlvbkRpYWxvZ10uaW5jbHVkZXModGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24uY3JlYXRpb25Nb2RlKVxuXHQpIHtcblx0XHQvLyBGYWxsYmFjayB0byBcIk5ld1BhZ2VcIlxuXHRcdExvZy53YXJuaW5nKFxuXHRcdFx0YENyZWF0aW9uIG1vZGUgJyR7dGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24uY3JlYXRpb25Nb2RlfScgY2FuIG5vdCBiZSB1c2VkIHdpdGhpbiB0aGUgTGlzdCBSZXBvcnQuIEluc3RlYWQsIHRoZSBkZWZhdWx0IG1vZGUgXCJOZXdQYWdlXCIgaXMgdXNlZC5gXG5cdFx0KTtcblx0XHR0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbi5jcmVhdGlvbk1vZGUgPSBDcmVhdGlvbk1vZGUuTmV3UGFnZTtcblx0fSBlbHNlIGlmIChcblx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpICE9PSBUZW1wbGF0ZVR5cGUuTGlzdFJlcG9ydCAmJlxuXHRcdHRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uLnR5cGUgPT09IFwiVHJlZVRhYmxlXCIgJiZcblx0XHQhW0NyZWF0aW9uTW9kZS5OZXdQYWdlLCBDcmVhdGlvbk1vZGUuSW5saW5lLCBDcmVhdGlvbk1vZGUuQ3JlYXRpb25EaWFsb2ddLmluY2x1ZGVzKHRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uLmNyZWF0aW9uTW9kZSlcblx0KSB7XG5cdFx0Ly8gRmFsbGJhY2sgdG8gXCJOZXdQYWdlXCIgaW4gY2FzZSBvZiBhIG5vbi1zdXBwb3J0ZWQgbW9kZSBmb3IgYSBUcmVlVGFibGVcblx0XHRMb2cud2FybmluZyhcblx0XHRcdGBDcmVhdGlvbiBtb2RlICcke3RhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uLmNyZWF0aW9uTW9kZX0nIGNhbiBub3QgYmUgdXNlZCB3aXRoIGEgVHJlZSBUYWJsZS4gSW5zdGVhZCwgdGhlIGRlZmF1bHQgbW9kZSBcIk5ld1BhZ2VcIiBpcyB1c2VkLmBcblx0XHQpO1xuXHRcdHRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uLmNyZWF0aW9uTW9kZSA9IENyZWF0aW9uTW9kZS5OZXdQYWdlO1xuXHR9XG5cblx0bGV0IG5ld0FjdGlvbjtcblx0aWYgKGxpbmVJdGVtQW5ub3RhdGlvbikge1xuXHRcdC8vIGluLWFwcFxuXHRcdGNvbnN0IHRhcmdldEFubm90YXRpb25zID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXQoKT8uYW5ub3RhdGlvbnM7XG5cdFx0Y29uc3QgdGFyZ2V0QW5ub3RhdGlvbnNDb21tb24gPSB0YXJnZXRBbm5vdGF0aW9ucz8uQ29tbW9uIGFzIEVudGl0eVNldEFubm90YXRpb25zX0NvbW1vbixcblx0XHRcdHRhcmdldEFubm90YXRpb25zU2Vzc2lvbiA9IHRhcmdldEFubm90YXRpb25zPy5TZXNzaW9uIGFzIEVudGl0eVNldEFubm90YXRpb25zX1Nlc3Npb247XG5cdFx0bmV3QWN0aW9uID0gdGFyZ2V0QW5ub3RhdGlvbnNDb21tb24/LkRyYWZ0Um9vdD8uTmV3QWN0aW9uIHx8IHRhcmdldEFubm90YXRpb25zU2Vzc2lvbj8uU3RpY2t5U2Vzc2lvblN1cHBvcnRlZD8uTmV3QWN0aW9uO1xuXHRcdGlmICh0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbi5jcmVhdGlvbk1vZGUgPT09IENyZWF0aW9uTW9kZS5DcmVhdGlvblJvdyAmJiBuZXdBY3Rpb24pIHtcblx0XHRcdC8vIEEgY29tYmluYXRpb24gb2YgJ0NyZWF0aW9uUm93JyBhbmQgJ05ld0FjdGlvbicgZG9lcyBub3QgbWFrZSBzZW5zZVxuXHRcdFx0dGhyb3cgRXJyb3IoYENyZWF0aW9uIG1vZGUgJyR7Q3JlYXRpb25Nb2RlLkNyZWF0aW9uUm93fScgY2FuIG5vdCBiZSB1c2VkIHdpdGggYSBjdXN0b20gJ25ldycgYWN0aW9uICgke25ld0FjdGlvbn0pYCk7XG5cdFx0fVxuXHRcdGlmIChuYXZpZ2F0aW9uRGV0YWlscz8ucm91dGUpIHtcblx0XHRcdC8vIHJvdXRlIHNwZWNpZmllZFxuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0bW9kZTogdGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24uY3JlYXRpb25Nb2RlLFxuXHRcdFx0XHRhcHBlbmQ6IHRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uLmNyZWF0ZUF0RW5kLFxuXHRcdFx0XHRuZXdBY3Rpb246IG5ld0FjdGlvbj8udG9TdHJpbmcoKSxcblx0XHRcdFx0bmF2aWdhdGVUb1RhcmdldDogdGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24uY3JlYXRpb25Nb2RlID09PSBDcmVhdGlvbk1vZGUuTmV3UGFnZSA/IG5hdmlnYXRpb25EZXRhaWxzLnJvdXRlIDogdW5kZWZpbmVkIC8vIG5hdmlnYXRlIG9ubHkgaW4gTmV3UGFnZSBtb2RlXG5cdFx0XHR9O1xuXHRcdH1cblx0fVxuXHQvLyBubyBuYXZpZ2F0aW9uIG9yIG5vIHJvdXRlIHNwZWNpZmllZCAtIGZhbGxiYWNrIHRvIGlubGluZSBjcmVhdGUgaWYgb3JpZ2luYWwgY3JlYXRpb24gbW9kZSB3YXMgJ05ld1BhZ2UnXG5cdGlmICh0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbi5jcmVhdGlvbk1vZGUgPT09IENyZWF0aW9uTW9kZS5OZXdQYWdlKSB7XG5cdFx0aWYgKGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCkgPT09IFRlbXBsYXRlVHlwZS5MaXN0UmVwb3J0KSB7XG5cdFx0XHRMb2cuZXJyb3IoXCJUaGUgY3JlYXRpb24gbW9kZSAnTmV3UGFnZScgaXMgdXNlZCBidXQgdGhlIG5hdmlnYXRpb24gY29uZmlndXJhdGlvbiB0byB0aGUgc3ViIHBhZ2UgaXMgbWlzc2luZy5cIik7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uLmNyZWF0aW9uTW9kZSA9IENyZWF0aW9uTW9kZS5JbmxpbmU7XG5cdFx0XHQvLyBJbiBjYXNlIHRoZXJlIHdhcyBubyBzcGVjaWZpYyBjb25maWd1cmF0aW9uIGZvciB0aGUgY3JlYXRlQXRFbmQgd2UgZm9yY2UgaXQgdG8gZmFsc2Vcblx0XHRcdGlmIChvcmlnaW5hbFRhYmxlU2V0dGluZ3MuY3JlYXRpb25Nb2RlPy5jcmVhdGVBdEVuZCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdHRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uLmNyZWF0ZUF0RW5kID0gZmFsc2U7XG5cdFx0XHR9XG5cdFx0XHRMb2cuaW5mbyhcIlRoZSBjcmVhdGlvbiBtb2RlIHdhcyBjaGFuZ2VkIGZyb20gJ05ld1BhZ2UnIHRvICdJbmxpbmUnIGR1ZSB0byBtaXNzaW5nIG5hdmlnYXRpb24gY29uZmlndXJhdGlvbiB0byB0aGUgc3ViIHBhZ2UuXCIpO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4ge1xuXHRcdG1vZGU6IHRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uLmNyZWF0aW9uTW9kZSxcblx0XHRhcHBlbmQ6IHRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uLmNyZWF0ZUF0RW5kLFxuXHRcdG5ld0FjdGlvbjogbmV3QWN0aW9uPy50b1N0cmluZygpXG5cdH07XG59XG5jb25zdCBfZ2V0Um93Q29uZmlndXJhdGlvblByb3BlcnR5ID0gZnVuY3Rpb24gKFxuXHRsaW5lSXRlbUFubm90YXRpb246IExpbmVJdGVtIHwgdW5kZWZpbmVkLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdG5hdmlnYXRpb25TZXR0aW5nczogTmF2aWdhdGlvblNldHRpbmdzQ29uZmlndXJhdGlvbixcblx0dGFyZ2V0UGF0aDogc3RyaW5nLFxuXHR0YWJsZVR5cGU6IFRhYmxlVHlwZSxcblx0YWdncmVnYXRpb25PbkxlYWZMZXZlbGVuYWJsZWQ/OiBib29sZWFuXG4pOiBSb3dDb25maWd1cmF0aW9uIHtcblx0bGV0IG5hdmlnYXRpb25JbmZvOiBSb3dOYXZpZ2F0aW9uSW5mbyB8IHVuZGVmaW5lZDtcblx0bGV0IGNyaXRpY2FsaXR5UHJvcGVydHk6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxNZXNzYWdlVHlwZT4gPSBjb25zdGFudChNZXNzYWdlVHlwZS5Ob25lKTtcblx0Y29uc3QgdGFyZ2V0RW50aXR5VHlwZSA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpO1xuXHRjb25zdCBjcml0aWNhbGl0eUFubm90YXRpb24gPSBsaW5lSXRlbUFubm90YXRpb24/LmFubm90YXRpb25zPy5VST8uQ3JpdGljYWxpdHk7XG5cdGlmIChuYXZpZ2F0aW9uU2V0dGluZ3MgJiYgbGluZUl0ZW1Bbm5vdGF0aW9uKSB7XG5cdFx0Y29uc3QgbmF2aWdhdGlvblRhcmdldCA9IG5hdmlnYXRpb25TZXR0aW5ncy5kaXNwbGF5Py50YXJnZXQgfHwgbmF2aWdhdGlvblNldHRpbmdzLmRldGFpbD8ub3V0Ym91bmQ7XG5cdFx0Y29uc3QgdGFyZ2V0RW50aXR5U2V0ID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXQoKTtcblx0XHRjcml0aWNhbGl0eVByb3BlcnR5ID0gZ2V0SGlnaGxpZ2h0Um93QmluZGluZyhcblx0XHRcdGNyaXRpY2FsaXR5QW5ub3RhdGlvbixcblx0XHRcdCEhTW9kZWxIZWxwZXIuZ2V0RHJhZnRSb290KHRhcmdldEVudGl0eVNldCkgfHwgISFNb2RlbEhlbHBlci5nZXREcmFmdE5vZGUodGFyZ2V0RW50aXR5U2V0KSxcblx0XHRcdHRhcmdldEVudGl0eVR5cGVcblx0XHQpO1xuXHRcdGlmIChuYXZpZ2F0aW9uVGFyZ2V0KSB7XG5cdFx0XHRuYXZpZ2F0aW9uSW5mbyA9IHsgdHlwZTogXCJPdXRib3VuZFwiLCBuYXZpZ2F0aW9uVGFyZ2V0IH07XG5cdFx0fVxuXHRcdGlmICghbmF2aWdhdGlvblRhcmdldCAmJiBuYXZpZ2F0aW9uU2V0dGluZ3MuZGV0YWlsPy5yb3V0ZSkge1xuXHRcdFx0Y29uc3QgY2hlY2tFZGl0YWJsZSA9XG5cdFx0XHRcdE1vZGVsSGVscGVyLmdldERyYWZ0Um9vdCh0YXJnZXRFbnRpdHlTZXQpICE9PSB1bmRlZmluZWQgfHwgTW9kZWxIZWxwZXIuZ2V0RHJhZnROb2RlKHRhcmdldEVudGl0eVNldCkgIT09IHVuZGVmaW5lZDtcblx0XHRcdG5hdmlnYXRpb25JbmZvID0ge1xuXHRcdFx0XHR0eXBlOiBcIk5hdmlnYXRpb25cIixcblx0XHRcdFx0cm91dGVQYXRoOiBuYXZpZ2F0aW9uU2V0dGluZ3MuZGV0YWlsLnJvdXRlLFxuXHRcdFx0XHR0YXJnZXRQYXRoLFxuXHRcdFx0XHRjaGVja0VkaXRhYmxlLFxuXHRcdFx0XHRyZWNyZWF0ZUNvbnRleHQ6IHRhYmxlVHlwZSA9PT0gXCJBbmFseXRpY2FsVGFibGVcIlxuXHRcdFx0fTtcblx0XHR9XG5cdH1cblx0Y29uc3Qgcm93TmF2aWdhdGVkRXhwcmVzc2lvbjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+ID0gZm9ybWF0UmVzdWx0KFxuXHRcdFtwYXRoSW5Nb2RlbChcIi9kZWVwZXN0UGF0aFwiLCBcImludGVybmFsXCIpXSxcblx0XHR0YWJsZUZvcm1hdHRlcnMubmF2aWdhdGVkUm93LFxuXHRcdHRhcmdldEVudGl0eVR5cGVcblx0KTtcblx0cmV0dXJuIHtcblx0XHRuYXZpZ2F0aW9uSW5mbyxcblx0XHRhY3Rpb25UeXBlOiBuYXZpZ2F0aW9uSW5mbyA/IFwiTmF2aWdhdGlvblwiIDogdW5kZWZpbmVkLFxuXHRcdHJvd0hpZ2hsaWdodGluZzogY29tcGlsZUV4cHJlc3Npb24oY3JpdGljYWxpdHlQcm9wZXJ0eSksXG5cdFx0cm93TmF2aWdhdGVkOiBjb21waWxlRXhwcmVzc2lvbihyb3dOYXZpZ2F0ZWRFeHByZXNzaW9uKSxcblx0XHRyb3dDcml0aWNhbGl0eUZvckluc2lnaHRzOiBjcml0aWNhbGl0eUFubm90YXRpb24gPyBjcml0aWNhbGl0eUV4cHJlc3Npb25Gb3JJbnRlZ3JhdGlvbkNhcmRzKGNyaXRpY2FsaXR5QW5ub3RhdGlvbikgOiB1bmRlZmluZWQsXG5cdFx0dmlzaWJsZTogY29tcGlsZUV4cHJlc3Npb24oYW5kKG5vdChVSS5Jc0luYWN0aXZlKSwgYWdncmVnYXRpb25PbkxlYWZMZXZlbGVuYWJsZWQgPyBVSS5pc05vZGVMZXZlbE5hdmlnYWJsZSA6IHRydWUpKVxuXHR9O1xufTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgUHJvcGVydHlJbmZvIGZvciB0aGUgaWRlbnRpZmllZCBhZGRpdGlvbmFsIHByb3BlcnR5IGZvciB0aGUgQUxQIHRhYmxlIHVzZS1jYXNlLlxuICpcbiAqIEZvciBlLmcuIElmIFVJLkhpZGRlbiBwb2ludHMgdG8gYSBwcm9wZXJ0eSwgaW5jbHVkZSB0aGlzIHRlY2huaWNhbCBwcm9wZXJ0eSBpbiB0aGUgYWRkaXRpb25hbFByb3BlcnRpZXMgb2YgQ29tcGxleFByb3BlcnR5SW5mbyBvYmplY3QuXG4gKiBAcGFyYW0gbmFtZSBUaGUgbmFtZSBvZiB0aGUgcHJvcGVydHkgdG8gYmUgY3JlYXRlZC5cbiAqIEBwYXJhbSBjb2x1bW5zIFRoZSBsaXN0IG9mIGNvbHVtbnMgY3JlYXRlZCBmb3IgTGluZUl0ZW1zIGFuZCBQcm9wZXJ0aWVzIG9mIGVudGl0eVR5cGUgZnJvbSB0aGUgdGFibGUgdmlzdWFsaXphdGlvbi5cbiAqIEBwYXJhbSByZWxhdGVkQWRkaXRpb25hbFByb3BlcnR5TmFtZU1hcFxuICovXG5jb25zdCBjcmVhdGVUZWNobmljYWxQcm9wZXJ0eSA9IGZ1bmN0aW9uIChcblx0bmFtZTogc3RyaW5nLFxuXHRjb2x1bW5zOiBUYWJsZUNvbHVtbltdLFxuXHRyZWxhdGVkQWRkaXRpb25hbFByb3BlcnR5TmFtZU1hcDogUmVjb3JkPHN0cmluZywgc3RyaW5nPlxuKTogdm9pZCB7XG5cdGNvbnN0IGtleSA9IGBQcm9wZXJ0eV9UZWNobmljYWw6OiR7bmFtZX1gO1xuXHQvLyBWYWxpZGF0ZSBpZiB0aGUgdGVjaG5pY2FsIHByb3BlcnR5IGhhc24ndCB5ZXQgYmVlbiBjcmVhdGVkIG9uIHByZXZpb3VzIGl0ZXJhdGlvbnMuXG5cdGNvbnN0IGNvbHVtbkV4aXN0cyA9IGNvbHVtbnMuZmluZCgoY29sdW1uKSA9PiBjb2x1bW4ua2V5ID09PSBrZXkpO1xuXHQvLyBSZXRyaWV2ZSB0aGUgc2ltcGxlIHByb3BlcnR5IHVzZWQgYnkgdGhlIGhpZGRlbiBhbm5vdGF0aW9uLCBpdCB3aWxsIGJlIHVzZWQgYXMgYSBiYXNlIGZvciB0aGUgbWFuZGF0b3J5IGF0dHJpYnV0ZXMgb2YgbmV3bHkgY3JlYXRlZCB0ZWNobmljYWwgcHJvcGVydHkuIEZvciBlLmcuIHJlbGF0aXZlUGF0aFxuXHRjb25zdCBhZGRpdGlvbmFsUHJvcGVydHkgPVxuXHRcdCFjb2x1bW5FeGlzdHMgJiYgKGNvbHVtbnMuZmluZCgoY29sdW1uKSA9PiBjb2x1bW4ubmFtZSA9PT0gbmFtZSAmJiAhY29sdW1uLnByb3BlcnR5SW5mb3MpIGFzIEFubm90YXRpb25UYWJsZUNvbHVtbikhO1xuXHRpZiAoYWRkaXRpb25hbFByb3BlcnR5KSB7XG5cdFx0Y29uc3QgdGVjaG5pY2FsQ29sdW1uOiBBbm5vdGF0aW9uVGFibGVDb2x1bW4gPSB7XG5cdFx0XHRrZXk6IGtleSxcblx0XHRcdHR5cGU6IENvbHVtblR5cGUuQW5ub3RhdGlvbixcblx0XHRcdGxhYmVsOiBhZGRpdGlvbmFsUHJvcGVydHkubGFiZWwsXG5cdFx0XHRhbm5vdGF0aW9uUGF0aDogYWRkaXRpb25hbFByb3BlcnR5LmFubm90YXRpb25QYXRoLFxuXHRcdFx0ZGF0YVR5cGU6IFwiRWRtLlN0cmluZ1wiLFxuXHRcdFx0YXZhaWxhYmlsaXR5OiBcIkhpZGRlblwiLFxuXHRcdFx0bmFtZToga2V5LFxuXHRcdFx0cmVsYXRpdmVQYXRoOiBhZGRpdGlvbmFsUHJvcGVydHkucmVsYXRpdmVQYXRoLFxuXHRcdFx0c29ydGFibGU6IGZhbHNlLFxuXHRcdFx0aXNHcm91cGFibGU6IGZhbHNlLFxuXHRcdFx0aXNLZXk6IGZhbHNlLFxuXHRcdFx0ZXhwb3J0U2V0dGluZ3M6IG51bGwsXG5cdFx0XHRjYXNlU2Vuc2l0aXZlOiBmYWxzZSxcblx0XHRcdGFnZ3JlZ2F0YWJsZTogZmFsc2UsXG5cdFx0XHRmaWx0ZXJhYmxlOiBmYWxzZSxcblx0XHRcdGV4dGVuc2lvbjoge1xuXHRcdFx0XHR0ZWNobmljYWxseUdyb3VwYWJsZTogdHJ1ZSxcblx0XHRcdFx0dGVjaG5pY2FsbHlBZ2dyZWdhdGFibGU6IHRydWVcblx0XHRcdH1cblx0XHR9O1xuXHRcdGNvbHVtbnMucHVzaCh0ZWNobmljYWxDb2x1bW4pO1xuXHRcdHJlbGF0ZWRBZGRpdGlvbmFsUHJvcGVydHlOYW1lTWFwW25hbWVdID0gdGVjaG5pY2FsQ29sdW1uLm5hbWU7XG5cdH1cbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQMTNuTW9kZShcblx0dmlzdWFsaXphdGlvblBhdGg6IHN0cmluZyxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHR0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbjogVGFibGVDb250cm9sQ29uZmlndXJhdGlvblxuKTogVGFibGVQMTNuTW9kZVtdIHwgdW5kZWZpbmVkIHtcblx0Y29uc3QgbWFuaWZlc3RXcmFwcGVyOiBNYW5pZmVzdFdyYXBwZXIgPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpO1xuXHRjb25zdCB0YWJsZU1hbmlmZXN0U2V0dGluZ3M6IFRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdENvbnRyb2xDb25maWd1cmF0aW9uKHZpc3VhbGl6YXRpb25QYXRoKTtcblx0Y29uc3QgdmFyaWFudE1hbmFnZW1lbnQ6IFZhcmlhbnRNYW5hZ2VtZW50VHlwZSA9IG1hbmlmZXN0V3JhcHBlci5nZXRWYXJpYW50TWFuYWdlbWVudCgpO1xuXHRjb25zdCBtb2RlczogVGFibGVQMTNuTW9kZVtdID0gW107XG5cdGNvbnN0IGlzQW5hbHl0aWNhbFRhYmxlID0gdGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24udHlwZSA9PT0gXCJBbmFseXRpY2FsVGFibGVcIjtcblx0Y29uc3QgaXNSZXNwb25zaXZlVGFibGUgPSB0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbi50eXBlID09PSBcIlJlc3BvbnNpdmVUYWJsZVwiO1xuXHRpZiAodGFibGVNYW5pZmVzdFNldHRpbmdzPy50YWJsZVNldHRpbmdzPy5wZXJzb25hbGl6YXRpb24gIT09IHVuZGVmaW5lZCkge1xuXHRcdC8vIFBlcnNvbmFsaXphdGlvbiBjb25maWd1cmVkIGluIG1hbmlmZXN0LlxuXHRcdGNvbnN0IHBlcnNvbmFsaXphdGlvbiA9IHRhYmxlTWFuaWZlc3RTZXR0aW5ncy50YWJsZVNldHRpbmdzLnBlcnNvbmFsaXphdGlvbjtcblx0XHRpZiAocGVyc29uYWxpemF0aW9uID09PSB0cnVlKSB7XG5cdFx0XHQvLyBUYWJsZSBwZXJzb25hbGl6YXRpb24gZnVsbHkgZW5hYmxlZC5cblx0XHRcdHN3aXRjaCAodGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24udHlwZSkge1xuXHRcdFx0XHRjYXNlIFwiQW5hbHl0aWNhbFRhYmxlXCI6XG5cdFx0XHRcdFx0cmV0dXJuIFtcIlNvcnRcIiwgXCJDb2x1bW5cIiwgXCJGaWx0ZXJcIiwgXCJHcm91cFwiLCBcIkFnZ3JlZ2F0ZVwiXTtcblx0XHRcdFx0Y2FzZSBcIlJlc3BvbnNpdmVUYWJsZVwiOlxuXHRcdFx0XHRcdHJldHVybiBbXCJTb3J0XCIsIFwiQ29sdW1uXCIsIFwiRmlsdGVyXCIsIFwiR3JvdXBcIl07XG5cdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0cmV0dXJuIFtcIlNvcnRcIiwgXCJDb2x1bW5cIiwgXCJGaWx0ZXJcIl07XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmICh0eXBlb2YgcGVyc29uYWxpemF0aW9uID09PSBcIm9iamVjdFwiKSB7XG5cdFx0XHQvLyBTcGVjaWZpYyBwZXJzb25hbGl6YXRpb24gb3B0aW9ucyBlbmFibGVkIGluIG1hbmlmZXN0LiBVc2UgdGhlbSBhcyBpcy5cblx0XHRcdGlmIChwZXJzb25hbGl6YXRpb24uc29ydCkge1xuXHRcdFx0XHRtb2Rlcy5wdXNoKFwiU29ydFwiKTtcblx0XHRcdH1cblx0XHRcdGlmIChwZXJzb25hbGl6YXRpb24uY29sdW1uKSB7XG5cdFx0XHRcdG1vZGVzLnB1c2goXCJDb2x1bW5cIik7XG5cdFx0XHR9XG5cdFx0XHRpZiAocGVyc29uYWxpemF0aW9uLmZpbHRlcikge1xuXHRcdFx0XHRtb2Rlcy5wdXNoKFwiRmlsdGVyXCIpO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHBlcnNvbmFsaXphdGlvbi5ncm91cCAmJiAoaXNBbmFseXRpY2FsVGFibGUgfHwgaXNSZXNwb25zaXZlVGFibGUpKSB7XG5cdFx0XHRcdG1vZGVzLnB1c2goXCJHcm91cFwiKTtcblx0XHRcdH1cblx0XHRcdGlmIChwZXJzb25hbGl6YXRpb24uYWdncmVnYXRlICYmIGlzQW5hbHl0aWNhbFRhYmxlKSB7XG5cdFx0XHRcdG1vZGVzLnB1c2goXCJBZ2dyZWdhdGVcIik7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gbW9kZXMubGVuZ3RoID4gMCA/IG1vZGVzIDogdW5kZWZpbmVkO1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHQvLyBObyBwZXJzb25hbGl6YXRpb24gY29uZmlndXJlZCBpbiBtYW5pZmVzdC5cblx0XHRtb2Rlcy5wdXNoKFwiU29ydFwiKTtcblx0XHRtb2Rlcy5wdXNoKFwiQ29sdW1uXCIpO1xuXHRcdGlmIChjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpID09PSBUZW1wbGF0ZVR5cGUuTGlzdFJlcG9ydCkge1xuXHRcdFx0aWYgKHZhcmlhbnRNYW5hZ2VtZW50ID09PSBWYXJpYW50TWFuYWdlbWVudFR5cGUuQ29udHJvbCB8fCBfaXNGaWx0ZXJCYXJIaWRkZW4obWFuaWZlc3RXcmFwcGVyLCBjb252ZXJ0ZXJDb250ZXh0KSkge1xuXHRcdFx0XHQvLyBGZWF0dXJlIHBhcml0eSB3aXRoIFYyLlxuXHRcdFx0XHQvLyBFbmFibGUgdGFibGUgZmlsdGVyaW5nIGJ5IGRlZmF1bHQgb25seSBpbiBjYXNlIG9mIENvbnRyb2wgbGV2ZWwgdmFyaWFudCBtYW5hZ2VtZW50LlxuXHRcdFx0XHQvLyBPciB3aGVuIHRoZSBMUiBmaWx0ZXIgYmFyIGlzIGhpZGRlbiB2aWEgbWFuaWZlc3Qgc2V0dGluZ1xuXHRcdFx0XHRtb2Rlcy5wdXNoKFwiRmlsdGVyXCIpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRtb2Rlcy5wdXNoKFwiRmlsdGVyXCIpO1xuXHRcdH1cblx0XHRpZiAoaXNBbmFseXRpY2FsVGFibGUpIHtcblx0XHRcdG1vZGVzLnB1c2goXCJHcm91cFwiKTtcblx0XHRcdG1vZGVzLnB1c2goXCJBZ2dyZWdhdGVcIik7XG5cdFx0fVxuXHRcdGlmIChpc1Jlc3BvbnNpdmVUYWJsZSkge1xuXHRcdFx0bW9kZXMucHVzaChcIkdyb3VwXCIpO1xuXHRcdH1cblx0XHRyZXR1cm4gbW9kZXM7XG5cdH1cbn1cbi8qKlxuICogUmV0dXJucyBhIEJvb2xlYW4gdmFsdWUgc3VnZ2VzdGluZyBpZiBhIGZpbHRlciBiYXIgaXMgYmVpbmcgdXNlZCBvbiB0aGUgcGFnZS5cbiAqXG4gKiBDaGFydCBoYXMgYSBkZXBlbmRlbmN5IHRvIGZpbHRlciBiYXIgKGlzc3VlIHdpdGggbG9hZGluZyBkYXRhKS4gT25jZSByZXNvbHZlZCwgdGhlIGNoZWNrIGZvciBjaGFydCBzaG91bGQgYmUgcmVtb3ZlZCBoZXJlLlxuICogVW50aWwgdGhlbiwgaGlkaW5nIGZpbHRlciBiYXIgaXMgbm93IGFsbG93ZWQgaWYgYSBjaGFydCBpcyBiZWluZyB1c2VkIG9uIExSLlxuICogQHBhcmFtIG1hbmlmZXN0V3JhcHBlciBNYW5pZmVzdCBzZXR0aW5ncyBnZXR0ZXIgZm9yIHRoZSBwYWdlXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgaW5zdGFuY2Ugb2YgdGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcmV0dXJucyBCb29sZWFuIHN1Z2dlc3RpbmcgaWYgYSBmaWx0ZXIgYmFyIGlzIGJlaW5nIHVzZWQgb24gdGhlIHBhZ2UuXG4gKi9cbmZ1bmN0aW9uIF9pc0ZpbHRlckJhckhpZGRlbihtYW5pZmVzdFdyYXBwZXI6IE1hbmlmZXN0V3JhcHBlciwgY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+KTogYm9vbGVhbiB7XG5cdHJldHVybiAoXG5cdFx0bWFuaWZlc3RXcmFwcGVyLmlzRmlsdGVyQmFySGlkZGVuKCkgJiZcblx0XHQhY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKS5oYXNNdWx0aXBsZVZpc3VhbGl6YXRpb25zKCkgJiZcblx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpICE9PSBUZW1wbGF0ZVR5cGUuQW5hbHl0aWNhbExpc3RQYWdlXG5cdCk7XG59XG4vKipcbiAqIFJldHVybnMgYSBKU09OIHN0cmluZyBjb250YWluaW5nIHRoZSBzb3J0IGNvbmRpdGlvbnMgZm9yIHRoZSBwcmVzZW50YXRpb24gdmFyaWFudC5cbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBpbnN0YW5jZSBvZiB0aGUgY29udmVydGVyIGNvbnRleHRcbiAqIEBwYXJhbSBwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbiBQcmVzZW50YXRpb24gdmFyaWFudCBhbm5vdGF0aW9uXG4gKiBAcGFyYW0gY29sdW1ucyBUYWJsZSBjb2x1bW5zIHByb2Nlc3NlZCBieSB0aGUgY29udmVydGVyXG4gKiBAcmV0dXJucyBTb3J0IGNvbmRpdGlvbnMgZm9yIGEgcHJlc2VudGF0aW9uIHZhcmlhbnQuXG4gKi9cbmZ1bmN0aW9uIGdldFNvcnRDb25kaXRpb25zKFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uOiBQcmVzZW50YXRpb25WYXJpYW50VHlwZSB8IHVuZGVmaW5lZCxcblx0Y29sdW1uczogVGFibGVDb2x1bW5bXVxuKTogVGFibGVTb3J0Q29uZGl0aW9ucyB8IHVuZGVmaW5lZCB7XG5cdC8vIEN1cnJlbnRseSBuYXZpZ2F0aW9uIHByb3BlcnR5IGlzIG5vdCBzdXBwb3J0ZWQgYXMgc29ydGVyXG5cdGNvbnN0IG5vblNvcnRhYmxlUHJvcGVydGllcyA9IGdldFJlc3RyaWN0aW9uc09uUHJvcGVydGllcyhjb252ZXJ0ZXJDb250ZXh0KS5ub25Tb3J0YWJsZVByb3BlcnRpZXM7XG5cdGNvbnN0IHNvcnRDb25kaXRpb25zOiBUYWJsZVNvcnRDb25kaXRpb25zID0ge1xuXHRcdHNvcnRlcnM6IFtdXG5cdH07XG5cdGlmIChwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbj8uU29ydE9yZGVyKSB7XG5cdFx0cHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb24uU29ydE9yZGVyLmZvckVhY2goKGNvbmRpdGlvbikgPT4ge1xuXHRcdFx0Y29uc3QgY29uZGl0aW9uUHJvcGVydHkgPSBjb25kaXRpb24uUHJvcGVydHk7XG5cdFx0XHRpZiAoY29uZGl0aW9uUHJvcGVydHk/LiR0YXJnZXQgIT09IHVuZGVmaW5lZCAmJiAhbm9uU29ydGFibGVQcm9wZXJ0aWVzLmluY2x1ZGVzKGNvbmRpdGlvblByb3BlcnR5LiR0YXJnZXQubmFtZSkpIHtcblx0XHRcdFx0Y29uc3QgaW5mb05hbWUgPSBjb252ZXJ0UHJvcGVydHlQYXRoc1RvSW5mb05hbWVzKFtjb25kaXRpb25Qcm9wZXJ0eV0sIGNvbHVtbnMpWzBdO1xuXHRcdFx0XHRpZiAoaW5mb05hbWUpIHtcblx0XHRcdFx0XHRzb3J0Q29uZGl0aW9ucy5zb3J0ZXJzLnB1c2goe1xuXHRcdFx0XHRcdFx0bmFtZTogaW5mb05hbWUsXG5cdFx0XHRcdFx0XHRkZXNjZW5kaW5nOiAhIWNvbmRpdGlvbi5EZXNjZW5kaW5nXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXHRyZXR1cm4gc29ydENvbmRpdGlvbnMuc29ydGVycy5sZW5ndGggPyBzb3J0Q29uZGl0aW9ucyA6IHVuZGVmaW5lZDtcbn1cbmZ1bmN0aW9uIGdldEluaXRpYWxFeHBhbnNpb25MZXZlbChwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbjogUHJlc2VudGF0aW9uVmFyaWFudFR5cGUgfCB1bmRlZmluZWQpOiBudW1iZXIgfCB1bmRlZmluZWQge1xuXHRpZiAoIXByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uKSB7XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXHRjb25zdCBsZXZlbCA9IHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uLkluaXRpYWxFeHBhbnNpb25MZXZlbD8udmFsdWVPZigpO1xuXHRyZXR1cm4gdHlwZW9mIGxldmVsID09PSBcIm51bWJlclwiID8gbGV2ZWwgKyAxIDogdW5kZWZpbmVkO1xufVxuLyoqXG4gKiBDb252ZXJ0cyBhbiBhcnJheSBvZiBwcm9wZXJ0eVBhdGggdG8gYW4gYXJyYXkgb2YgcHJvcGVydHlJbmZvIG5hbWVzLlxuICogQHBhcmFtIHBhdGhzIFRoZSBhcnJheSB0byBiZSBjb252ZXJ0ZWRcbiAqIEBwYXJhbSBjb2x1bW5zIFRoZSBhcnJheSBvZiBwcm9wZXJ0eUluZm9zXG4gKiBAcmV0dXJucyBBbiBhcnJheSBvZiBwcm9wZXJ0eUluZm8gbmFtZXNcbiAqL1xuZnVuY3Rpb24gY29udmVydFByb3BlcnR5UGF0aHNUb0luZm9OYW1lcyhwYXRoczogUHJvcGVydHlQYXRoW10sIGNvbHVtbnM6IFRhYmxlQ29sdW1uW10pOiBzdHJpbmdbXSB7XG5cdGNvbnN0IGluZm9OYW1lczogc3RyaW5nW10gPSBbXTtcblx0bGV0IHByb3BlcnR5SW5mbzogVGFibGVDb2x1bW4gfCB1bmRlZmluZWQsIGFubm90YXRpb25Db2x1bW46IEFubm90YXRpb25UYWJsZUNvbHVtbjtcblx0cGF0aHMuZm9yRWFjaCgoY3VycmVudFBhdGgpID0+IHtcblx0XHRpZiAoY3VycmVudFBhdGg/LnZhbHVlKSB7XG5cdFx0XHRwcm9wZXJ0eUluZm8gPSBjb2x1bW5zLmZpbmQoKGNvbHVtbikgPT4ge1xuXHRcdFx0XHRhbm5vdGF0aW9uQ29sdW1uID0gY29sdW1uIGFzIEFubm90YXRpb25UYWJsZUNvbHVtbjtcblx0XHRcdFx0cmV0dXJuICFhbm5vdGF0aW9uQ29sdW1uLnByb3BlcnR5SW5mb3MgJiYgYW5ub3RhdGlvbkNvbHVtbi5yZWxhdGl2ZVBhdGggPT09IGN1cnJlbnRQYXRoPy52YWx1ZTtcblx0XHRcdH0pO1xuXHRcdFx0aWYgKHByb3BlcnR5SW5mbykge1xuXHRcdFx0XHRpbmZvTmFtZXMucHVzaChwcm9wZXJ0eUluZm8ubmFtZSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9KTtcblx0cmV0dXJuIGluZm9OYW1lcztcbn1cbi8qKlxuICogUmV0dXJucyBhIEpTT04gc3RyaW5nIGNvbnRhaW5pbmcgUHJlc2VudGF0aW9uIFZhcmlhbnQgZ3JvdXAgY29uZGl0aW9ucy5cbiAqIEBwYXJhbSBwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbiBQcmVzZW50YXRpb24gdmFyaWFudCBhbm5vdGF0aW9uXG4gKiBAcGFyYW0gY29sdW1ucyBDb252ZXJ0ZXIgcHJvY2Vzc2VkIHRhYmxlIGNvbHVtbnNcbiAqIEBwYXJhbSB0YWJsZVR5cGUgVGhlIHRhYmxlIHR5cGUuXG4gKiBAcmV0dXJucyBHcm91cCBjb25kaXRpb25zIGZvciBhIFByZXNlbnRhdGlvbiB2YXJpYW50LlxuICovXG5mdW5jdGlvbiBnZXRHcm91cENvbmRpdGlvbnMoXG5cdHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uOiBQcmVzZW50YXRpb25WYXJpYW50VHlwZSB8IHVuZGVmaW5lZCxcblx0Y29sdW1uczogVGFibGVDb2x1bW5bXSxcblx0dGFibGVUeXBlOiBzdHJpbmdcbik6IFRhYmxlR3JvdXBDb25kaXRpb25zIHwgdW5kZWZpbmVkIHtcblx0Y29uc3QgZ3JvdXBDb25kaXRpb25zOiBUYWJsZUdyb3VwQ29uZGl0aW9ucyA9IHtcblx0XHRncm91cExldmVsczogW11cblx0fTtcblx0aWYgKHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uPy5Hcm91cEJ5KSB7XG5cdFx0bGV0IGFHcm91cEJ5ID0gcHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb24uR3JvdXBCeTtcblx0XHRpZiAodGFibGVUeXBlID09PSBcIlJlc3BvbnNpdmVUYWJsZVwiKSB7XG5cdFx0XHRhR3JvdXBCeSA9IGFHcm91cEJ5LnNsaWNlKDAsIDEpO1xuXHRcdH1cblx0XHRncm91cENvbmRpdGlvbnMuZ3JvdXBMZXZlbHMgPSBjb252ZXJ0UHJvcGVydHlQYXRoc1RvSW5mb05hbWVzKGFHcm91cEJ5LCBjb2x1bW5zKS5tYXAoKGluZm9OYW1lKSA9PiB7XG5cdFx0XHRyZXR1cm4geyBuYW1lOiBpbmZvTmFtZSB9O1xuXHRcdH0pO1xuXHR9XG5cdHJldHVybiBncm91cENvbmRpdGlvbnMuZ3JvdXBMZXZlbHMubGVuZ3RoID8gZ3JvdXBDb25kaXRpb25zIDogdW5kZWZpbmVkO1xufVxuLyoqXG4gKiBVcGRhdGVzIHRoZSBjb2x1bW4ncyBwcm9wZXJ0eUluZm9zIG9mIGFuIGFuYWx5dGljYWwgdGFibGUgaW50ZWdyYXRpbmcgYWxsIGV4dGVuc2lvbnMgYW5kIGJpbmRpbmctcmVsZXZhbnQgcHJvcGVydHkgaW5mbyBwYXJ0LlxuICogQHBhcmFtIHRhYmxlVmlzdWFsaXphdGlvbiBUaGUgdmlzdWFsaXphdGlvbiB0byBiZSB1cGRhdGVkXG4gKi9cbmZ1bmN0aW9uIF91cGRhdGVQcm9wZXJ0eUluZm9zV2l0aEFnZ3JlZ2F0ZXNEZWZpbml0aW9ucyh0YWJsZVZpc3VhbGl6YXRpb246IFRhYmxlVmlzdWFsaXphdGlvbik6IHZvaWQge1xuXHRjb25zdCByZWxhdGVkQWRkaXRpb25hbFByb3BlcnR5TmFtZU1hcDogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuXHR0YWJsZVZpc3VhbGl6YXRpb24uY29sdW1ucy5mb3JFYWNoKChjb2x1bW4pID0+IHtcblx0XHRjb2x1bW4gPSBjb2x1bW4gYXMgQW5ub3RhdGlvblRhYmxlQ29sdW1uO1xuXHRcdGNvbnN0IHByb3BlcnR5TmFtZUZyb21BbmFseXRpY3NJbmZvID0gX2dldFByb3BlcnR5TmFtZUZyb21BbmFseXRpY3NJbmZvKHRhYmxlVmlzdWFsaXphdGlvbiwgY29sdW1uLm5hbWUpO1xuXHRcdGlmIChwcm9wZXJ0eU5hbWVGcm9tQW5hbHl0aWNzSW5mbykge1xuXHRcdFx0Y29uc3QgYWdncmVnYXRhYmxlUHJvcGVydHlEZWZpbml0aW9uID0gdGFibGVWaXN1YWxpemF0aW9uLmFuYWx5dGljc0V4dGVuc2lvbnMhW3Byb3BlcnR5TmFtZUZyb21BbmFseXRpY3NJbmZvXTtcblx0XHRcdGNvbHVtbi5hZ2dyZWdhdGFibGUgPSAhYWdncmVnYXRhYmxlUHJvcGVydHlEZWZpbml0aW9uLmZyb21Hcm91cGFibGVQcm9wZXJ0eTtcblx0XHRcdGNvbHVtbi5leHRlbnNpb24gPSBhZ2dyZWdhdGFibGVQcm9wZXJ0eURlZmluaXRpb24gPz8ge307XG5cdFx0XHRpZiAoIWNvbHVtbi5pc0dyb3VwYWJsZSAmJiAhY29sdW1uLmFnZ3JlZ2F0YWJsZSkge1xuXHRcdFx0XHQvLyBUaGUgY29sdW1uIGlzIG5laXRoZXIgYWdncmVnYXRhYmxlIG5vciBncm91cGFibGUgLS0+IGl0J3MgYSBoaWRkZW4gY29sdW1uIHRvIGFsbG93IGZpbHRlcmluZyBpbiBQMTNOXG5cdFx0XHRcdC8vIFdlIG5lZWQgdG8gcmVtb3ZlIGFkZGl0aW9uYWxQcm9wZXJ0aWVzLCBhcyBpdCdzIG5vdCBuZWVkZWQgYW5kIGNhdXNlcyBhbiBlcnJvciBpbiB0aGUgTURDIHRhYmxlIGNvZGVcblx0XHRcdFx0ZGVsZXRlIGNvbHVtbi5leHRlbnNpb24uYWRkaXRpb25hbFByb3BlcnRpZXM7XG5cdFx0XHR9XG5cdFx0XHRpZiAoY29sdW1uLmlzR3JvdXBhYmxlICYmIGNvbHVtbi5leHRlbnNpb24uYWRkaXRpb25hbFByb3BlcnRpZXMgJiYgY29sdW1uLmV4dGVuc2lvbi5hZGRpdGlvbmFsUHJvcGVydGllcy5sZW5ndGgpIHtcblx0XHRcdFx0Ly8gRm9yIHRoZSB0aW1lIGJlaW5nLCBwcm9wZXJ0aWVzIHdpdGggY29udGV4dC1kZWZpbmluZyBwcm9wZXJ0aWVzIHNoYWxsIG5vdCBiZSBhbGxvd2VkIGZvciB2aXN1YWwgZ3JvdXBpbmdcblx0XHRcdFx0Ly8gV2UgbmVlZCBhIFVYIGNvbmNlcHQgdG8gc3VwcG9ydCB0aGlzIChhcyB0aGUgZW5kIHVzZXIgd291bGQgbmVlZCB0byBncm91cCBvbiB0aGUgY29udGV4dC1kZWZpbmluZyBwcm9wZXJ0aWVzIGJlZm9yZSBncm91cGluZ1xuXHRcdFx0XHQvLyBvbiB0aGUgcHJvcGVydHkgaXRzZWxmKS5cblx0XHRcdFx0Y29sdW1uLmlzR3JvdXBhYmxlID0gZmFsc2U7XG5cdFx0XHRcdGNvbHVtbi5leHRlbnNpb24udGVjaG5pY2FsbHlHcm91cGFibGUgPSB0cnVlO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRpZiAoY29sdW1uLmFkZGl0aW9uYWxQcm9wZXJ0eUluZm9zPy5sZW5ndGgpIHtcblx0XHRcdGNvbHVtbi5hZGRpdGlvbmFsUHJvcGVydHlJbmZvcy5mb3JFYWNoKChhZGRpdGlvbmFsUHJvcGVydHlJbmZvKSA9PiB7XG5cdFx0XHRcdC8vIENyZWF0ZSBwcm9wZXJ0eUluZm8gZm9yIGVhY2ggYWRkaXRpb25hbCBwcm9wZXJ0eS5cblx0XHRcdFx0Ly8gVGhlIG5ldyBwcm9wZXJ0eSAnbmFtZScgaGFzIGJlZW4gcHJlZml4ZWQgd2l0aCAnUHJvcGVydHlfVGVjaG5pY2FsOjonIGZvciB1bmlxdWVuZXNzIGFuZCBpdCBoYXMgYmVlbiBuYW1lZCB0ZWNobmljYWwgcHJvcGVydHkgYXMgaXQgcmVxdWlyZXMgZGVkaWNhdGVkIE1EQyBhdHRyaWJ1dGVzICh0ZWNobmljYWxseUdyb3VwYWJsZSBhbmQgdGVjaG5pY2FsbHlBZ2dyZWdhdGFibGUpLlxuXHRcdFx0XHRjcmVhdGVUZWNobmljYWxQcm9wZXJ0eShhZGRpdGlvbmFsUHJvcGVydHlJbmZvLCB0YWJsZVZpc3VhbGl6YXRpb24uY29sdW1ucywgcmVsYXRlZEFkZGl0aW9uYWxQcm9wZXJ0eU5hbWVNYXApO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdF91cGRhdGVGb3JUZXh0T25seVByb3BlcnRpZXNXaXRoQ0RQKHRhYmxlVmlzdWFsaXphdGlvbiwgY29sdW1uKTtcblx0fSk7XG5cdHRhYmxlVmlzdWFsaXphdGlvbi5jb2x1bW5zLmZvckVhY2goKGNvbHVtbikgPT4ge1xuXHRcdGNvbHVtbiA9IGNvbHVtbiBhcyBBbm5vdGF0aW9uVGFibGVDb2x1bW47XG5cdFx0aWYgKGNvbHVtbi5hZGRpdGlvbmFsUHJvcGVydHlJbmZvcykge1xuXHRcdFx0Y29sdW1uLmFkZGl0aW9uYWxQcm9wZXJ0eUluZm9zID0gY29sdW1uLmFkZGl0aW9uYWxQcm9wZXJ0eUluZm9zLm1hcChcblx0XHRcdFx0KHByb3BlcnR5SW5mbykgPT4gcmVsYXRlZEFkZGl0aW9uYWxQcm9wZXJ0eU5hbWVNYXBbcHJvcGVydHlJbmZvXSA/PyBwcm9wZXJ0eUluZm9cblx0XHRcdCk7XG5cdFx0XHQvLyBBZGQgYWRkaXRpb25hbCBwcm9wZXJ0aWVzIHRvIHRoZSBjb21wbGV4IHByb3BlcnR5IHVzaW5nIHRoZSBoaWRkZW4gYW5ub3RhdGlvbi5cblx0XHRcdGNvbHVtbi5wcm9wZXJ0eUluZm9zID0gY29sdW1uLnByb3BlcnR5SW5mb3M/LmNvbmNhdChjb2x1bW4uYWRkaXRpb25hbFByb3BlcnR5SW5mb3MpO1xuXHRcdH1cblx0fSk7XG59XG5cbi8qKlxuICogUHJvdmlkZXMgdGhlIHJlZmVyZW5jZWQgcHJvcGVydHkgbmFtZSBmcm9tIHRoZSBhbmFseXRpY3MgZGF0YVxuICogQHBhcmFtIHRhYmxlVmlzdWFsaXphdGlvbiBUaGUgdmlzdWFsaXphdGlvbiB0byBiZSBhbmFseXplZFxuICogQHBhcmFtIG5hbWUgVGhlIHByb3BlcnR5IG5hbWVcbiAqIEByZXR1cm5zIFRoZSBwcm9wZXJ0eSBuYW1lIGZyb20gdGhlIGFuYWx5dGljcyBkYXRhXG4gKi9cblxuZnVuY3Rpb24gX2dldFByb3BlcnR5TmFtZUZyb21BbmFseXRpY3NJbmZvKHRhYmxlVmlzdWFsaXphdGlvbjogVGFibGVWaXN1YWxpemF0aW9uLCBuYW1lOiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRyZXR1cm4gT2JqZWN0LmtleXModGFibGVWaXN1YWxpemF0aW9uLmFuYWx5dGljc0V4dGVuc2lvbnMhKS5maW5kKChhZ2dyZWdhdGUpID0+IGFnZ3JlZ2F0ZSA9PT0gbmFtZSk7XG59XG5cbi8qKlxuICogVXBkYXRlcyB0aGUgY29sdW1uJ3MgcHJvcGVydHlJbmZvcyBvZiBhIGNvbHVtbiBhbm5vdGF0ZWQgd2l0aCB0ZXh0IG9ubHkgb24gYW4gYW5hbHl0aWNhbCB0YWJsZS5cbiAqIFRoZSByZWZlcmVuY2VkIHRleHQgcHJvcGVydHkgY291bGQgZGVmaW5lIGNvbnRleHQtZGVmaW5pbmcgcHJvcGVydGllcyB0byBiZSBpbmNsdWRlZCBpbnRvIHRoZSBjb2x1bW4ncyBwcm9wZXJ0eUluZm9zLlxuICogQHBhcmFtIHRhYmxlVmlzdWFsaXphdGlvbiBUaGUgdmlzdWFsaXphdGlvbiB0byBiZSBhbmFseXplZFxuICogQHBhcmFtIGNvbHVtbiBUaGUgY29sdW1uIGNvbnRhaW5pbmcgdGhlIFwidGV4dEFycmFuZ2VtZW50XCIgb2JqZWN0IHdoZW4gcHJlc2VudFxuICovXG5mdW5jdGlvbiBfdXBkYXRlRm9yVGV4dE9ubHlQcm9wZXJ0aWVzV2l0aENEUCh0YWJsZVZpc3VhbGl6YXRpb246IFRhYmxlVmlzdWFsaXphdGlvbiwgY29sdW1uOiBBbm5vdGF0aW9uVGFibGVDb2x1bW4pOiB2b2lkIHtcblx0Ly8gQ3VycmVudGx5IGEgY29sdW1uIHJlZmVyZW5jaW5nIGEgdGV4dCBvbmx5IHByb3BlcnR5IG9ubHkgY29udGFpbnMgdGhlIHRleHQgcHJvcGVydHkgaW50byBpdHMgcHJvcGVydHlJbmZvcy5cblx0Ly8gUHJvcGVydGllcyByZWZlcmVuY2luZyBjb250ZXh0LWRlZmluaW5nIHByb3BlcnRpZXMgKENEUCkgYXJlbid0IGFsbG93ZWQgZm9yIGdyb3VwaW5nLiBUaGlzIG5lZWQgdG8gY2hhbmdlIGZvciB0ZXh0IG9ubHkgY29sdW1ucywgYXMgaW4gY29tbW9uIGNhc2VzLCB0ZXh0IHByb3BlcnRpZXMgcmVmZXJlbmNlIHRoZWlyIHZhbHVlIHByb3BlcnRpZXMgaW50byB0aGVpciBDRFBzLlxuXHQvLyBTbywgd2Ugbm93IGluY2x1ZGUgdGhlIHZhbHVlIHByb3BlcnR5IGludG8gdGhlIHByb3BlcnR5SW5mb3Mgb2YgdGhlIGNvbHVtbiB0byBhbGxvdyB0aGUgZ3JvdXBpbmcgb24gdGhlIHByb3BlcnR5IHZhbHVlLlxuXHRpZiAoY29sdW1uLnRleHRBcnJhbmdlbWVudD8ubW9kZSA9PT0gXCJEZXNjcmlwdGlvblwiICYmIGNvbHVtbi50ZXh0QXJyYW5nZW1lbnQudGV4dFByb3BlcnR5KSB7XG5cdFx0Y29uc3QgYW5hbHl0aWNzSW5mb1Byb3BlcnR5TmFtZUZvckRlc2MgPSBfZ2V0UHJvcGVydHlOYW1lRnJvbUFuYWx5dGljc0luZm8odGFibGVWaXN1YWxpemF0aW9uLCBjb2x1bW4udGV4dEFycmFuZ2VtZW50LnRleHRQcm9wZXJ0eSk7XG5cdFx0aWYgKGFuYWx5dGljc0luZm9Qcm9wZXJ0eU5hbWVGb3JEZXNjKSB7XG5cdFx0XHRjb25zdCBhZ2dyZWdhdGFibGVQcm9wZXJ0eURlZmluaXRpb24gPSB0YWJsZVZpc3VhbGl6YXRpb24uYW5hbHl0aWNzRXh0ZW5zaW9ucyFbYW5hbHl0aWNzSW5mb1Byb3BlcnR5TmFtZUZvckRlc2NdO1xuXHRcdFx0Ly8gV2UgbmVlZCB0byBtYWtlIHN1cmUgdGhlIHRleHQgcHJvcGVydHkgaGFzIENEUCBwcm9wZXJ0aWVzIGRlZmluZWQgYW5kIHRoZSB2YWx1ZSBwcm9wZXJ0eSBpcyBwYXJ0IG9mIHRoZXNlIHByb3BlcnRpZXMuXG5cdFx0XHRpZiAoXG5cdFx0XHRcdGFnZ3JlZ2F0YWJsZVByb3BlcnR5RGVmaW5pdGlvbi5hZGRpdGlvbmFsUHJvcGVydGllcz8ubGVuZ3RoICYmXG5cdFx0XHRcdGFnZ3JlZ2F0YWJsZVByb3BlcnR5RGVmaW5pdGlvbi5hZGRpdGlvbmFsUHJvcGVydGllcy5pbmNsdWRlcyhjb2x1bW4ubmFtZSlcblx0XHRcdCkge1xuXHRcdFx0XHQvLyBUaGUgcHJvcGVydHkgdmFsdWUgKHNpbmdsZSBwcm9wZXJ0eSkgZXhpc3RzIGFscmVhZHkgb24gdGhlIGxpc3Qgb2YgY29sdW1ucyBmcm9tIHRoZSB0YWJsZSBidXQgaXQgd2FzIG9ubHkgY3JlYXRlZCBmb3IgZmlsdGVyaW5nIHB1cnBvc2VzIGluIFAxM24gYW5kIG5vdCBsaW5rZWQgdG8gdGhlIGNvbHVtbiB3aXRoIHRoZSB0ZXh0IGFycmFuZ2VtZW50ICNUZXh0T25seSxcblx0XHRcdFx0Ly8gdGhlcmVmb3JlIG5vdCBwcm9wb3NlZCBhcyBhIGRlZmF1bHQgdmFsdWUgZm9yIGdyb3VwaW5nIHRoZSBjb2x1bW4gbWVudS4gTm93IGl0J2xsIGJlIGluY2x1ZGVkIGludG8gdGhlIHByb3BlcnR5SW5mb3Mgb2YgdGhlIGNvbHVtbiB0byBhbGxvdyB0aGUgZGVmYXVsdCBncm91cGluZyBvbiB0aGlzIHZhbHVlIHByb3BlcnR5LlxuXHRcdFx0XHRjb25zdCBjb2x1bW5XaXRoVGV4dE9ubHkgPSAodGFibGVWaXN1YWxpemF0aW9uLmNvbHVtbnMgYXMgQW5ub3RhdGlvblRhYmxlQ29sdW1uW10pLmZpbmQoXG5cdFx0XHRcdFx0KHRleHRPbmx5Q29sdW1uKSA9PiB0ZXh0T25seUNvbHVtbi5yZWxhdGl2ZVBhdGggPT09IGNvbHVtbi5yZWxhdGl2ZVBhdGggJiYgdGV4dE9ubHlDb2x1bW4ucHJvcGVydHlJbmZvc1xuXHRcdFx0XHQpO1xuXHRcdFx0XHRjb2x1bW5XaXRoVGV4dE9ubHk/LnByb3BlcnR5SW5mb3M/LnB1c2goY29sdW1uLm5hbWUpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufVxuXG4vKipcbiAqIFJldHVybnMgYSBKU09OIHN0cmluZyBjb250YWluaW5nIFByZXNlbnRhdGlvbiBWYXJpYW50IGFnZ3JlZ2F0ZSBjb25kaXRpb25zLlxuICogQHBhcmFtIHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uIFByZXNlbnRhdGlvbiB2YXJpYW50IGFubm90YXRpb25cbiAqIEBwYXJhbSBjb2x1bW5zIENvbnZlcnRlciBwcm9jZXNzZWQgdGFibGUgY29sdW1uc1xuICogQHBhcmFtIGV4dGVuc2lvbkluZm9NYXBcbiAqIEByZXR1cm5zIEdyb3VwIGNvbmRpdGlvbnMgZm9yIGEgUHJlc2VudGF0aW9uIHZhcmlhbnQuXG4gKi9cbmZ1bmN0aW9uIGdldEFnZ3JlZ2F0ZUNvbmRpdGlvbnMoXG5cdHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uOiBQcmVzZW50YXRpb25WYXJpYW50VHlwZSB8IHVuZGVmaW5lZCxcblx0Y29sdW1uczogVGFibGVDb2x1bW5bXSxcblx0ZXh0ZW5zaW9uSW5mb01hcDogUmVjb3JkPHN0cmluZywgSW50ZXJuYWxFeHRlbnNpb25Gb3JBbmFseXRpY3M+XG4pOiBUYWJsZUFnZ3JlZ2F0ZUNvbmRpdGlvbnMgfCB1bmRlZmluZWQge1xuXHRjb25zdCBhZ2dyZWdhdGVDb25kaXRpb25zOiBUYWJsZUFnZ3JlZ2F0ZUNvbmRpdGlvbnMgPSB7fTtcblx0aWYgKHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uPy5Ub3RhbCkge1xuXHRcdGNvbnN0IGFUb3RhbHMgPSBwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbi5Ub3RhbDtcblx0XHRjb252ZXJ0UHJvcGVydHlQYXRoc1RvSW5mb05hbWVzKGFUb3RhbHMsIGNvbHVtbnMpLmZvckVhY2goKGluZm9OYW1lKSA9PiB7XG5cdFx0XHRhZ2dyZWdhdGVDb25kaXRpb25zW2luZm9OYW1lXSA9IHt9O1xuXHRcdH0pO1xuXHR9IGVsc2Uge1xuXHRcdGZvciAoY29uc3Qga2V5IGluIGV4dGVuc2lvbkluZm9NYXApIHtcblx0XHRcdGlmICghZXh0ZW5zaW9uSW5mb01hcFtrZXldLmZyb21Hcm91cGFibGVQcm9wZXJ0eSkge1xuXHRcdFx0XHRhZ2dyZWdhdGVDb25kaXRpb25zW2tleV0gPSB7fTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblx0cmV0dXJuIE9iamVjdC5rZXlzKGFnZ3JlZ2F0ZUNvbmRpdGlvbnMpLmxlbmd0aCA/IGFnZ3JlZ2F0ZUNvbmRpdGlvbnMgOiB1bmRlZmluZWQ7XG59XG5leHBvcnQgdHlwZSBTdGFuZGFyZEFjdGlvbnNDb25maWd1cmF0aW9uID0ge1xuXHRjcmVhdGlvbkJlaGF2aW91cjogVGFibGVBbm5vdGF0aW9uQ29uZmlndXJhdGlvbltcImNyZWF0ZVwiXTtcblx0Y3V0QnV0dG9uVmlzaWJpbGl0eUV4cHJlc3Npb246IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPjtcblx0ZGVsZXRlQnV0dG9uVmlzaWJpbGl0eUV4cHJlc3Npb246IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPjtcblx0bWFzc0VkaXRCdXR0b25WaXNpYmlsaXR5RXhwcmVzc2lvbjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+O1xuXHRpc0luc2VydFVwZGF0ZUFjdGlvbnNUZW1wbGF0ZWQ6IGJvb2xlYW47XG5cdHN0YW5kYXJkQWN0aW9uczoge1xuXHRcdGNyZWF0ZTogU3RhbmRhcmRBY3Rpb247XG5cdFx0ZGVsZXRlOiBTdGFuZGFyZEFjdGlvbjtcblx0XHRwYXN0ZTogU3RhbmRhcmRBY3Rpb247XG5cdFx0bWFzc0VkaXQ6IFN0YW5kYXJkQWN0aW9uO1xuXHRcdGluc2lnaHRzOiBTdGFuZGFyZEFjdGlvbjtcblx0XHRjcmVhdGlvblJvdzogU3RhbmRhcmRBY3Rpb247XG5cdFx0Y3V0OiBTdGFuZGFyZEFjdGlvbjtcblx0XHRjb3B5OiBTdGFuZGFyZEFjdGlvbjtcblx0XHRtb3ZlVXA/OiBTdGFuZGFyZEFjdGlvbjtcblx0XHRtb3ZlRG93bj86IFN0YW5kYXJkQWN0aW9uO1xuXHR9O1xufTtcbi8qKlxuICogQ2FsY3VsYXRlcyB0aGUgc3RhbmRhcmQgYWN0aW9ucyBhbmQgYWRqYWNlbnQgcHJvcGVydGllcyB0aGF0IGFyZSBuZWVkZWQgaW4gdGhlIGZ1cnRoZXIgY29udmVyc2lvbiBwcm9jZXNzLlxuICogQHBhcmFtIGxpbmVJdGVtQW5ub3RhdGlvbiBDb2xsZWN0aW9uIG9mIGRhdGEgZmllbGRzIHVzZWQgZm9yIHJlcHJlc2VudGF0aW9uIGluIGEgdGFibGUgb3IgbGlzdFxuICogQHBhcmFtIHZpc3VhbGl6YXRpb25QYXRoIFRoZSB2aXN1YWxpemF0aW9uIHBhdGhcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBpbnN0YW5jZSBvZiB0aGUgY29udmVydGVyIGNvbnRleHRcbiAqIEBwYXJhbSB0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbiBUaGUgdGFibGUgbWFuaWZlc3QgY29uZmlndXJhdGlvblxuICogQHBhcmFtIG5hdmlnYXRpb25TZXR0aW5ncyBUaGUgbmF2aWdhdGlvbiB0YXJnZXQgbWFuaWZlc3QgY29uZmlndXJhdGlvblxuICogQHJldHVybnMgU3RhbmRhcmQgYWN0aW9ucyBhbmQgY29ubmVjdGVkIHByb3BlcnRpZXNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFN0YW5kYXJkQWN0aW9uc0NvbmZpZ3VyYXRpb24oXG5cdGxpbmVJdGVtQW5ub3RhdGlvbjogTGluZUl0ZW0gfCB1bmRlZmluZWQsXG5cdHZpc3VhbGl6YXRpb25QYXRoOiBzdHJpbmcsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0dGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb246IFRhYmxlQ29udHJvbENvbmZpZ3VyYXRpb24sXG5cdG5hdmlnYXRpb25TZXR0aW5nczogTmF2aWdhdGlvblNldHRpbmdzQ29uZmlndXJhdGlvblxuKTogU3RhbmRhcmRBY3Rpb25zQ29uZmlndXJhdGlvbiB7XG5cdGNvbnN0IGNyZWF0aW9uQmVoYXZpb3VyID0gX2dldENyZWF0aW9uQmVoYXZpb3VyKFxuXHRcdGxpbmVJdGVtQW5ub3RhdGlvbixcblx0XHR0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbixcblx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdG5hdmlnYXRpb25TZXR0aW5ncyxcblx0XHR2aXN1YWxpemF0aW9uUGF0aFxuXHQpO1xuXHRjb25zdCBzdGFuZGFyZEFjdGlvbnNDb250ZXh0ID0gZ2VuZXJhdGVTdGFuZGFyZEFjdGlvbnNDb250ZXh0KFxuXHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0Y3JlYXRpb25CZWhhdmlvdXIubW9kZSBhcyBDcmVhdGlvbk1vZGUsXG5cdFx0dGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb25cblx0KTtcblx0Y29uc3QgY3V0QnV0dG9uVmlzaWJpbGl0eUV4cHJlc3Npb24gPSBnZXRDdXRWaXNpYmlsaXR5KGNvbnZlcnRlckNvbnRleHQsIHN0YW5kYXJkQWN0aW9uc0NvbnRleHQpO1xuXHRjb25zdCBkZWxldGVCdXR0b25WaXNpYmlsaXR5RXhwcmVzc2lvbiA9IGdldERlbGV0ZVZpc2liaWxpdHkoY29udmVydGVyQ29udGV4dCwgc3RhbmRhcmRBY3Rpb25zQ29udGV4dCk7XG5cdGNvbnN0IG1hc3NFZGl0QnV0dG9uVmlzaWJpbGl0eUV4cHJlc3Npb24gPSBnZXRNYXNzRWRpdFZpc2liaWxpdHkoY29udmVydGVyQ29udGV4dCwgc3RhbmRhcmRBY3Rpb25zQ29udGV4dCk7XG5cdGNvbnN0IGlzSW5zZXJ0VXBkYXRlQWN0aW9uc1RlbXBsYXRlZCA9IGdldEluc2VydFVwZGF0ZUFjdGlvbnNUZW1wbGF0aW5nKFxuXHRcdHN0YW5kYXJkQWN0aW9uc0NvbnRleHQsXG5cdFx0aXNEcmFmdE9yU3RpY2t5U3VwcG9ydGVkKGNvbnZlcnRlckNvbnRleHQpXG5cdCk7XG5cdGNvbnN0IHN0YW5kYXJkQWN0aW9ucyA9IHtcblx0XHRjdXQ6IGdldFN0YW5kYXJkQWN0aW9uQ3V0KGNvbnZlcnRlckNvbnRleHQsIHN0YW5kYXJkQWN0aW9uc0NvbnRleHQpLFxuXHRcdGNvcHk6IGdldFN0YW5kYXJkQWN0aW9uQ29weShjb252ZXJ0ZXJDb250ZXh0LCBzdGFuZGFyZEFjdGlvbnNDb250ZXh0KSxcblx0XHRjcmVhdGU6IGdldFN0YW5kYXJkQWN0aW9uQ3JlYXRlKGNvbnZlcnRlckNvbnRleHQsIHN0YW5kYXJkQWN0aW9uc0NvbnRleHQpLFxuXHRcdGRlbGV0ZTogZ2V0U3RhbmRhcmRBY3Rpb25EZWxldGUoY29udmVydGVyQ29udGV4dCwgc3RhbmRhcmRBY3Rpb25zQ29udGV4dCksXG5cdFx0cGFzdGU6IGdldFN0YW5kYXJkQWN0aW9uUGFzdGUoY29udmVydGVyQ29udGV4dCwgc3RhbmRhcmRBY3Rpb25zQ29udGV4dCwgaXNJbnNlcnRVcGRhdGVBY3Rpb25zVGVtcGxhdGVkKSxcblx0XHRtYXNzRWRpdDogZ2V0U3RhbmRhcmRBY3Rpb25NYXNzRWRpdChjb252ZXJ0ZXJDb250ZXh0LCBzdGFuZGFyZEFjdGlvbnNDb250ZXh0KSxcblx0XHRpbnNpZ2h0czogZ2V0U3RhbmRhcmRBY3Rpb25JbnNpZ2h0cyhjb252ZXJ0ZXJDb250ZXh0LCBzdGFuZGFyZEFjdGlvbnNDb250ZXh0LCB2aXN1YWxpemF0aW9uUGF0aCksXG5cdFx0Y3JlYXRpb25Sb3c6IGdldENyZWF0aW9uUm93KGNvbnZlcnRlckNvbnRleHQsIHN0YW5kYXJkQWN0aW9uc0NvbnRleHQpXG5cdH07XG5cdGNvbnN0IGNvbmZpZ3VyYXRpb246IFN0YW5kYXJkQWN0aW9uc0NvbmZpZ3VyYXRpb24gPSB7XG5cdFx0Y3JlYXRpb25CZWhhdmlvdXIsXG5cdFx0Y3V0QnV0dG9uVmlzaWJpbGl0eUV4cHJlc3Npb24sXG5cdFx0ZGVsZXRlQnV0dG9uVmlzaWJpbGl0eUV4cHJlc3Npb24sXG5cdFx0bWFzc0VkaXRCdXR0b25WaXNpYmlsaXR5RXhwcmVzc2lvbixcblx0XHRpc0luc2VydFVwZGF0ZUFjdGlvbnNUZW1wbGF0ZWQsXG5cdFx0c3RhbmRhcmRBY3Rpb25zXG5cdH07XG5cblx0aWYgKHN0YW5kYXJkQWN0aW9uc0NvbnRleHQudGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24udHlwZSA9PT0gXCJUcmVlVGFibGVcIikge1xuXHRcdGNvbmZpZ3VyYXRpb24uc3RhbmRhcmRBY3Rpb25zLm1vdmVVcCA9IGdldFN0YW5kYXJkQWN0aW9uTW92ZVVwRG93bihjb252ZXJ0ZXJDb250ZXh0LCBzdGFuZGFyZEFjdGlvbnNDb250ZXh0LCB0cnVlKTtcblx0XHRjb25maWd1cmF0aW9uLnN0YW5kYXJkQWN0aW9ucy5tb3ZlRG93biA9IGdldFN0YW5kYXJkQWN0aW9uTW92ZVVwRG93bihjb252ZXJ0ZXJDb250ZXh0LCBzdGFuZGFyZEFjdGlvbnNDb250ZXh0LCBmYWxzZSk7XG5cdH1cblxuXHRyZXR1cm4gY29uZmlndXJhdGlvbjtcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXRUYWJsZUFubm90YXRpb25Db25maWd1cmF0aW9uKFxuXHRsaW5lSXRlbUFubm90YXRpb246IExpbmVJdGVtIHwgdW5kZWZpbmVkLFxuXHR2aXN1YWxpemF0aW9uUGF0aDogc3RyaW5nLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdHRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uOiBUYWJsZUNvbnRyb2xDb25maWd1cmF0aW9uLFxuXHRjb2x1bW5zOiBUYWJsZUNvbHVtbltdLFxuXHRuYXZpZ2F0aW9uU2V0dGluZ3M6IE5hdmlnYXRpb25TZXR0aW5nc0NvbmZpZ3VyYXRpb24sXG5cdHN0YW5kYXJkQWN0aW9uc0NvbmZpZ3VyYXRpb246IFN0YW5kYXJkQWN0aW9uc0NvbmZpZ3VyYXRpb24sXG5cdHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uPzogUHJlc2VudGF0aW9uVmFyaWFudFR5cGVcbik6IFRhYmxlQW5ub3RhdGlvbkNvbmZpZ3VyYXRpb24ge1xuXHQvLyBOZWVkIHRvIGdldCB0aGUgdGFyZ2V0XG5cdGNvbnN0IHRhYmxlTWFuaWZlc3RTZXR0aW5nczogVGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24gPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0Q29udHJvbENvbmZpZ3VyYXRpb24odmlzdWFsaXphdGlvblBhdGgpO1xuXHRjb25zdCB7IG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGggfSA9IHNwbGl0UGF0aCh2aXN1YWxpemF0aW9uUGF0aCk7XG5cdGNvbnN0IHR5cGVOYW1lUGx1cmFsID0gY29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCkudGFyZ2V0RW50aXR5VHlwZS5hbm5vdGF0aW9ucz8uVUk/LkhlYWRlckluZm8/LlR5cGVOYW1lUGx1cmFsO1xuXHRjb25zdCB0aXRsZSA9IHR5cGVOYW1lUGx1cmFsICYmIGNvbXBpbGVFeHByZXNzaW9uKGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbih0eXBlTmFtZVBsdXJhbCkpO1xuXHRjb25zdCBlbnRpdHlTZXQgPSBjb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKS50YXJnZXRFbnRpdHlTZXQ7XG5cdGNvbnN0IHBhZ2VNYW5pZmVzdFNldHRpbmdzOiBNYW5pZmVzdFdyYXBwZXIgPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpO1xuXHRjb25zdCBoYXNBYnNvbHV0ZVBhdGggPSBuYXZpZ2F0aW9uUHJvcGVydHlQYXRoLmxlbmd0aCA9PT0gMDtcblx0Y29uc3QgcDEzbk1vZGUgPSBnZXRQMTNuTW9kZSh2aXN1YWxpemF0aW9uUGF0aCwgY29udmVydGVyQ29udGV4dCwgdGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24pO1xuXHRjb25zdCBpZCA9IG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGggPyBnZXRUYWJsZUlEKHZpc3VhbGl6YXRpb25QYXRoKSA6IGdldFRhYmxlSUQoY29udmVydGVyQ29udGV4dC5nZXRDb250ZXh0UGF0aCgpLCBcIkxpbmVJdGVtXCIpO1xuXHRjb25zdCB0YXJnZXRDYXBhYmlsaXRpZXMgPSBnZXRDYXBhYmlsaXR5UmVzdHJpY3Rpb24oY29udmVydGVyQ29udGV4dCk7XG5cdGNvbnN0IG5hdmlnYXRpb25UYXJnZXRQYXRoID0gZ2V0TmF2aWdhdGlvblRhcmdldFBhdGgoY29udmVydGVyQ29udGV4dCwgbmF2aWdhdGlvblByb3BlcnR5UGF0aCk7XG5cdGNvbnN0IHNlbGVjdGlvbk1vZGUgPSBnZXRTZWxlY3Rpb25Nb2RlKFxuXHRcdGxpbmVJdGVtQW5ub3RhdGlvbixcblx0XHR2aXN1YWxpemF0aW9uUGF0aCxcblx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdGhhc0Fic29sdXRlUGF0aCxcblx0XHR0YXJnZXRDYXBhYmlsaXRpZXMsXG5cdFx0c3RhbmRhcmRBY3Rpb25zQ29uZmlndXJhdGlvbi5kZWxldGVCdXR0b25WaXNpYmlsaXR5RXhwcmVzc2lvbixcblx0XHRzdGFuZGFyZEFjdGlvbnNDb25maWd1cmF0aW9uLm1hc3NFZGl0QnV0dG9uVmlzaWJpbGl0eUV4cHJlc3Npb24sXG5cdFx0c3RhbmRhcmRBY3Rpb25zQ29uZmlndXJhdGlvbi5jdXRCdXR0b25WaXNpYmlsaXR5RXhwcmVzc2lvblxuXHQpO1xuXHRsZXQgdGhyZXNob2xkID0gbmF2aWdhdGlvblByb3BlcnR5UGF0aCA/IDEwIDogMzA7XG5cdGlmIChwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbj8uTWF4SXRlbXMpIHtcblx0XHR0aHJlc2hvbGQgPSBwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbi5NYXhJdGVtcy52YWx1ZU9mKCk7XG5cdH0gZWxzZSBpZiAodGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24udHlwZSA9PT0gXCJUcmVlVGFibGVcIikge1xuXHRcdC8vIFRvIG1ha2Ugc2Nyb2xsaW5nIHNtb290aCwgd2Ugc2V0IHRoZSB0aHJlc2hvbGQgdmFsdWUgaGlnaGVyIGZvciB0cmVlIHRhYmxlc1xuXHRcdHRocmVzaG9sZCA9IDIwMDtcblx0fSBlbHNlIGlmICh0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbi50eXBlID09PSBcIkdyaWRUYWJsZVwiIHx8IHRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uLnR5cGUgPT09IFwiQW5hbHl0aWNhbFRhYmxlXCIpIHtcblx0XHR0aHJlc2hvbGQgPSAxMDA7XG5cdH1cblx0Y29uc3QgdmFyaWFudE1hbmFnZW1lbnQ6IFZhcmlhbnRNYW5hZ2VtZW50VHlwZSA9IHBhZ2VNYW5pZmVzdFNldHRpbmdzLmdldFZhcmlhbnRNYW5hZ2VtZW50KCk7XG5cdGNvbnN0IGlzU2VhcmNoYWJsZSA9IGlzUGF0aFNlYXJjaGFibGUoY29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCkpO1xuXHRyZXR1cm4ge1xuXHRcdGlkOiBpZCxcblx0XHRhcGlJZDogZ2VuZXJhdGUoW2lkLCBcIlRhYmxlXCJdKSxcblx0XHRlbnRpdHlOYW1lOiBlbnRpdHlTZXQgPyBlbnRpdHlTZXQubmFtZSA6IFwiXCIsXG5cdFx0ZW50aXR5VHlwZU5hbWU6IGVudGl0eVNldCAmJiBlbnRpdHlTZXQuZW50aXR5VHlwZSA/IGVudGl0eVNldC5lbnRpdHlUeXBlLm5hbWUgOiBcIlwiLFxuXHRcdGNvbGxlY3Rpb246IGdldFRhcmdldE9iamVjdFBhdGgoY29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCkpLFxuXHRcdG5hdmlnYXRpb25QYXRoOiBuYXZpZ2F0aW9uUHJvcGVydHlQYXRoLFxuXHRcdHJvdzogX2dldFJvd0NvbmZpZ3VyYXRpb25Qcm9wZXJ0eShcblx0XHRcdGxpbmVJdGVtQW5ub3RhdGlvbixcblx0XHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0XHRuYXZpZ2F0aW9uU2V0dGluZ3MsXG5cdFx0XHRuYXZpZ2F0aW9uVGFyZ2V0UGF0aCxcblx0XHRcdHRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uLnR5cGUsXG5cdFx0XHR0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbi5hbmFseXRpY2FsQ29uZmlndXJhdGlvbj8uYWdncmVnYXRpb25PbkxlYWZMZXZlbFxuXHRcdCksXG5cdFx0cDEzbk1vZGUsXG5cdFx0aXNJbnNlcnRVcGRhdGVBY3Rpb25zVGVtcGxhdGVkOiBzdGFuZGFyZEFjdGlvbnNDb25maWd1cmF0aW9uLmlzSW5zZXJ0VXBkYXRlQWN0aW9uc1RlbXBsYXRlZCxcblx0XHR1cGRhdGFibGVQcm9wZXJ0eVBhdGg6IGdldEN1cnJlbnRFbnRpdHlTZXRVcGRhdGFibGVQYXRoKGNvbnZlcnRlckNvbnRleHQpLFxuXHRcdGRpc3BsYXlNb2RlOiBpc0luRGlzcGxheU1vZGUoY29udmVydGVyQ29udGV4dCwgdHJ1ZSksXG5cdFx0Y3JlYXRlOiBzdGFuZGFyZEFjdGlvbnNDb25maWd1cmF0aW9uLmNyZWF0aW9uQmVoYXZpb3VyLFxuXHRcdHNlbGVjdGlvbk1vZGU6IHNlbGVjdGlvbk1vZGUsXG5cdFx0dmFyaWFudE1hbmFnZW1lbnQ6IHZhcmlhbnRNYW5hZ2VtZW50ID09PSBcIkNvbnRyb2xcIiAmJiAhcDEzbk1vZGUgPyBWYXJpYW50TWFuYWdlbWVudFR5cGUuTm9uZSA6IHZhcmlhbnRNYW5hZ2VtZW50LFxuXHRcdHRocmVzaG9sZDogdGhyZXNob2xkLFxuXHRcdHNvcnRDb25kaXRpb25zOiBnZXRTb3J0Q29uZGl0aW9ucyhjb252ZXJ0ZXJDb250ZXh0LCBwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbiwgY29sdW1ucyksXG5cdFx0dGl0bGU6IHRpdGxlLFxuXHRcdHNlYXJjaGFibGU6XG5cdFx0XHR0YWJsZU1hbmlmZXN0U2V0dGluZ3MudGFibGVTZXR0aW5ncz8uaXNTZWFyY2hhYmxlID09PSBmYWxzZVxuXHRcdFx0XHQ/IGZhbHNlXG5cdFx0XHRcdDogdGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24udHlwZSAhPT0gXCJBbmFseXRpY2FsVGFibGVcIiAmJiAhKGlzQ29uc3RhbnQoaXNTZWFyY2hhYmxlKSAmJiBpc1NlYXJjaGFibGUudmFsdWUgPT09IGZhbHNlKSxcblx0XHRpbml0aWFsRXhwYW5zaW9uTGV2ZWw6IGdldEluaXRpYWxFeHBhbnNpb25MZXZlbChwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbiksXG5cdFx0cmVxdWlyZWRQcm9wZXJ0aWVzOiBnZXRSZXF1aXJlZFByb3BlcnRpZXMoY29udmVydGVyQ29udGV4dClcblx0XHRcdC5maWx0ZXIoKHByb3BlcnR5KSA9PiBwcm9wZXJ0eT8uJHRhcmdldD8udHlwZSAhPT0gXCJFZG0uQm9vbGVhblwiKVxuXHRcdFx0Lm1hcCgocHJvcGVydHkpID0+IHByb3BlcnR5LnZhbHVlKVxuXHR9O1xufVxuXG4vKipcbiAqIFNwbGl0cyB0aGUgdmlzdWFsaXphdGlvbiBwYXRoIGludG8gbmF2aWdhdGlvbiBwcm9wZXJ0eSBwYXRoIGFuZCBhbm5vdGF0aW9uLlxuICogQHBhcmFtIHZpc3VhbGl6YXRpb25QYXRoXG4gKiBAcmV0dXJucyBUaGUgc3BsaXQgcGF0aFxuICovXG5leHBvcnQgZnVuY3Rpb24gc3BsaXRQYXRoKHZpc3VhbGl6YXRpb25QYXRoOiBzdHJpbmcpOiB7IG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGg6IHN0cmluZzsgYW5ub3RhdGlvblBhdGg6IHN0cmluZyB9IHtcblx0Y29uc3QgW3RhcmdldE5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgsIGFubm90YXRpb25QYXRoXSA9IHZpc3VhbGl6YXRpb25QYXRoLnNwbGl0KFwiQFwiKTtcblx0bGV0IG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGggPSB0YXJnZXROYXZpZ2F0aW9uUHJvcGVydHlQYXRoO1xuXHRpZiAobmF2aWdhdGlvblByb3BlcnR5UGF0aC5sYXN0SW5kZXhPZihcIi9cIikgPT09IG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgubGVuZ3RoIC0gMSkge1xuXHRcdC8vIERyb3AgdHJhaWxpbmcgc2xhc2hcblx0XHRuYXZpZ2F0aW9uUHJvcGVydHlQYXRoID0gbmF2aWdhdGlvblByb3BlcnR5UGF0aC5zdWJzdHJpbmcoMCwgbmF2aWdhdGlvblByb3BlcnR5UGF0aC5sZW5ndGggLSAxKTtcblx0fVxuXHRyZXR1cm4geyBuYXZpZ2F0aW9uUHJvcGVydHlQYXRoLCBhbm5vdGF0aW9uUGF0aCB9O1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldFNlbGVjdGlvblZhcmlhbnRDb25maWd1cmF0aW9uKFxuXHRzZWxlY3Rpb25WYXJpYW50UGF0aDogc3RyaW5nLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD5cbik6IFNlbGVjdGlvblZhcmlhbnRDb25maWd1cmF0aW9uIHwgdW5kZWZpbmVkIHtcblx0Y29uc3QgcmVzb2x2ZWRUYXJnZXQgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGVBbm5vdGF0aW9uKHNlbGVjdGlvblZhcmlhbnRQYXRoKTtcblx0Y29uc3Qgc2VsZWN0aW9uOiBTZWxlY3Rpb25WYXJpYW50ID0gcmVzb2x2ZWRUYXJnZXQuYW5ub3RhdGlvbiBhcyBTZWxlY3Rpb25WYXJpYW50O1xuXHRpZiAoc2VsZWN0aW9uKSB7XG5cdFx0Y29uc3QgcHJvcGVydHlOYW1lczogc3RyaW5nW10gPSBbXTtcblx0XHRzZWxlY3Rpb24uU2VsZWN0T3B0aW9ucz8uZm9yRWFjaCgoc2VsZWN0T3B0aW9uOiBTZWxlY3RPcHRpb25UeXBlKSA9PiB7XG5cdFx0XHRjb25zdCBwcm9wZXJ0eU5hbWUgPSBzZWxlY3RPcHRpb24uUHJvcGVydHlOYW1lO1xuXHRcdFx0Y29uc3QgcHJvcGVydHlQYXRoOiBzdHJpbmcgPSBwcm9wZXJ0eU5hbWU/LnZhbHVlID8/IFwiXCI7XG5cdFx0XHRpZiAoIXByb3BlcnR5TmFtZXMuaW5jbHVkZXMocHJvcGVydHlQYXRoKSkge1xuXHRcdFx0XHRwcm9wZXJ0eU5hbWVzLnB1c2gocHJvcGVydHlQYXRoKTtcblx0XHRcdH1cblx0XHR9KTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0dGV4dDogc2VsZWN0aW9uPy5UZXh0Py50b1N0cmluZygpLFxuXHRcdFx0cHJvcGVydHlOYW1lczogcHJvcGVydHlOYW1lc1xuXHRcdH07XG5cdH1cblx0cmV0dXJuIHVuZGVmaW5lZDtcbn1cbmZ1bmN0aW9uIF9nZXRGdWxsU2NyZWVuQmFzZWRPbkRldmljZShcblx0dGFibGVTZXR0aW5nczogVGFibGVNYW5pZmVzdFNldHRpbmdzQ29uZmlndXJhdGlvbixcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHRpc0lwaG9uZTogYm9vbGVhblxuKTogYm9vbGVhbiB7XG5cdC8vIElmIGVuYWJsZUZ1bGxTY3JlZW4gaXMgbm90IHNldCwgdXNlIGFzIGRlZmF1bHQgdHJ1ZSBvbiBwaG9uZSBhbmQgZmFsc2Ugb3RoZXJ3aXNlXG5cdGxldCBlbmFibGVGdWxsU2NyZWVuID0gdGFibGVTZXR0aW5ncy5lbmFibGVGdWxsU2NyZWVuID8/IGlzSXBob25lO1xuXHQvLyBNYWtlIHN1cmUgdGhhdCBlbmFibGVGdWxsU2NyZWVuIGlzIG5vdCBzZXQgb24gTGlzdFJlcG9ydCBmb3IgZGVza3RvcCBvciB0YWJsZXRcblx0aWYgKCFpc0lwaG9uZSAmJiBlbmFibGVGdWxsU2NyZWVuICYmIGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCkgPT09IFRlbXBsYXRlVHlwZS5MaXN0UmVwb3J0KSB7XG5cdFx0ZW5hYmxlRnVsbFNjcmVlbiA9IGZhbHNlO1xuXHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0RGlhZ25vc3RpY3MoKS5hZGRJc3N1ZShJc3N1ZUNhdGVnb3J5Lk1hbmlmZXN0LCBJc3N1ZVNldmVyaXR5LkxvdywgSXNzdWVUeXBlLkZVTExTQ1JFRU5NT0RFX05PVF9PTl9MSVNUUkVQT1JUKTtcblx0fVxuXHRyZXR1cm4gZW5hYmxlRnVsbFNjcmVlbjtcbn1cbmZ1bmN0aW9uIF9nZXRNdWx0aVNlbGVjdE1vZGUoXG5cdHRhYmxlU2V0dGluZ3M6IFRhYmxlTWFuaWZlc3RTZXR0aW5nc0NvbmZpZ3VyYXRpb24sXG5cdHRhYmxlVHlwZTogVGFibGVUeXBlLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD5cbik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdGxldCBtdWx0aVNlbGVjdE1vZGU6IHN0cmluZyB8IHVuZGVmaW5lZDtcblx0aWYgKHRhYmxlVHlwZSAhPT0gXCJSZXNwb25zaXZlVGFibGVcIikge1xuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblx0c3dpdGNoIChjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpKSB7XG5cdFx0Y2FzZSBUZW1wbGF0ZVR5cGUuTGlzdFJlcG9ydDpcblx0XHRjYXNlIFRlbXBsYXRlVHlwZS5PYmplY3RQYWdlOlxuXHRcdFx0bXVsdGlTZWxlY3RNb2RlID0gdGFibGVTZXR0aW5ncy5zZWxlY3RBbGwgPT09IGZhbHNlID8gXCJDbGVhckFsbFwiIDogXCJEZWZhdWx0XCI7XG5cdFx0XHRpZiAoY29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSA9PT0gVGVtcGxhdGVUeXBlLk9iamVjdFBhZ2UgJiYgY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKS51c2VJY29uVGFiQmFyKCkpIHtcblx0XHRcdFx0bXVsdGlTZWxlY3RNb2RlID0gIXRhYmxlU2V0dGluZ3Muc2VsZWN0QWxsID8gXCJDbGVhckFsbFwiIDogXCJEZWZhdWx0XCI7XG5cdFx0XHR9XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFRlbXBsYXRlVHlwZS5BbmFseXRpY2FsTGlzdFBhZ2U6XG5cdFx0XHRtdWx0aVNlbGVjdE1vZGUgPSAhdGFibGVTZXR0aW5ncy5zZWxlY3RBbGwgPyBcIkNsZWFyQWxsXCIgOiBcIkRlZmF1bHRcIjtcblx0XHRcdGJyZWFrO1xuXHRcdGRlZmF1bHQ6XG5cdH1cblx0cmV0dXJuIG11bHRpU2VsZWN0TW9kZTtcbn1cbmZ1bmN0aW9uIF9nZXRUYWJsZU1vZGUoXG5cdHRhYmxlVHlwZTogVGFibGVUeXBlLFxuXHR0YWJsZVNldHRpbmdzOiBUYWJsZU1hbmlmZXN0U2V0dGluZ3NDb25maWd1cmF0aW9uLFxuXHRpc1RlbXBsYXRlTGlzdFJlcG9ydDogYm9vbGVhblxuKTogeyByb3dDb3VudE1vZGU/OiBUYWJsZVJvd0NvdW50TW9kZTsgcm93Q291bnQ/OiBudW1iZXIgfSB7XG5cdGlmICh0YWJsZVR5cGUgIT09IFwiUmVzcG9uc2l2ZVRhYmxlXCIpIHtcblx0XHRpZiAoaXNUZW1wbGF0ZUxpc3RSZXBvcnQpIHtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdHJvd0NvdW50TW9kZTogXCJBdXRvXCIsXG5cdFx0XHRcdHJvd0NvdW50OiAzXG5cdFx0XHR9O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRsZXQgaW5pdGlhbFJvd0NvdW50OiBudW1iZXI7XG5cdFx0XHRzd2l0Y2ggKHRhYmxlVHlwZSkge1xuXHRcdFx0XHRjYXNlIFwiR3JpZFRhYmxlXCI6XG5cdFx0XHRcdFx0aW5pdGlhbFJvd0NvdW50ID0gdGFibGVTZXR0aW5ncy5yb3dDb3VudE1vZGUgPT09IFwiQXV0b1wiID8gMyA6IDU7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgXCJUcmVlVGFibGVcIjpcblx0XHRcdFx0Y2FzZSBcIkFuYWx5dGljYWxUYWJsZVwiOlxuXHRcdFx0XHRcdGluaXRpYWxSb3dDb3VudCA9IHRhYmxlU2V0dGluZ3Mucm93Q291bnRNb2RlID09PSBcIkF1dG9cIiA/IDMgOiAxMDtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRpbml0aWFsUm93Q291bnQgPSA1O1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0cm93Q291bnRNb2RlOiB0YWJsZVNldHRpbmdzLnJvd0NvdW50TW9kZSA/PyBcIkZpeGVkXCIsXG5cdFx0XHRcdHJvd0NvdW50OiB0YWJsZVNldHRpbmdzLnJvd0NvdW50ID8/IGluaXRpYWxSb3dDb3VudFxuXHRcdFx0fTtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIHt9O1xuXHR9XG59XG5mdW5jdGlvbiBfZ2V0Q29uZGVuc2VkVGFibGVMYXlvdXQoX3RhYmxlVHlwZTogVGFibGVUeXBlLCBfdGFibGVTZXR0aW5nczogVGFibGVNYW5pZmVzdFNldHRpbmdzQ29uZmlndXJhdGlvbik6IGJvb2xlYW4ge1xuXHRyZXR1cm4gX3RhYmxlU2V0dGluZ3MuY29uZGVuc2VkVGFibGVMYXlvdXQgIT09IHVuZGVmaW5lZCAmJiBfdGFibGVUeXBlICE9PSBcIlJlc3BvbnNpdmVUYWJsZVwiXG5cdFx0PyBfdGFibGVTZXR0aW5ncy5jb25kZW5zZWRUYWJsZUxheW91dFxuXHRcdDogZmFsc2U7XG59XG5mdW5jdGlvbiBfZ2V0VGFibGVTZWxlY3Rpb25MaW1pdChfdGFibGVTZXR0aW5nczogVGFibGVNYW5pZmVzdFNldHRpbmdzQ29uZmlndXJhdGlvbik6IG51bWJlciB7XG5cdHJldHVybiBfdGFibGVTZXR0aW5ncy5zZWxlY3RBbGwgPT09IHRydWUgfHwgX3RhYmxlU2V0dGluZ3Muc2VsZWN0aW9uTGltaXQgPT09IDAgPyAwIDogX3RhYmxlU2V0dGluZ3Muc2VsZWN0aW9uTGltaXQgfHwgMjAwO1xufVxuZnVuY3Rpb24gX2dldFRhYmxlSW5saW5lQ3JlYXRpb25Sb3dDb3VudChfdGFibGVTZXR0aW5nczogVGFibGVNYW5pZmVzdFNldHRpbmdzQ29uZmlndXJhdGlvbik6IG51bWJlciB7XG5cdHJldHVybiBfdGFibGVTZXR0aW5ncy5jcmVhdGlvbk1vZGU/LmlubGluZUNyZWF0aW9uUm93Q291bnQgPyBfdGFibGVTZXR0aW5ncy5jcmVhdGlvbk1vZGU/LmlubGluZUNyZWF0aW9uUm93Q291bnQgOiAxO1xufVxuXG5mdW5jdGlvbiBfZ2V0RW5hYmxlRXhwb3J0KFxuXHR0YWJsZVNldHRpbmdzOiBUYWJsZU1hbmlmZXN0U2V0dGluZ3NDb25maWd1cmF0aW9uLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdGVuYWJsZVBhc3RlOiBib29sZWFuXG4pOiBib29sZWFuIHtcblx0cmV0dXJuIHRhYmxlU2V0dGluZ3MuZW5hYmxlRXhwb3J0ICE9PSB1bmRlZmluZWRcblx0XHQ/IHRhYmxlU2V0dGluZ3MuZW5hYmxlRXhwb3J0XG5cdFx0OiBjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpICE9PSBcIk9iamVjdFBhZ2VcIiB8fCBlbmFibGVQYXN0ZTtcbn1cbmZ1bmN0aW9uIF9nZXRGcm96ZW5Db2x1bW5Db3VudCh0YWJsZVNldHRpbmdzOiBUYWJsZU1hbmlmZXN0U2V0dGluZ3NDb25maWd1cmF0aW9uKTogbnVtYmVyIHwgdW5kZWZpbmVkIHtcblx0cmV0dXJuIHRhYmxlU2V0dGluZ3MuZnJvemVuQ29sdW1uQ291bnQ7XG59XG5cbi8qKlxuICogR2V0IHRoZSB3aWR0aEluY2x1ZGluZ0NvbHVtbkhlYWRlciB2YWx1ZSBmcm9tIHRoZSB0YWJsZVNldHRpbmdzIGlmIGl0IGV4aXN0cy5cbiAqIEBwYXJhbSB0YWJsZVNldHRpbmdzIFRhYmxlU2V0dGluZ3MgT2JqZWN0XG4gKiBAcmV0dXJucyBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB3aWR0aEluY2x1ZGluZ0NvbHVtbkhlYWRlciBvciBmYWxzZVxuICovXG5mdW5jdGlvbiBfZ2V0V2lkdGhJbmNsdWRpbmdDb2x1bW5IZWFkZXIodGFibGVTZXR0aW5nczogVGFibGVNYW5pZmVzdFNldHRpbmdzQ29uZmlndXJhdGlvbik6IGJvb2xlYW4ge1xuXHRyZXR1cm4gdGFibGVTZXR0aW5ncy53aWR0aEluY2x1ZGluZ0NvbHVtbkhlYWRlciA/PyBmYWxzZTtcbn1cblxuZnVuY3Rpb24gZ2V0RmlsdGVyQ29uZmlndXJhdGlvbihcblx0dGFibGVTZXR0aW5nczogVGFibGVNYW5pZmVzdFNldHRpbmdzQ29uZmlndXJhdGlvbixcblx0bGluZUl0ZW1Bbm5vdGF0aW9uOiBMaW5lSXRlbSxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHRzZWxlY3Rpb25WYXJpYW50QW5ub3RhdGlvbjogU2VsZWN0aW9uVmFyaWFudFR5cGUgfCB1bmRlZmluZWRcbik6IHtcblx0ZmlsdGVyczogUGFydGlhbDxSZWNvcmQ8XCJxdWlja0ZpbHRlcnNcIiB8IFwiaGlkZGVuRmlsdGVyc1wiLCBUYWJsZUZpbHRlcnNDb25maWd1cmF0aW9uPj47XG5cdGhlYWRlclZpc2libGU6IGJvb2xlYW47XG59IHtcblx0bGV0IGhpZGVUYWJsZVRpdGxlID0gZmFsc2U7XG5cdGNvbnN0IGZpbHRlcnM6IFBhcnRpYWw8UmVjb3JkPFwicXVpY2tGaWx0ZXJzXCIgfCBcImhpZGRlbkZpbHRlcnNcIiwgVGFibGVGaWx0ZXJzQ29uZmlndXJhdGlvbj4+ID0ge307XG5cdGNvbnN0IHRhcmdldEVudGl0eVR5cGUgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEFubm90YXRpb25FbnRpdHlUeXBlKGxpbmVJdGVtQW5ub3RhdGlvbik7XG5cdGlmICh0YWJsZVNldHRpbmdzLnF1aWNrVmFyaWFudFNlbGVjdGlvbikge1xuXHRcdGNvbnN0IHF1aWNrRmlsdGVyUGF0aHMgPSAodGFibGVTZXR0aW5ncy5xdWlja1ZhcmlhbnRTZWxlY3Rpb24ucGF0aHMgPz8gW10pLnJlZHVjZShcblx0XHRcdChmaWx0ZXJQYXRoczogeyBhbm5vdGF0aW9uUGF0aDogc3RyaW5nIH1bXSwgcGF0aCkgPT4ge1xuXHRcdFx0XHRpZiAodGFyZ2V0RW50aXR5VHlwZS5yZXNvbHZlUGF0aChwYXRoLmFubm90YXRpb25QYXRoKSkge1xuXHRcdFx0XHRcdGZpbHRlclBhdGhzLnB1c2goeyBhbm5vdGF0aW9uUGF0aDogcGF0aC5hbm5vdGF0aW9uUGF0aCB9KTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gZmlsdGVyUGF0aHM7XG5cdFx0XHR9LFxuXHRcdFx0W11cblx0XHQpO1xuXHRcdGlmIChxdWlja0ZpbHRlclBhdGhzLmxlbmd0aCkge1xuXHRcdFx0ZmlsdGVycy5xdWlja0ZpbHRlcnMgPSB7XG5cdFx0XHRcdHNob3dDb3VudHM6IHRhYmxlU2V0dGluZ3MucXVpY2tWYXJpYW50U2VsZWN0aW9uLnNob3dDb3VudHMsXG5cdFx0XHRcdHBhdGhzOiBxdWlja0ZpbHRlclBhdGhzXG5cdFx0XHR9O1xuXHRcdH1cblx0fVxuXHRpZiAoc2VsZWN0aW9uVmFyaWFudEFubm90YXRpb24pIHtcblx0XHQvKipcblx0XHQgKiBQcm92aWRlIFNlbGVjdGlvbiBWYXJpYW50IHRvIGhpZGRlbkZpbHRlcnMgaW4gb3JkZXIgdG8gc2V0IHRoZSBTViBmaWx0ZXJzIHRvIHRoZSB0YWJsZS5cblx0XHQgKiBNREMgVGFibGUgb3ZlcnJpZGVzIGJpbmRpbmcgRmlsdGVyIGFuZCBmcm9tIFNBUCBGRSB0aGUgb25seSBtZXRob2Qgd2hlcmUgd2UgYXJlIGFibGUgdG8gYWRkXG5cdFx0ICogYWRkaXRpb25hbCBmaWx0ZXIgaXMgJ3JlYmluZFRhYmxlJyBpbnRvIFRhYmxlIGRlbGVnYXRlLlxuXHRcdCAqIFRvIGF2b2lkIGltcGxlbWVudGluZyBzcGVjaWZpYyBMUiBmZWF0dXJlIHRvIFNBUCBGRSBNYWNybyBUYWJsZSwgdGhlIGZpbHRlcihzKSAgbm90IG1hbmFnZWQgYnkgdGhlIEZpbHRlckJhclxuXHRcdCAqIGNhbiBiZSBwYXNzZWQgdG8gbWFjcm8gdGFibGUgdmlhIHBhcmFtZXRlci9jb250ZXh0IG5hbWVkIGZpbHRlcnMgYW5kIGtleSBoaWRkZW5GaWx0ZXJzLlxuXHRcdCAqL1xuXHRcdGZpbHRlcnMuaGlkZGVuRmlsdGVycyA9IHsgcGF0aHM6IFt7IGFubm90YXRpb25QYXRoOiBgQCR7c2VsZWN0aW9uVmFyaWFudEFubm90YXRpb24uZnVsbHlRdWFsaWZpZWROYW1lLnNwbGl0KFwiQFwiKVsxXX1gIH1dIH07XG5cdH1cblxuXHRoaWRlVGFibGVUaXRsZSA9ICEhdGFibGVTZXR0aW5ncy5xdWlja1ZhcmlhbnRTZWxlY3Rpb24/LmhpZGVUYWJsZVRpdGxlO1xuXHRyZXR1cm4ge1xuXHRcdGZpbHRlcnM6IGZpbHRlcnMsXG5cdFx0aGVhZGVyVmlzaWJsZTogIShmaWx0ZXJzPy5xdWlja0ZpbHRlcnMgJiYgaGlkZVRhYmxlVGl0bGUpXG5cdH07XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lcyBpZiB0aGUgYWN0aW9uIHdpbGwgaGF2ZSBhbiBleHByZXNzaW9uIGZvciBlbmFibGVtZW50IGdlbmVyYXRlZC5cbiAqIEBwYXJhbSBkYXRhRmllbGQgVGhlIGRhdGFGaWVsZCBjb250YWluaW5nIGFuIGFjdGlvblxuICogQHBhcmFtIHNFbnRpdHlUeXBlIFRoZSBjdXJyZW50IGVudGl0eSBmb3IgdGVtcGxhdGluZ1xuICogQHJldHVybnMgV2hldGhlciBhbiBleHByZXNzaW9uIGZvciBlbmFibGVtZW50IGlzIHRvIGJlIGdlbmVyYXRlZFxuICovXG5mdW5jdGlvbiBfdXNlRW5hYmxlZEV4cHJlc3Npb24oZGF0YUZpZWxkOiBEYXRhRmllbGRGb3JBY3Rpb25UeXBlcywgc0VudGl0eVR5cGU6IHN0cmluZyk6IGJvb2xlYW4ge1xuXHQvLyBUaGVyZSBhcmUgdGhyZWUgY2FzZXMgd2hlbiBhIHRhYmxlIGFjdGlvbiBoYXMgYW4gT3BlcmF0aW9uQXZhaWxhYmxlIHRoYXQgbGVhZHMgdG8gYW4gZW5hYmxlbWVudCBleHByZXNzaW9uXG5cdC8vIGFuZCBpcyBub3QgZGVwZW5kZW50IHVwb24gdGhlIHRhYmxlIGVudHJpZXMuXG5cdC8vIDEuIEFuIGFjdGlvbiB3aXRoIGFuIG92ZXJsb2FkLCB0aGF0IGlzIGV4ZWN1dGVkIGFnYWluc3QgYSBwYXJlbnQgZW50aXR5LlxuXHQvLyAyLiBBbiB1bmJvdW5kIGFjdGlvblxuXHQvLyAzLiBBIHN0YXRpYyBhY3Rpb24gKHRoYXQgaXMsIGJvdW5kIHRvIGEgY29sbGVjdGlvbilcblx0bGV0IHVzZUVuYWJsZWRFeHByZXNzaW9uID0gZmFsc2U7XG5cdGlmIChkYXRhRmllbGQuQWN0aW9uVGFyZ2V0Py5hbm5vdGF0aW9ucz8uQ29yZT8uT3BlcmF0aW9uQXZhaWxhYmxlICE9PSB1bmRlZmluZWQpIHtcblx0XHQvLyBVbmJvdW5kIGFjdGlvbi4gSXMgcmVjb2duaXNlZCwgYnV0IGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbiBjaGVja3MgZm9yIGlzQm91bmQgPSB0cnVlLCBzbyBub3QgZ2VuZXJhdGVkLlxuXHRcdGNvbnN0IGlzQm91bmQgPSBkYXRhRmllbGQuQWN0aW9uVGFyZ2V0Py5pc0JvdW5kO1xuXHRcdC8vb3ZlcmxvYWQgYWN0aW9uXG5cdFx0Y29uc3Qgb3ZlcmxvYWRBY3Rpb24gPSBpc0JvdW5kICYmIGRhdGFGaWVsZC5BY3Rpb25UYXJnZXQ/LnNvdXJjZVR5cGUgIT09IHNFbnRpdHlUeXBlO1xuXHRcdC8vc3RhdGljIGFjdGlvblxuXHRcdGNvbnN0IHN0YXRpY0FjdGlvbiA9IGRhdGFGaWVsZC5BY3Rpb25UYXJnZXQ/LnBhcmFtZXRlcnNbMF0/LmlzQ29sbGVjdGlvbjtcblx0XHQvL2NvcHkgYWN0aW9uXG5cdFx0aWYgKCFpc0JvdW5kIHx8IG92ZXJsb2FkQWN0aW9uIHx8IHN0YXRpY0FjdGlvbikge1xuXHRcdFx0dXNlRW5hYmxlZEV4cHJlc3Npb24gPSB0cnVlO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gdXNlRW5hYmxlZEV4cHJlc3Npb247XG59XG5cbi8qKlxuICogVXBkYXRlcyB0aGUgdGFibGUgY29udHJvbCBjb25maWd1cmF0aW9uIHdpdGggVHJlZS1UYWJsZSBzcGVjaWZpYyBpbmZvcm1hdGlvbi5cbiAqIEBwYXJhbSB0YWJsZUNvbmZpZ3VyYXRpb24gVGhlIHRhYmxlIGNvbmZpZ3VyYXRpb25cbiAqIEBwYXJhbSB0YWJsZVNldHRpbmdzIFNldHRpbmdzIGZyb20gdGhlIG1hbmlmZXN0XG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgaW5zdGFuY2Ugb2YgdGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKi9cbmZ1bmN0aW9uIHVwZGF0ZVRyZWVUYWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbihcblx0dGFibGVDb25maWd1cmF0aW9uOiBUYWJsZUNvbnRyb2xDb25maWd1cmF0aW9uLFxuXHR0YWJsZVNldHRpbmdzOiBUYWJsZU1hbmlmZXN0U2V0dGluZ3NDb25maWd1cmF0aW9uLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0XG4pOiB2b2lkIHtcblx0Y29uc3QgZGF0YU1vZGVsT2JqZWN0UGF0aCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpO1xuXHR0YWJsZUNvbmZpZ3VyYXRpb24uaGllcmFyY2h5UXVhbGlmaWVyID0gdGFibGVTZXR0aW5ncy5oaWVyYXJjaHlRdWFsaWZpZXI7XG5cdGNvbnN0IGhpZXJhcmNoeVBhcmVudE5hdmlnYXRpb25Qcm9wZXJ0eVBhdGggPSBnZXRIaWVyYXJjaHlQYXJlbnROYXZpZ2F0aW9uUHJvcGVydHlQYXRoKFxuXHRcdGRhdGFNb2RlbE9iamVjdFBhdGgsXG5cdFx0dGFibGVDb25maWd1cmF0aW9uLmhpZXJhcmNoeVF1YWxpZmllciFcblx0KTtcblx0Y29uc3Qgbm9uVXBkYXRhYmxlTmF2aWdhdGlvblByb3BlcnRpZXMgPSBnZXROb25VcGRhdGFibGVOYXZpZ2F0aW9uUHJvcGVydGllcyhkYXRhTW9kZWxPYmplY3RQYXRoKTtcblx0dGFibGVDb25maWd1cmF0aW9uLmlzSGllcmFyY2h5UGFyZW50Tm9kZVVwZGF0YWJsZSA9ICFub25VcGRhdGFibGVOYXZpZ2F0aW9uUHJvcGVydGllcz8uaW5jbHVkZXMoaGllcmFyY2h5UGFyZW50TmF2aWdhdGlvblByb3BlcnR5UGF0aCk7XG5cdHRhYmxlQ29uZmlndXJhdGlvbi5pc05vZGVNb3ZhYmxlID0gZ2V0Q3VzdG9tRnVuY3Rpb25JbmZvKHRhYmxlU2V0dGluZ3MuaXNOb2RlTW92YWJsZSwgdGFibGVDb25maWd1cmF0aW9uKTtcblx0dGFibGVDb25maWd1cmF0aW9uLmlzTm9kZUNvcHlhYmxlID0gZ2V0Q3VzdG9tRnVuY3Rpb25JbmZvKHRhYmxlU2V0dGluZ3MuaXNOb2RlQ29weWFibGUsIHRhYmxlQ29uZmlndXJhdGlvbik7XG5cdHRhYmxlQ29uZmlndXJhdGlvbi5pc01vdmVUb1Bvc2l0aW9uQWxsb3dlZCA9IGdldEN1c3RvbUZ1bmN0aW9uSW5mbyh0YWJsZVNldHRpbmdzLmlzTW92ZVRvUG9zaXRpb25BbGxvd2VkLCB0YWJsZUNvbmZpZ3VyYXRpb24pO1xuXHR0YWJsZUNvbmZpZ3VyYXRpb24uaXNDb3B5VG9Qb3NpdGlvbkFsbG93ZWQgPSBnZXRDdXN0b21GdW5jdGlvbkluZm8odGFibGVTZXR0aW5ncy5pc0NvcHlUb1Bvc2l0aW9uQWxsb3dlZCwgdGFibGVDb25maWd1cmF0aW9uKTtcblx0dGFibGVDb25maWd1cmF0aW9uLmNyZWF0ZUVuYWJsZW1lbnQgPSBnZXRDdXN0b21GdW5jdGlvbkluZm8odGFibGVTZXR0aW5ncy5jcmVhdGlvbk1vZGU/LmlzQ3JlYXRlRW5hYmxlZCwgdGFibGVDb25maWd1cmF0aW9uKTtcblxuXHRpZiAodGFibGVTZXR0aW5ncy5jcmVhdGlvbk1vZGU/Lm5vZGVUeXBlPy5wcm9wZXJ0eU5hbWUgJiYgdGFibGVTZXR0aW5ncy5jcmVhdGlvbk1vZGU/Lm5vZGVUeXBlPy52YWx1ZXMpIHtcblx0XHRjb25zdCB2YWx1ZXMgPSB0YWJsZVNldHRpbmdzLmNyZWF0aW9uTW9kZS5ub2RlVHlwZS52YWx1ZXM7XG5cdFx0dGFibGVDb25maWd1cmF0aW9uLm5vZGVUeXBlID0ge1xuXHRcdFx0cHJvcGVydHlOYW1lOiB0YWJsZVNldHRpbmdzLmNyZWF0aW9uTW9kZS5ub2RlVHlwZS5wcm9wZXJ0eU5hbWUsXG5cdFx0XHR2YWx1ZXM6IE9iamVjdC5rZXlzKHZhbHVlcykubWFwKCh2YWx1ZSkgPT4ge1xuXHRcdFx0XHRjb25zdCBub2RlVHlwZUluZm8gPSB2YWx1ZXNbdmFsdWVdO1xuXG5cdFx0XHRcdGlmICh0eXBlb2Ygbm9kZVR5cGVJbmZvID09PSBcInN0cmluZ1wiKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHRcdHZhbHVlLFxuXHRcdFx0XHRcdFx0dGV4dDogbm9kZVR5cGVJbmZvXG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdFx0dmFsdWUsXG5cdFx0XHRcdFx0XHR0ZXh0OiBub2RlVHlwZUluZm8ubGFiZWwsXG5cdFx0XHRcdFx0XHRjcmVhdGlvbkRpYWxvZ0ZpZWxkczpcblx0XHRcdFx0XHRcdFx0dGFibGVDb25maWd1cmF0aW9uLmNyZWF0aW9uTW9kZSA9PT0gQ3JlYXRpb25Nb2RlLkNyZWF0aW9uRGlhbG9nXG5cdFx0XHRcdFx0XHRcdFx0PyBnZXRGaWVsZExpc3Qobm9kZVR5cGVJbmZvLmNyZWF0aW9uRmllbGRzLCBjb252ZXJ0ZXJDb250ZXh0KVxuXHRcdFx0XHRcdFx0XHRcdDogdW5kZWZpbmVkXG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0fVxuXHRcdFx0fSlcblx0XHR9O1xuXHR9XG5cblx0Ly8gQ3JlYXRlIGluIHBsYWNlXG5cdGlmICh0YWJsZVNldHRpbmdzLmNyZWF0aW9uTW9kZT8uY3JlYXRlSW5QbGFjZSkge1xuXHRcdHRhYmxlQ29uZmlndXJhdGlvbi5jcmVhdGVJblBsYWNlID0gdHJ1ZTtcblx0fVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q3VzdG9tRnVuY3Rpb25JbmZvKFxuXHR2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkLFxuXHR0YWJsZUNvbmZpZ3VyYXRpb246IFRhYmxlQ29udHJvbENvbmZpZ3VyYXRpb25cbik6IEV4dGVybmFsTWV0aG9kQ29uZmlnIHwgdW5kZWZpbmVkIHtcblx0aWYgKCF2YWx1ZSkge1xuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblx0Y29uc3QgbGFzdERvdEluZGV4ID0gdmFsdWUubGFzdEluZGV4T2YoXCIuXCIpIHx8IC0xO1xuXHRjb25zdCBtb2R1bGVOYW1lID0gdmFsdWUuc3Vic3RyaW5nKDAsIGxhc3REb3RJbmRleCkucmVwbGFjZSgvXFwuL2dpLCBcIi9cIik7XG5cdGNvbnN0IG1ldGhvZE5hbWUgPSB2YWx1ZS5zdWJzdHJpbmcobGFzdERvdEluZGV4ICsgMSk7XG5cblx0Ly8gQWRkIHRoZSBjdXN0b20gbW9kdWxlIGluIHRoZSBsaXN0IG9mIHJlcXVpcmVkIG1vZHVsZXMgaWYgbmVjZXNzYXJ5XG5cdGlmICghbW9kdWxlTmFtZS5zdGFydHNXaXRoKFwiL2V4dGVuc2lvbi9cIikpIHtcblx0XHRpZiAoIXRhYmxlQ29uZmlndXJhdGlvbi5hZGRpdGlvbmFsUmVxdWlyZWRNb2R1bGVzKSB7XG5cdFx0XHR0YWJsZUNvbmZpZ3VyYXRpb24uYWRkaXRpb25hbFJlcXVpcmVkTW9kdWxlcyA9IFttb2R1bGVOYW1lXTtcblx0XHR9IGVsc2UgaWYgKCF0YWJsZUNvbmZpZ3VyYXRpb24uYWRkaXRpb25hbFJlcXVpcmVkTW9kdWxlcy5pbmNsdWRlcyhtb2R1bGVOYW1lKSkge1xuXHRcdFx0dGFibGVDb25maWd1cmF0aW9uLmFkZGl0aW9uYWxSZXF1aXJlZE1vZHVsZXMucHVzaChtb2R1bGVOYW1lKTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4geyBtb2R1bGVOYW1lLCBtZXRob2ROYW1lIH07XG59XG5cbi8qKlxuICogUmV0cmlldmUgdGhlIHRhYmxlIGNvbnRyb2wgY29uZmlndXJhdGlvbiBvcHRpbWlzdGljIGJhdGNoIGluZm9ybWF0aW9uLlxuICogQHBhcmFtIHRhYmxlTWFuaWZlc3RTZXR0aW5ncyBUaGUgdGFibGUgY29uZmlndXJhdGlvblxuIEByZXR1cm5zIFRydWUgaWYgT3B0aW1pc3RpYyBiYXRjaCBtb2RlIGlzIGRpc2FibGVkXG4gKi9cbmZ1bmN0aW9uIGdldE9wdGltaXN0aWNCYXRjaFNldHRpbmdzRnJvbU1hbmlmZXN0KHRhYmxlTWFuaWZlc3RTZXR0aW5nczogVGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24pOiBib29sZWFuIHwgdW5kZWZpbmVkIHtcblx0Ly8gT3B0aW1pc3RpYyBiYXRjaCBpcyBzZXQgYnkgZGVmYXVsdFxuXHRyZXR1cm4gdGFibGVNYW5pZmVzdFNldHRpbmdzPy50YWJsZVNldHRpbmdzPy5kaXNhYmxlUmVxdWVzdENhY2hlO1xufVxuXG4vKipcbiAqIEdldHMgdGhlIHNldHRpbmdzIGNvbWluZyBmcm9tIHRoZSBtYW5pZmVzdCByZWxhdGVkIHRvIHRoZSBtYXNzIGVkaXQgZGlhbG9nLlxuICogQHBhcmFtIHRhYmxlU2V0dGluZ3MgVGhlIHRhYmxlIGNvbmZpZ3VyYXRpb25cbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBpbnN0YW5jZSBvZiB0aGUgY29udmVydGVyIGNvbnRleHRcbiAqIEByZXR1cm5zIFRoZSBtYXNzIGVkaXQgY29uZmlndXJhdGlvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldE1hc3NFZGl0U2V0dGluZ3MoXG5cdHRhYmxlU2V0dGluZ3M6IFRhYmxlTWFuaWZlc3RTZXR0aW5nc0NvbmZpZ3VyYXRpb24sXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0PlxuKTogTWFzc0VkaXRUYWJsZUNvbmZpZ3VyYXRpb24ge1xuXHRjb25zdCBkZWZhdWx0RmllbGRDb25maWd1cmF0aW9uID0ge1xuXHRcdHZpc2libGVGaWVsZHM6IFtdLFxuXHRcdGlnbm9yZWRGaWVsZHM6IFtdLFxuXHRcdG9wZXJhdGlvbkdyb3VwaW5nTW9kZTpcblx0XHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCkgPT09IFRlbXBsYXRlVHlwZS5MaXN0UmVwb3J0XG5cdFx0XHRcdD8gT3BlcmF0aW9uR3JvdXBpbmdNb2RlLklzb2xhdGVkXG5cdFx0XHRcdDogT3BlcmF0aW9uR3JvdXBpbmdNb2RlLkNoYW5nZVNldFxuXHR9O1xuXHRpZiAoIXRhYmxlU2V0dGluZ3MuZW5hYmxlTWFzc0VkaXQpIHtcblx0XHRyZXR1cm4geyBlbmFibGVkOiBmYWxzZSwgLi4uZGVmYXVsdEZpZWxkQ29uZmlndXJhdGlvbiB9O1xuXHR9XG5cdGlmICh0YWJsZVNldHRpbmdzLmVuYWJsZU1hc3NFZGl0ID09PSB0cnVlKSB7XG5cdFx0cmV0dXJuIHsgZW5hYmxlZDogdGFibGVTZXR0aW5ncy5lbmFibGVNYXNzRWRpdCwgLi4uZGVmYXVsdEZpZWxkQ29uZmlndXJhdGlvbiB9O1xuXHR9IGVsc2UgaWYgKHR5cGVvZiB0YWJsZVNldHRpbmdzLmVuYWJsZU1hc3NFZGl0ID09PSBcIm9iamVjdFwiKSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdGVuYWJsZWQ6IHRydWUsXG5cdFx0XHR2aXNpYmxlRmllbGRzOiBnZXRGaWVsZExpc3QodGFibGVTZXR0aW5ncy5lbmFibGVNYXNzRWRpdC52aXNpYmxlRmllbGRzLCBjb252ZXJ0ZXJDb250ZXh0KSxcblx0XHRcdGlnbm9yZWRGaWVsZHM6IGdldEZpZWxkTGlzdCh0YWJsZVNldHRpbmdzLmVuYWJsZU1hc3NFZGl0Lmlnbm9yZWRGaWVsZHMsIGNvbnZlcnRlckNvbnRleHQpLFxuXHRcdFx0b3BlcmF0aW9uR3JvdXBpbmdNb2RlOlxuXHRcdFx0XHR0YWJsZVNldHRpbmdzLmVuYWJsZU1hc3NFZGl0Lm9wZXJhdGlvbkdyb3VwaW5nTW9kZSAmJlxuXHRcdFx0XHRPYmplY3QudmFsdWVzKE9wZXJhdGlvbkdyb3VwaW5nTW9kZSkuaW5jbHVkZXModGFibGVTZXR0aW5ncy5lbmFibGVNYXNzRWRpdC5vcGVyYXRpb25Hcm91cGluZ01vZGUpXG5cdFx0XHRcdFx0PyB0YWJsZVNldHRpbmdzLmVuYWJsZU1hc3NFZGl0Lm9wZXJhdGlvbkdyb3VwaW5nTW9kZVxuXHRcdFx0XHRcdDogZGVmYXVsdEZpZWxkQ29uZmlndXJhdGlvbi5vcGVyYXRpb25Hcm91cGluZ01vZGUsXG5cdFx0XHRjdXN0b21GcmFnbWVudDogdGFibGVTZXR0aW5ncy5lbmFibGVNYXNzRWRpdC5jdXN0b21GcmFnbWVudCxcblx0XHRcdGZyb21JbmxpbmU6IHRhYmxlU2V0dGluZ3MuZW5hYmxlTWFzc0VkaXQuZnJvbUlubGluZVxuXHRcdH07XG5cdH1cblx0cmV0dXJuIHsgZW5hYmxlZDogZmFsc2UsIC4uLmRlZmF1bHRGaWVsZENvbmZpZ3VyYXRpb24gfTtcbn1cblxuLyoqXG4gKiBHZXRzIGEgbGlzdCBvZiB0aGUgZmllbGRzIGNvbWluZyBmcm9tIHRoZSBtYW5pZmVzdC5cbiAqIEBwYXJhbSBmaWVsZHMgVGhlIGZpZWxkcywgY291bGQgYmUgYSBGaWVsZEdyb3VwIG9yIGZpZWxkcyBzZXBhcmF0ZWQgYnkgYSBjb21tYVxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGluc3RhbmNlIG9mIHRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHJldHVybnMgVGhlIGxpc3Qgb2YgZmllbGRzLlxuICovXG5mdW5jdGlvbiBnZXRGaWVsZExpc3QoZmllbGRzOiBzdHJpbmcgfCB1bmRlZmluZWQsIGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pik6IHN0cmluZ1tdIHtcblx0aWYgKCFmaWVsZHMpIHtcblx0XHRyZXR1cm4gW107XG5cdH1cblx0aWYgKGZpZWxkcy5pbmNsdWRlcyhVSUFubm90YXRpb25UZXJtcy5GaWVsZEdyb3VwKSkge1xuXHRcdGZpZWxkcyA9IGZpZWxkcy5zdGFydHNXaXRoKFwiQFwiKSA/IGZpZWxkcyA6IGBAJHtmaWVsZHN9YDtcblx0XHRjb25zdCBmaWVsZEdyb3VwID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlQW5ub3RhdGlvbjxGaWVsZEdyb3VwPihmaWVsZHMpO1xuXHRcdGlmIChpc0Fubm90YXRpb25PZlR5cGU8RmllbGRHcm91cD4oZmllbGRHcm91cC5hbm5vdGF0aW9uLCBVSUFubm90YXRpb25UeXBlcy5GaWVsZEdyb3VwVHlwZSkpIHtcblx0XHRcdHJldHVybiBmaWVsZEdyb3VwLmFubm90YXRpb24uRGF0YS5yZWR1Y2UoKHByb3BlcnRpZXM6IHN0cmluZ1tdLCBmaWVsZCkgPT4ge1xuXHRcdFx0XHRpZiAoaXNEYXRhRmllbGQoZmllbGQpICYmIGlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uKGZpZWxkLlZhbHVlKSkge1xuXHRcdFx0XHRcdHByb3BlcnRpZXMucHVzaChmaWVsZC5WYWx1ZS5wYXRoKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gcHJvcGVydGllcztcblx0XHRcdH0sIFtdKTtcblx0XHR9XG5cdFx0cmV0dXJuIFtdO1xuXHR9XG5cdHJldHVybiBmaWVsZHNcblx0XHQucmVwbGFjZSgvXFxzL2csIFwiXCIpXG5cdFx0LnNwbGl0KFwiLFwiKVxuXHRcdC5tYXAoKG5hbWUpID0+IG5hbWUudHJpbSgpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uKFxuXHRsaW5lSXRlbUFubm90YXRpb246IExpbmVJdGVtIHwgdW5kZWZpbmVkLFxuXHR2aXN1YWxpemF0aW9uUGF0aDogc3RyaW5nLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdGNoZWNrQ29uZGVuc2VkTGF5b3V0ID0gdHJ1ZSxcblx0c2VsZWN0aW9uVmFyaWFudEFubm90YXRpb24/OiBTZWxlY3Rpb25WYXJpYW50VHlwZVxuKTogVGFibGVDb250cm9sQ29uZmlndXJhdGlvbiB7XG5cdGNvbnN0IF9tYW5pZmVzdFdyYXBwZXIgPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpO1xuXHRjb25zdCB0YWJsZU1hbmlmZXN0U2V0dGluZ3M6IFRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdENvbnRyb2xDb25maWd1cmF0aW9uKHZpc3VhbGl6YXRpb25QYXRoKTtcblx0Y29uc3QgdGFibGVTZXR0aW5ncyA9IHRhYmxlTWFuaWZlc3RTZXR0aW5ncz8udGFibGVTZXR0aW5ncyA/PyB7fTtcblx0Y29uc3QgZ2xvYmFsRkVNYW5pZmVzdFNldHRpbmdzID0gX21hbmlmZXN0V3JhcHBlci5nZXRTYXBGZU1hbmlmZXN0Q29uZmlndXJhdGlvbigpO1xuXHRjb25zdCBkZWZhdWx0Q3JlYXRpb25Nb2RlID1cblx0XHRnbG9iYWxGRU1hbmlmZXN0U2V0dGluZ3M/Lm1hY3Jvcz8udGFibGU/LmRlZmF1bHRDcmVhdGlvbk1vZGUgPT09IFwiSW5saW5lQ3JlYXRpb25Sb3dzXCIgPyBDcmVhdGlvbk1vZGUuSW5saW5lQ3JlYXRpb25Sb3dzIDogdW5kZWZpbmVkO1xuXHRjb25zdCBjcmVhdGlvbk1vZGU6IENyZWF0aW9uTW9kZSA9IHRhYmxlU2V0dGluZ3MuY3JlYXRpb25Nb2RlPy5uYW1lID8/IGRlZmF1bHRDcmVhdGlvbk1vZGUgPz8gQ3JlYXRpb25Nb2RlLk5ld1BhZ2U7XG5cdGNvbnN0IGVuYWJsZUF1dG9Db2x1bW5XaWR0aCA9ICFfbWFuaWZlc3RXcmFwcGVyLmlzUGhvbmUoKTtcblx0Y29uc3QgZGlzYWJsZUNvcHlUb0NsaXBib2FyZCA9IHRhYmxlU2V0dGluZ3MuZGlzYWJsZUNvcHlUb0NsaXBib2FyZDtcblx0Y29uc3QgdGVtcGxhdGVUeXBlID0gY29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKTtcblx0Y29uc3QgaXNDb25kZW5zZWRUYWJsZUxheW91dENvbXBsaWFudCA9IGNoZWNrQ29uZGVuc2VkTGF5b3V0ICYmIF9tYW5pZmVzdFdyYXBwZXIuaXNDb25kZW5zZWRMYXlvdXRDb21wbGlhbnQoKTtcblx0Y29uc3Qgb0ZpbHRlckNvbmZpZ3VyYXRpb24gPSBsaW5lSXRlbUFubm90YXRpb25cblx0XHQ/IGdldEZpbHRlckNvbmZpZ3VyYXRpb24odGFibGVTZXR0aW5ncywgbGluZUl0ZW1Bbm5vdGF0aW9uLCBjb252ZXJ0ZXJDb250ZXh0LCBzZWxlY3Rpb25WYXJpYW50QW5ub3RhdGlvbilcblx0XHQ6IHt9O1xuXHRjb25zdCBjdXN0b21WYWxpZGF0aW9uRnVuY3Rpb24gPSB0YWJsZVNldHRpbmdzLmNyZWF0aW9uTW9kZT8uY3VzdG9tVmFsaWRhdGlvbkZ1bmN0aW9uO1xuXHRjb25zdCBleHBvcnRSZXF1ZXN0U2l6ZSA9IHRhYmxlU2V0dGluZ3MuZXhwb3J0UmVxdWVzdFNpemU7XG5cdGNvbnN0IHRhYmxlVHlwZSA9IGdldFRhYmxlVHlwZShjb252ZXJ0ZXJDb250ZXh0LCB0YWJsZU1hbmlmZXN0U2V0dGluZ3MpO1xuXHRjb25zdCBhbmFseXRpY2FsQ29uZmlndXJhdGlvbiA9IHRhYmxlU2V0dGluZ3MuYW5hbHl0aWNhbENvbmZpZ3VyYXRpb247XG5cdC8vIEJ5IGRlZmF1bHQsIHBhc3RlIGlzIGVuYWJsZWQgb24gYW4gT2JqZWN0UGFnZSBhbmQgb24gYSBMaXN0UmVwb3J0IHdpdGggYSBkcmFmdCBUcmVlVGFibGVcblx0Y29uc3QgZW5hYmxlUGFzdGUgPVxuXHRcdHRhYmxlU2V0dGluZ3MuZW5hYmxlUGFzdGUgPz9cblx0XHQoY29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSA9PT0gXCJPYmplY3RQYWdlXCIgfHxcblx0XHRcdCh0YWJsZVR5cGUgPT09IFwiVHJlZVRhYmxlXCIgJiYgKGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0KCkgYXMgRW50aXR5U2V0KT8uYW5ub3RhdGlvbnMuQ29tbW9uPy5EcmFmdFJvb3QgIT09IHVuZGVmaW5lZCkpO1xuXHRjb25zdCB0YWJsZVJvd01vZGUgPSBfZ2V0VGFibGVNb2RlKHRhYmxlVHlwZSwgdGFibGVTZXR0aW5ncywgdGVtcGxhdGVUeXBlID09PSBUZW1wbGF0ZVR5cGUuTGlzdFJlcG9ydCk7XG5cdGNvbnN0IGRlZmF1bHRTY3JvbGxUaHJlc2hvbGQgPSB0YWJsZVR5cGUgIT09IFwiUmVzcG9uc2l2ZVRhYmxlXCIgPyAzMDAgOiB1bmRlZmluZWQ7XG5cdGNvbnN0IGNvbmRlbnNlZFRhYmxlTGF5b3V0ID0gX2dldENvbmRlbnNlZFRhYmxlTGF5b3V0KHRhYmxlVHlwZSwgdGFibGVTZXR0aW5ncyk7XG5cdGxldCBpbmxpbmVDcmVhdGlvblJvd3NIaWRkZW5JbkVkaXRNb2RlID0gZmFsc2U7XG5cdGlmICh0YWJsZVNldHRpbmdzLmNyZWF0aW9uTW9kZT8uaW5saW5lQ3JlYXRpb25Sb3dzSGlkZGVuSW5FZGl0TW9kZSkge1xuXHRcdGlubGluZUNyZWF0aW9uUm93c0hpZGRlbkluRWRpdE1vZGUgPVxuXHRcdFx0dHlwZW9mIHRhYmxlU2V0dGluZ3MuY3JlYXRpb25Nb2RlPy5pbmxpbmVDcmVhdGlvblJvd3NIaWRkZW5JbkVkaXRNb2RlID09PSBcInN0cmluZ1wiXG5cdFx0XHRcdD8gdGFibGVTZXR0aW5ncy5jcmVhdGlvbk1vZGU/LmlubGluZUNyZWF0aW9uUm93c0hpZGRlbkluRWRpdE1vZGUgPT09IFwidHJ1ZVwiXG5cdFx0XHRcdDogdGFibGVTZXR0aW5ncy5jcmVhdGlvbk1vZGU/LmlubGluZUNyZWF0aW9uUm93c0hpZGRlbkluRWRpdE1vZGU7XG5cdH1cblx0bGV0IHVzZVRleHRGb3JOb0RhdGFNZXNzYWdlczogc3RyaW5nO1xuXHRpZiAoY29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSA9PT0gXCJMaXN0UmVwb3J0XCIpIHtcblx0XHR1c2VUZXh0Rm9yTm9EYXRhTWVzc2FnZXMgPSBcImlsbHVzdHJhdGVkTWVzc2FnZS1BdXRvXCI7XG5cdH0gZWxzZSB7XG5cdFx0dXNlVGV4dEZvck5vRGF0YU1lc3NhZ2VzID0gX21hbmlmZXN0V3JhcHBlci5nZXRVc2VUZXh0Rm9yTm9EYXRhTWVzc2FnZXMoKSA/IFwidGV4dFwiIDogXCJpbGx1c3RyYXRlZE1lc3NhZ2UtRXh0cmFTbWFsbFwiO1xuXHR9XG5cdGNvbnN0IG9Db25maWd1cmF0aW9uID0ge1xuXHRcdC8vIElmIG5vIGNyZWF0ZUF0RW5kIGlzIHNwZWNpZmllZCBpdCB3aWxsIGJlIGZhbHNlIGZvciBJbmxpbmUvQ3JlYXRpb25EaWFsb2cgY3JlYXRlIGFuZCB0cnVlIG90aGVyd2lzZVxuXHRcdGNyZWF0ZUF0RW5kOlxuXHRcdFx0dGFibGVTZXR0aW5ncy5jcmVhdGlvbk1vZGU/LmNyZWF0ZUF0RW5kICE9PSB1bmRlZmluZWRcblx0XHRcdFx0PyB0YWJsZVNldHRpbmdzLmNyZWF0aW9uTW9kZT8uY3JlYXRlQXRFbmRcblx0XHRcdFx0OiAhW0NyZWF0aW9uTW9kZS5JbmxpbmUsIENyZWF0aW9uTW9kZS5DcmVhdGlvbkRpYWxvZ10uaW5jbHVkZXMoY3JlYXRpb25Nb2RlKSxcblx0XHRjcmVhdGlvbk1vZGU6IGNyZWF0aW9uTW9kZSxcblx0XHRjcmVhdGlvbkRpYWxvZ0ZpZWxkczpcblx0XHRcdGNyZWF0aW9uTW9kZSA9PT0gQ3JlYXRpb25Nb2RlLkNyZWF0aW9uRGlhbG9nXG5cdFx0XHRcdD8gZ2V0RmllbGRMaXN0KHRhYmxlU2V0dGluZ3MuY3JlYXRpb25Nb2RlPy5jcmVhdGlvbkZpZWxkcywgY29udmVydGVyQ29udGV4dClcblx0XHRcdFx0OiB1bmRlZmluZWQsXG5cdFx0Y3VzdG9tVmFsaWRhdGlvbkZ1bmN0aW9uOiBjdXN0b21WYWxpZGF0aW9uRnVuY3Rpb24sXG5cdFx0aGFzRGF0YVN0YXRlSW5kaWNhdG9yRmlsdGVyOiB0ZW1wbGF0ZVR5cGUgPT09IFRlbXBsYXRlVHlwZS5MaXN0UmVwb3J0LFxuXHRcdC8vIGlmIGEgY3VzdG9tIHZhbGlkYXRpb24gZnVuY3Rpb24gaXMgcHJvdmlkZWQsIGRpc2FibGVBZGRSb3dCdXR0b25Gb3JFbXB0eURhdGEgc2hvdWxkIG5vdCBiZSBjb25zaWRlcmVkLCBpLmUuIHNldCB0byBmYWxzZVxuXHRcdGRpc2FibGVBZGRSb3dCdXR0b25Gb3JFbXB0eURhdGE6ICFjdXN0b21WYWxpZGF0aW9uRnVuY3Rpb24gPyAhIXRhYmxlU2V0dGluZ3MuY3JlYXRpb25Nb2RlPy5kaXNhYmxlQWRkUm93QnV0dG9uRm9yRW1wdHlEYXRhIDogZmFsc2UsXG5cdFx0ZW5hYmxlQXV0b0NvbHVtbldpZHRoOiBlbmFibGVBdXRvQ29sdW1uV2lkdGgsXG5cdFx0ZW5hYmxlUGFzdGluZ09mQ29tcHV0ZWRQcm9wZXJ0aWVzOiB0YWJsZVNldHRpbmdzLmVuYWJsZVBhc3RpbmdPZkNvbXB1dGVkUHJvcGVydGllcyxcblx0XHRpZ25vcmVkRmllbGRzOiB0YWJsZVNldHRpbmdzLmlnbm9yZWRGaWVsZHMsXG5cdFx0cmVhZE9ubHk6IHRhYmxlU2V0dGluZ3MucmVhZE9ubHksXG5cdFx0ZW5hYmxlRXhwb3J0OiBfZ2V0RW5hYmxlRXhwb3J0KHRhYmxlU2V0dGluZ3MsIGNvbnZlcnRlckNvbnRleHQsIGVuYWJsZVBhc3RlKSxcblx0XHRhbmFseXRpY2FsQ29uZmlndXJhdGlvbixcblx0XHRmcm96ZW5Db2x1bW5Db3VudDogX2dldEZyb3plbkNvbHVtbkNvdW50KHRhYmxlU2V0dGluZ3MpLFxuXHRcdHdpZHRoSW5jbHVkaW5nQ29sdW1uSGVhZGVyOiBfZ2V0V2lkdGhJbmNsdWRpbmdDb2x1bW5IZWFkZXIodGFibGVTZXR0aW5ncyksXG5cdFx0ZW5hYmxlRnVsbFNjcmVlbjogX2dldEZ1bGxTY3JlZW5CYXNlZE9uRGV2aWNlKHRhYmxlU2V0dGluZ3MsIGNvbnZlcnRlckNvbnRleHQsIF9tYW5pZmVzdFdyYXBwZXIuaXNQaG9uZSgpKSxcblx0XHRtYXNzRWRpdDogZ2V0TWFzc0VkaXRTZXR0aW5ncyh0YWJsZVNldHRpbmdzLCBjb252ZXJ0ZXJDb250ZXh0KSxcblx0XHRlbmFibGVBZGRDYXJkVG9JbnNpZ2h0czogdGFibGVTZXR0aW5ncz8uZW5hYmxlQWRkQ2FyZFRvSW5zaWdodHMsXG5cdFx0ZW5hYmxlUGFzdGU6IGVuYWJsZVBhc3RlLFxuXHRcdGRpc2FibGVDb3B5VG9DbGlwYm9hcmQ6IGRpc2FibGVDb3B5VG9DbGlwYm9hcmQsXG5cdFx0aGVhZGVyVmlzaWJsZTogdHJ1ZSxcblx0XHRoZWFkZXI6IHRhYmxlU2V0dGluZ3MuaGVhZGVyLFxuXHRcdG11bHRpU2VsZWN0TW9kZTogX2dldE11bHRpU2VsZWN0TW9kZSh0YWJsZVNldHRpbmdzLCB0YWJsZVR5cGUsIGNvbnZlcnRlckNvbnRleHQpLFxuXHRcdHNlbGVjdGlvbkxpbWl0OiBfZ2V0VGFibGVTZWxlY3Rpb25MaW1pdCh0YWJsZVNldHRpbmdzKSxcblx0XHRpbmxpbmVDcmVhdGlvblJvd0NvdW50OiBfZ2V0VGFibGVJbmxpbmVDcmVhdGlvblJvd0NvdW50KHRhYmxlU2V0dGluZ3MpLFxuXHRcdGlubGluZUNyZWF0aW9uUm93c0hpZGRlbkluRWRpdE1vZGU6IGlubGluZUNyZWF0aW9uUm93c0hpZGRlbkluRWRpdE1vZGUsXG5cdFx0c2hvd1Jvd0NvdW50OiB0YWJsZVNldHRpbmdzPy5xdWlja1ZhcmlhbnRTZWxlY3Rpb24/LnBhdGhzID8gZmFsc2UgOiAhX21hbmlmZXN0V3JhcHBlci5nZXRWaWV3Q29uZmlndXJhdGlvbigpPy5zaG93Q291bnRzLFxuXHRcdHR5cGU6IHRhYmxlVHlwZSxcblx0XHRkaXNhYmxlUmVxdWVzdENhY2hlOiBnZXRPcHRpbWlzdGljQmF0Y2hTZXR0aW5nc0Zyb21NYW5pZmVzdCh0YWJsZU1hbmlmZXN0U2V0dGluZ3MpLFxuXHRcdHVzZUNvbmRlbnNlZFRhYmxlTGF5b3V0OiBjb25kZW5zZWRUYWJsZUxheW91dCAmJiBpc0NvbmRlbnNlZFRhYmxlTGF5b3V0Q29tcGxpYW50LFxuXHRcdGlzQ29tcGFjdFR5cGU6IF9tYW5pZmVzdFdyYXBwZXIuaXNDb21wYWN0VHlwZSgpLFxuXHRcdGV4cG9ydFJlcXVlc3RTaXplOiBleHBvcnRSZXF1ZXN0U2l6ZSxcblx0XHRlbmFibGVVcGxvYWRQbHVnaW46ICEhY29udmVydGVyQ29udGV4dC5nZXRBbm5vdGF0aW9uRW50aXR5VHlwZSgpLmFubm90YXRpb25zPy5VST8uTWVkaWFSZXNvdXJjZT8uU3RyZWFtLFxuXHRcdG1vZGVGb3JOb0RhdGFNZXNzYWdlOiB1c2VUZXh0Rm9yTm9EYXRhTWVzc2FnZXMsXG5cdFx0c2Nyb2xsVGhyZXNob2xkOiB0YWJsZVNldHRpbmdzLnNjcm9sbFRocmVzaG9sZCA/PyBkZWZhdWx0U2Nyb2xsVGhyZXNob2xkXG5cdH07XG5cblx0Y29uc3QgdGFibGVDb25maWd1cmF0aW9uOiBUYWJsZUNvbnRyb2xDb25maWd1cmF0aW9uID0geyAuLi5vQ29uZmlndXJhdGlvbiwgLi4udGFibGVSb3dNb2RlLCAuLi5vRmlsdGVyQ29uZmlndXJhdGlvbiB9O1xuXHR0YWJsZUNvbmZpZ3VyYXRpb24uYmVmb3JlUmViaW5kVGFibGUgPSB0YWJsZVNldHRpbmdzLmJlZm9yZVJlYmluZFRhYmxlO1xuXHR0YWJsZUNvbmZpZ3VyYXRpb24uc2VsZWN0aW9uQ2hhbmdlID0gdGFibGVTZXR0aW5ncy5zZWxlY3Rpb25DaGFuZ2U7XG5cdHRhYmxlQ29uZmlndXJhdGlvbi5yb3dQcmVzcyA9IHRhYmxlU2V0dGluZ3Mucm93UHJlc3M7XG5cdGlmICh0YWJsZVR5cGUgPT09IFwiVHJlZVRhYmxlXCIpIHtcblx0XHR1cGRhdGVUcmVlVGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24odGFibGVDb25maWd1cmF0aW9uLCB0YWJsZVNldHRpbmdzLCBjb252ZXJ0ZXJDb250ZXh0KTtcblx0fVxuXG5cdGlmICh0YWJsZVNldHRpbmdzLmhlYWRlclZpc2libGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdHRhYmxlQ29uZmlndXJhdGlvbi5oZWFkZXJWaXNpYmxlID0gdGFibGVTZXR0aW5ncy5oZWFkZXJWaXNpYmxlO1xuXHR9XG5cblx0aWYgKHRhYmxlQ29uZmlndXJhdGlvbi5jcmVhdGlvbk1vZGUgPT09IENyZWF0aW9uTW9kZS5FeHRlcm5hbCkge1xuXHRcdHRhYmxlQ29uZmlndXJhdGlvbi5vdXRib3VuZENyZWF0aW9uID0gdGFibGVTZXR0aW5ncy5jcmVhdGlvbk1vZGU/Lm91dGJvdW5kO1xuXHR9XG5cblx0cmV0dXJuIHRhYmxlQ29uZmlndXJhdGlvbjtcbn1cblxuZnVuY3Rpb24gZ2V0VGFibGVUeXBlKFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdHRhYmxlTWFuaWZlc3RTZXR0aW5ncz86IFRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uXG4pOiBUYWJsZVR5cGUge1xuXHRpZiAodGFibGVNYW5pZmVzdFNldHRpbmdzPy50YWJsZVNldHRpbmdzPy50eXBlKSB7XG5cdFx0Ly8gaW4gY2FzZSB0aGUgYXBwbGljYXRpb24gc3BlY2lmaWVkIGEgdGFibGUgdHlwZSB3ZSB3aWxsIHVzZSB0aGlzIG9uZVxuXHRcdHJldHVybiB0YWJsZU1hbmlmZXN0U2V0dGluZ3MudGFibGVTZXR0aW5ncy50eXBlO1xuXHR9XG5cblx0Ly8gZGVmYXVsdCBpcyB0aGUgUmVzcG9uc2l2ZVRhYmxlXG5cdHJldHVybiBcIlJlc3BvbnNpdmVUYWJsZVwiO1xufVxuXG5leHBvcnQgZGVmYXVsdCB7XG5cdGdldFRhYmxlQWN0aW9ucyxcblx0Y3JlYXRlVGFibGVWaXN1YWxpemF0aW9uLFxuXHRjcmVhdGVEZWZhdWx0VGFibGVWaXN1YWxpemF0aW9uLFxuXHRnZXRDYXBhYmlsaXR5UmVzdHJpY3Rpb24sXG5cdGdldFNlbGVjdGlvbk1vZGUsXG5cdGdldFAxM25Nb2RlLFxuXHRnZXRTdGFuZGFyZEFjdGlvbnNDb25maWd1cmF0aW9uLFxuXHRnZXRUYWJsZUFubm90YXRpb25Db25maWd1cmF0aW9uLFxuXHRzcGxpdFBhdGgsXG5cdGdldFNlbGVjdGlvblZhcmlhbnRDb25maWd1cmF0aW9uLFxuXHRnZXRUYWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbixcblx0dXBkYXRlVGFibGVWaXN1YWxpemF0aW9uRm9yVHlwZSxcblx0Y3JlYXRlUmVxdWVzdGVkUHJvcGVydGllcyxcblx0Z2V0TmF2aWdhdGlvblRhcmdldFBhdGgsXG5cdGdldEN1c3RvbUZ1bmN0aW9uSW5mb1xufTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQW1GQTtFQUVBO0VBcUpBO0FB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QjtNQUM5Q2EsZUFBZSxFQUFFM1gsYUFBYSxDQUFDMlgsZUFBZSxJQUFJZjtJQUNuRCxDQUFDO0lBRUQsTUFBTTdELGtCQUE2QyxHQUFHO01BQUUsR0FBR2lFLGNBQWM7TUFBRSxHQUFHTCxZQUFZO01BQUUsR0FBR0o7SUFBcUIsQ0FBQztJQUNySHhELGtCQUFrQixDQUFDNkUsaUJBQWlCLEdBQUc1WCxhQUFhLENBQUM0WCxpQkFBaUI7SUFDdEU3RSxrQkFBa0IsQ0FBQzhFLGVBQWUsR0FBRzdYLGFBQWEsQ0FBQzZYLGVBQWU7SUFDbEU5RSxrQkFBa0IsQ0FBQytFLFFBQVEsR0FBRzlYLGFBQWEsQ0FBQzhYLFFBQVE7SUFDcEQsSUFBSS9YLFNBQVMsS0FBSyxXQUFXLEVBQUU7TUFDOUIrUyxvQ0FBb0MsQ0FBQ0Msa0JBQWtCLEVBQUUvUyxhQUFhLEVBQUVqVyxnQkFBZ0IsQ0FBQztJQUMxRjtJQUVBLElBQUlpVyxhQUFhLENBQUN6RixhQUFhLEtBQUt6TyxTQUFTLEVBQUU7TUFDOUNpbkIsa0JBQWtCLENBQUN4WSxhQUFhLEdBQUd5RixhQUFhLENBQUN6RixhQUFhO0lBQy9EO0lBRUEsSUFBSXdZLGtCQUFrQixDQUFDOVgsWUFBWSxLQUFLMEosWUFBWSxDQUFDQyxRQUFRLEVBQUU7TUFDOURtTyxrQkFBa0IsQ0FBQ3pPLGdCQUFnQixHQUFHdEUsYUFBYSxDQUFDL0UsWUFBWSxFQUFFc0osUUFBUTtJQUMzRTtJQUVBLE9BQU93TyxrQkFBa0I7RUFDMUI7RUFBQ3BrQixRQUFBLENBQUF3Syw2QkFBQSxHQUFBQSw2QkFBQTtFQUVELFNBQVN1ZCxZQUFZQSxDQUNwQjNzQixnQkFBeUQsRUFDekQrVixxQkFBa0QsRUFDdEM7SUFDWixJQUFJQSxxQkFBcUIsRUFBRUUsYUFBYSxFQUFFbFYsSUFBSSxFQUFFO01BQy9DO01BQ0EsT0FBT2dWLHFCQUFxQixDQUFDRSxhQUFhLENBQUNsVixJQUFJO0lBQ2hEOztJQUVBO0lBQ0EsT0FBTyxpQkFBaUI7RUFDekI7RUFBQyxPQUVjO0lBQ2RsQixlQUFlO0lBQ2ZrUCx3QkFBd0I7SUFDeEIrQiwrQkFBK0I7SUFDL0JzRSx3QkFBd0I7SUFDeEJJLGdCQUFnQjtJQUNoQnVKLFdBQVc7SUFDWG5QLCtCQUErQjtJQUMvQkUsK0JBQStCO0lBQy9CVCxTQUFTO0lBQ1Q0VixnQ0FBZ0M7SUFDaEM3Viw2QkFBNkI7SUFDN0J2SCwrQkFBK0I7SUFDL0J1RCx5QkFBeUI7SUFDekJxQyx1QkFBdUI7SUFDdkIrYjtFQUNELENBQUM7QUFBQSIsImlnbm9yZUxpc3QiOltdfQ==
|