From 36835c9f67d9846dd45c282396f726ceaf3dabdb Mon Sep 17 00:00:00 2001 From: Salih Altun Date: Fri, 28 May 2021 14:39:17 +0300 Subject: [PATCH] SBGN Brick multimer edge connection workaround Since cytoscape automatically changes the rendered bounding box without changing the node's data properties, multimer edges on sbgn bricks were rendering tilted. This commit is a workaround to make the edges look better in previews. This is not a complete solution to the problem. Addresses https://github.com/iVis-at-Bilkent/newt/issues/662. --- chise.js | 27 +++++++++++++++++-- .../element-utilities-extender-factory.js | 17 +++++++++++- 2 files changed, 41 insertions(+), 3 deletions(-) diff --git a/chise.js b/chise.js index 350ff5a..4e270c0 100644 --- a/chise.js +++ b/chise.js @@ -1036,6 +1036,7 @@ module.exports = function () { var widthPerChar = 6; var tilingPaddingVertical = 15; var tilingPaddingHorizontal = 15; + var multimerOffset = 6; cy.startBatch(); if (!elementUtilities.getMapType()) { @@ -1139,6 +1140,11 @@ module.exports = function () { var regulatorEdgeType = regulator.edgeType; var regulatorMultimer = regulator.multimer; var xPosOfRegulator = processPosition.x; + + if (regulatorMultimer.enabled && orientation === "horizontal") { + xPosOfRegulator -= multimerOffset; + } + var yPosOfRegulator = processPosition.y - (processHeight / 2 + regulatorHeight / 2 + edgeLength); nodePosition = { x: xPosOfRegulator, @@ -1211,6 +1217,7 @@ module.exports = function () { var processPortsOrdering = orientation === "vertical" ? "T-to-B" : "L-to-R"; var minInfoboxDimension = 20; var widthPerChar = 6; + var multimerOffset = 6; cy.startBatch(); if (!elementUtilities.getMapType()) { @@ -1296,6 +1303,11 @@ module.exports = function () { var regulatorType = regulator.type; var regulatorEdgeType = regulator.edgeType; var xPosOfRegulator = processPosition.x; + + if (regulatorMultimer.enabled && orientation === "horizontal") { + xPosOfRegulator -= multimerOffset; + } + var yPosOfRegulator = processPosition.y - (processHeight / 2 + regulatorHeight / 2 + edgeLength); nodePosition = { x: xPosOfRegulator, @@ -1370,6 +1382,7 @@ module.exports = function () { var processPortsOrdering = orientation === "vertical" ? "T-to-B" : "L-to-R"; var minInfoboxDimension = 20; var widthPerChar = 6; + var multimerOffset = 6; cy.startBatch(); if (!elementUtilities.getMapType()) { @@ -1525,6 +1538,11 @@ module.exports = function () { var regulatorName = regulator.name; var regulatorType = regulator.type; var xPosOfRegulator = processPosition.x; + + if (regulatorMultimer.enabled && orientation === "horizontal") { + xPosOfRegulator -= multimerOffset; + } + var yPosOfRegulator = processPosition.y - (processHeight / 2 + regulatorHeight / 2 + edgeLength); nodePosition = { x: xPosOfRegulator, @@ -1606,11 +1624,11 @@ module.exports = function () { y: cy.height() / 2 }); var tilingPaddingVertical = 15; - var tilingPaddingHorizontal = 15; var edgeLength = 30; var processLeftSideEdgeType = reversible ? "production" : "consumption"; var processRightSideEdgeType = "production"; var processPortsOrdering = orientation === "vertical" ? "T-to-B" : "L-to-R"; + var multimerOffset = 6; cy.startBatch(); if (!elementUtilities.getMapType()) { @@ -1710,6 +1728,11 @@ module.exports = function () { var regulatorName = regulator.name; var regulatorType = regulator.type; var xPosOfRegulator = processPosition.x; + + if (regulatorMultimer.enabled && orientation === "horizontal") { + xPosOfRegulator -= multimerOffset; + } + var yPosOfRegulator = processPosition.y - (processHeight / 2 + regulatorHeight / 2 + edgeLength); var _nodePosition = { x: xPosOfRegulator, @@ -8690,4 +8713,4 @@ module.exports = isEqual; /******/ })() ; }); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9jaGlzZS93ZWJwYWNrL3VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24iLCJ3ZWJwYWNrOi8vY2hpc2UvLi9zcmMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vY2hpc2UvLi9zcmMvdXRpbGl0aWVzL2VsZW1lbnQtdXRpbGl0aWVzLWV4dGVuZGVyLWZhY3RvcnkuanMiLCJ3ZWJwYWNrOi8vY2hpc2UvLi9zcmMvdXRpbGl0aWVzL2xpYi11dGlsaXRpZXMuanMiLCJ3ZWJwYWNrOi8vY2hpc2UvLi9zcmMvdXRpbGl0aWVzL21haW4tdXRpbGl0aWVzLWZhY3RvcnkuanMiLCJ3ZWJwYWNrOi8vY2hpc2UvLi9zcmMvdXRpbGl0aWVzL29wdGlvbi11dGlsaXRpZXMtZmFjdG9yeS5qcyIsIndlYnBhY2s6Ly9jaGlzZS8uL3NyYy91dGlsaXRpZXMvcmVnaXN0ZXItdW5kby1yZWRvLWFjdGlvbnMtZmFjdG9yeS5qcyIsIndlYnBhY2s6Ly9jaGlzZS8uL3NyYy91dGlsaXRpZXMvc2JnbnZpei1pbnN0YW5jZS11dGlsaXRpZXMtZmFjdG9yeS5qcyIsIndlYnBhY2s6Ly9jaGlzZS8uL3NyYy91dGlsaXRpZXMvdG9wb2xvZ3ktZ3JvdXBpbmctZmFjdG9yeS5qcyIsIndlYnBhY2s6Ly9jaGlzZS8uL3NyYy91dGlsaXRpZXMvdXItYWN0aW9uLWZ1bmN0aW9ucy1leHRlbmRlci1mYWN0b3J5LmpzIiwid2VicGFjazovL2NoaXNlLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC5pc2VxdWFsL2luZGV4LmpzIiwid2VicGFjazovL2NoaXNlL3dlYnBhY2svYm9vdHN0cmFwIiwid2VicGFjazovL2NoaXNlL3dlYnBhY2svcnVudGltZS9nbG9iYWwiLCJ3ZWJwYWNrOi8vY2hpc2Uvd2VicGFjay9ydW50aW1lL25vZGUgbW9kdWxlIGRlY29yYXRvciIsIndlYnBhY2s6Ly9jaGlzZS93ZWJwYWNrL3N0YXJ0dXAiXSwibmFtZXMiOlsiY2hpc2UiLCJfb3B0aW9ucyIsInBhcmFtIiwibGlicyIsInJlcXVpcmUiLCJvcHRpb25VdGlsaXRpZXMiLCJvcHRpb25zIiwiZXh0ZW5kT3B0aW9ucyIsInNiZ252aXpJbnN0YW5jZVV0aWxpdGllcyIsInNiZ252aXpJbnN0YW5jZSIsInJlZ2lzdGVyVW5kb1JlZG9BY3Rpb25zIiwibWFpblV0aWxpdGllcyIsImVsZW1lbnRVdGlsaXRpZXNFeHRlbmRlciIsInVuZG9SZWRvQWN0aW9uRnVuY3Rpb25zRXh0ZW5kZXIiLCJzaWZUb3BvbG9neUdyb3VwaW5nIiwiZWxlbWVudFV0aWxpdGllcyIsInVuZG9SZWRvQWN0aW9uRnVuY3Rpb25zIiwic2hvdWxkQXBwbHkiLCJtYXBUeXBlIiwibWV0YUVkZ2VJZGVudGlmaWVyIiwibG9ja0dyYXBoVG9wb2xvZ3kiLCJhcGkiLCJwcm9wIiwiZ2V0U2JnbnZpekluc3RhbmNlIiwiZ2V0SW5zdGFuY2UiLCJyZWdpc3RlciIsIl9saWJzIiwialF1ZXJ5IiwiY3l0b3NjYXBlIiwic2JnbnZpeiIsInNhdmVBcyIsImZpbGVzYXZlciIsImxpYlV0aWxpdGllcyIsInNldExpYnMiLCJtb2R1bGUiLCJleHBvcnRzIiwiJCIsImN5IiwiZ2V0T3B0aW9ucyIsImdldEN5IiwiZXh0ZW5kIiwiYWRkTm9kZSIsIngiLCJ5Iiwibm9kZVBhcmFtcyIsImlkIiwicGFyZW50IiwidmlzaWJpbGl0eSIsInNiZ25jbGFzcyIsImxhbmd1YWdlIiwiY3NzIiwiZGVmYXVsdFdpZHRoIiwiZGVmYXVsdEhlaWdodCIsImRhdGEiLCJiYm94IiwidyIsImgiLCJzdGF0ZXNhbmRpbmZvcyIsInBvcnRzIiwiZ2VuZXJhdGVOb2RlSWQiLCJleHRlbmROb2RlRGF0YVdpdGhDbGFzc0RlZmF1bHRzIiwiZGVmYXVsdHMiLCJnZXREZWZhdWx0UHJvcGVydGllcyIsImVsZXMiLCJhZGQiLCJncm91cCIsInBvc2l0aW9uIiwibmV3Tm9kZSIsImxlbmd0aCIsIm9yZGVyaW5nIiwic2V0UG9ydHNPcmRlcmluZyIsImNhbkhhdmVNdWx0aXBsZVVuaXRPZkluZm9ybWF0aW9uIiwidW9pX29iaiIsImNsYXp6IiwibGFiZWwiLCJ0ZXh0IiwiYWRkU3RhdGVPckluZm9Cb3giLCJiZ0ltYWdlIiwic2F2ZVVuaXRzIiwibm9kZSIsInRlbXBEYXRhIiwiaW5kZXgiLCJmb3JFYWNoIiwiZWxlIiwicHVzaCIsImFuY2hvclNpZGUiLCJyZXN0b3JlVW5pdHMiLCJ1bmRlZmluZWQiLCJtb2RpZnlVbml0cyIsImluc3RhbmNlIiwiY2xhc3NlcyIsIkF1eFVuaXRMYXlvdXQiLCJhZGRFZGdlIiwic291cmNlIiwidGFyZ2V0IiwiZWRnZVBhcmFtcyIsImdyb3VwSUQiLCJPYmplY3QiLCJrZXlzIiwiZ2VuZXJhdGVFZGdlSWQiLCJjYW5IYXZlU0JHTkNhcmRpbmFsaXR5IiwiY2FyZGluYWxpdHkiLCJzb3VyY2VOb2RlIiwiZ2V0RWxlbWVudEJ5SWQiLCJ0YXJnZXROb2RlIiwic291cmNlSGFzUG9ydHMiLCJ0YXJnZXRIYXNQb3J0cyIsInBvcnRzb3VyY2UiLCJwb3J0dGFyZ2V0IiwiZ2V0SU9Qb3J0SWRzIiwibm9kZUlucHV0UG9ydElkIiwibm9kZU91dHB1dFBvcnRJZCIsIm5vZGVQb3J0c09yZGVyaW5nIiwiZ2V0UG9ydHNPcmRlcmluZyIsIm5vZGVQb3J0cyIsImxlZnRQb3J0SWQiLCJyaWdodFBvcnRJZCIsInRvcFBvcnRJZCIsImJvdHRvbVBvcnRJZCIsImlucHV0UG9ydElkIiwib3V0cHV0UG9ydElkIiwic291cmNlTm9kZUlucHV0UG9ydElkIiwic291cmNlTm9kZU91dHB1dFBvcnRJZCIsInRhcmdldE5vZGVJbnB1dFBvcnRJZCIsInRhcmdldE5vZGVPdXRwdXRQb3J0SWQiLCJpb1BvcnRzIiwiaXNNb2R1bGF0aW9uQXJjQ2xhc3MiLCJpc0FGQXJjQ2xhc3MiLCJzcmNDbGFzcyIsInRndENsYXNzIiwiaXNTb3VyY2VMb2dpY2FsT3AiLCJpc1RhcmdldExvZ2ljYWxPcCIsIm5ld0VkZ2UiLCJhZGRQcm9jZXNzV2l0aENvbnZlbmllbnRFZGdlcyIsIl9zb3VyY2UiLCJfdGFyZ2V0IiwicHJvY2Vzc1BhcmVudCIsImNvbGxlY3Rpb24iLCJjb21tb25BbmNlc3RvcnMiLCJmaXJzdCIsInByb2Nlc3MiLCJ4ZGlmZiIsInlkaWZmIiwiTWF0aCIsImFicyIsImVkZ2VCdHdTcmMiLCJlZGdlQnR3VGd0IiwiY3JlYXRlQ29tcG91bmRGb3JHaXZlbk5vZGVzIiwibm9kZXNUb01ha2VDb21wb3VuZCIsImNvbXBvdW5kVHlwZSIsIm9sZFBhcmVudElkIiwiaSIsIm5ld0NvbXBvdW5kIiwibmV3Q29tcG91bmRJZCIsIm5ld0VsZXMiLCJjaGFuZ2VQYXJlbnQiLCJ1bmlvbiIsImNyZWF0ZVRyYW5zbGF0aW9uUmVhY3Rpb24iLCJtUm5hTmFtZSIsInByb3RlaW5OYW1lIiwicHJvY2Vzc1Bvc2l0aW9uIiwiZWRnZUxlbmd0aCIsImRlZmF1bHRQcm9jZXNzUHJvcGVydGllcyIsImRlZmF1bHRTb3VyY2VBbmRTaW5rUHJvcGVydGllcyIsImRlZmF1bHROdWNsZWljQWNpZEZlYXR1cmVQcm9wZXJ0aWVzIiwiZGVmYXVsdE1hY3JvbW9sZWN1bGVQcm9wZXJ0aWVzIiwibWFjcm9tb2xlY3VsZVdpZHRoIiwid2lkdGgiLCJzb3VyY2VBbmRTaW5rV2lkdGgiLCJudWNsZWljQWNpZEZlYXR1cmVIZWlnaHQiLCJoZWlnaHQiLCJwcm9jZXNzV2lkdGgiLCJwcm9jZXNzSGVpZ2h0IiwiY29udmVydFRvTW9kZWxQb3NpdGlvbiIsInN0YXJ0QmF0Y2giLCJnZXRNYXBUeXBlIiwic2V0TWFwVHlwZSIsInByb2Nlc3NOb2RlIiwieFBvc09mU291cmNlQW5kU2lua05vZGUiLCJ5UG9zT2ZTb3VyY2VBbmRTaW5rTm9kZSIsInNvdXJjZUFuZFNpbmtOb2RlIiwiY29uc3VtcHRpb25FZGdlIiwieFBvc09mbVJuYU5vZGUiLCJ5UG9zT2ZtUm5hTm9kZSIsIm1SbmFOb2RlIiwiaW5mb2JveE9iamVjdE9mR2VuZSIsIm5lY2Vzc2FyeVN0aW11bGF0aW9uRWRnZSIsInhQb3NPZlByb3RlaW5Ob2RlIiwieVBvc3RPZlByb3RlaW5Ob2RlIiwicHJvdGVpbk5vZGUiLCJwcm9kdWN0aW9uRWRnZSIsImVuZEJhdGNoIiwiZWxlbWVudHMiLCJyZW1vdmVEYXRhIiwidW5zZWxlY3QiLCJzZWxlY3QiLCJjcmVhdGVUcmFuc2NyaXB0aW9uUmVhY3Rpb24iLCJnZW5lTmFtZSIsIm51Y2xlaWNBY2lkRmVhdHVyZVdpZHRoIiwieFBvc09mR2VuZU5vZGUiLCJ5UG9zT2ZHZW5lTm9kZSIsImdlbmVOb2RlIiwieVBvc3RPZm1SbmFOb2RlIiwiaW5mb2JveE9iamVjdE9mbVJuYSIsInJvdGF0ZTkwIiwicG9pbnQiLCJjZW50ZXIiLCJyZWxhdGl2ZVgiLCJyZWxhdGl2ZVkiLCJyZWxhdGl2ZVJvdGF0ZWRYIiwicmVsYXRpdmVSb3RhdGVkWSIsInJlc3VsdFgiLCJyZXN1bHRZIiwiY3JlYXRlVHJhbnNsYXRpb24iLCJyZWd1bGF0b3JMYWJlbCIsIm91dHB1dExhYmVsIiwib3JpZW50YXRpb24iLCJkZWZhdWx0TWFjcm9tb2xlY3VsZVByb3BldGllcyIsInZlcnRpY2FsIiwicHJvY2Vzc1BvcnRzT3JkZXJpbmciLCJtaW5JbmZvYm94RGltZW5zaW9uIiwid2lkdGhQZXJDaGFyIiwicmVndWxhdG9ySW5mb2JveExhYmVsIiwieFBvc09mSW5wdXQiLCJ4UG9zT2ZPdXRwdXQiLCJ5UG9zT2ZJbnB1dCIsInlQb3NPZk91dHB1dCIsIm5vZGVQb3NpdGlvbiIsImlucHV0Tm9kZSIsImlucHV0RWRnZSIsIm91dHB1dE5vZGUiLCJvdXRwdXRFZGdlIiwieFBvc09mUmVndWxhdG9yIiwiZGltZW5zaW9uIiwieVBvc09mUmVndWxhdG9yIiwicmVndWxhdG9yTm9kZSIsImluZm9ib3hPYmplY3QiLCJtYXgiLCJyZWd1bGF0b3JFZGdlIiwiY3JlYXRlVHJhbnNjcmlwdGlvbiIsIm91dHB1dEluZm9ib3hMYWJlbCIsImNyZWF0ZURlZ3JhZGF0aW9uIiwibWFjcm9tb2xlY3VsZSIsIm1hY3JvbW9sZWN1bGVOYW1lIiwibmFtZSIsImNyZWF0ZUNvbXBsZXhQcm90ZWluRm9ybWF0aW9uIiwicHJvdGVpbkxhYmVscyIsImNvbXBsZXhMYWJlbCIsInJlZ3VsYXRvciIsInJldmVyc2UiLCJoYXNSZWd1bGF0b3IiLCJkZWZhdWx0UmVndWxhdG9yUHJvcGVydGllcyIsInR5cGUiLCJtYWNyb21vbGVjdWxlSGVpZ2h0IiwicmVndWxhdG9ySGVpZ2h0IiwidGlsaW5nUGFkZGluZ1ZlcnRpY2FsIiwidGlsaW5nUGFkZGluZ0hvcml6b250YWwiLCJvZmZzZXRYIiwieFBvc09mUHJvdGVpbiIsInByb3RlaW5Db3VudCIsIm1hY3JvbW9sZWN1bGVEaW1lbnNpb24iLCJzdGVwT2Zmc2V0Iiwib2Zmc2V0WSIsImhvcml6b250YWxPZmZzZXRYIiwieVBvc09mUHJvdGVpbiIsImVkZ2VDbGFzcyIsImVkZ2UiLCJjb21wbGV4UG9zIiwiY29tcGxleCIsImNvbXBsZXhFZGdlIiwicmVndWxhdG9yTmFtZSIsInJlZ3VsYXRvclR5cGUiLCJyZWd1bGF0b3JFZGdlVHlwZSIsImVkZ2VUeXBlIiwicmVndWxhdG9yTXVsdGltZXIiLCJtdWx0aW1lciIsImVuYWJsZWQiLCJzZXRNdWx0aW1lclN0YXR1cyIsImluZm9ib3hMYWJlbCIsImNyZWF0ZU11bHRpbWVyaXphdGlvbiIsIm1hY3JvbW9sZWN1bGVNdWx0aW1lckNhcmRpbmFsaXR5IiwiY3JlYXRlQ29udmVyc2lvbiIsImlucHV0SW5mb2JveExhYmVscyIsIm91dHB1dEluZm9ib3hMYWJlbHMiLCJtYWNyb21vbGVjdWxlSXNNdWx0aW1lciIsImlucHV0SW5mb2JveFdpZHRoIiwic3R5bGUiLCJvdXRwdXRJbmZvYm94V2lkdGgiLCJjYWxjdWxhdGVNaW5XaWR0aCIsInJlc2l6ZU5vZGVzIiwibmV3SW5wdXRYUG9zIiwibmV3T3V0cHV0WFBvcyIsIm5ld0lucHV0WVBvcyIsIm5ld091dHB1dFlQb3MiLCJjcmVhdGVNZXRhYm9saWNSZWFjdGlvbiIsImlucHV0cyIsIm91dHB1dHMiLCJyZXZlcnNpYmxlIiwiZGVmYXVsdFNpbXBsZUNoZW1pY2FsUHJvcGVydGllcyIsInNpbXBsZUNoZW1pY2FsSGVpZ2h0Iiwic2ltcGxlQ2hlbWljYWxXaWR0aCIsInByb2Nlc3NMZWZ0U2lkZUVkZ2VUeXBlIiwicHJvY2Vzc1JpZ2h0U2lkZUVkZ2VUeXBlIiwibnVtT2ZJbnB1dE5vZGVzIiwibnVtT2ZPdXRwdXROb2RlcyIsIm5vZGVOYW1lIiwibm9kZVR5cGUiLCJjZWlsIiwidG9Mb3dlckNhc2UiLCJjcmVhdGVNZXRhYm9saWNDYXRhbHl0aWNBY3Rpdml0eSIsImlucHV0Tm9kZUxpc3QiLCJvdXRwdXROb2RlTGlzdCIsImNhdGFseXN0TmFtZSIsImNhdGFseXN0VHlwZSIsImRlZmF1bHRNYWNyb21vbGVjdWxQcm9wZXJ0aWVzIiwiZGVmYXVsdENhdGFseXN0VHlwZVByb3BlcnRpZXMiLCJjYXRhbHlzdEhlaWdodCIsInhQb3NPZkNhdGFseXN0IiwieVBvc09mQ2F0YWx5c3QiLCJjYXRhbHlzdE5vZGUiLCJjYXRhbHlzdEVkZ2UiLCJjcmVhdGVBY3RpdmF0aW9uUmVhY3Rpb24iLCJ5UG9zaXRpb24iLCJpbnB1dFNpZGVFZGdlIiwib3V0cHV0U2lkZUVkZ2UiLCJjcmVhdGVUZW1wbGF0ZVJlYWN0aW9uIiwidGVtcGxhdGVUeXBlIiwibm9kZUxpc3QiLCJjb21wbGV4TmFtZSIsImxheW91dFBhcmFtIiwibnVtT2ZNb2xlY3VsZXMiLCJ4UG9zaXRpb25PZkZyZWVNYWNyb21vbGVjdWxlcyIsInhQb3NpdGlvbk9mSW5wdXRNYWNyb21vbGVjdWxlcyIsImVkZ2VPZkNvbXBsZXgiLCJudW1PZklucHV0TWFjcm9tb2xlY3VsZXMiLCJsYXlvdXROb2RlcyIsIm5vZGVzIiwibGF5b3V0IiwicmFuZG9taXplIiwiZml0IiwiYW5pbWF0ZSIsInN0b3AiLCJzdXBwb3NlZFhQb3NpdGlvbiIsInN1cHBvc2VkWVBvc2l0aW9uIiwib3V0ZXJXaWR0aCIsInBvc2l0aW9uRGlmZlgiLCJwb3NpdGlvbkRpZmZZIiwibW92ZU5vZGVzIiwicnVuIiwibmV3UGFyZW50IiwicG9zRGlmZlgiLCJwb3NEaWZmWSIsIm5ld1BhcmVudElkIiwibW92ZWRFbGVzIiwibW92ZSIsIm1haW50YWluUG9pbnRlciIsInVwZGF0ZUluZm9ib3hTdHlsZSIsIm5ld1Byb3BzIiwiaW5mb2JveE9iaiIsInVwZGF0ZSIsInVwZGF0ZUluZm9ib3hPYmoiLCJ1c2VBc3BlY3RSYXRpbyIsInByZXNlcnZlUmVsYXRpdmVQb3MiLCJyYXRpbyIsImVsZU11c3RCZVNxdWFyZSIsIm11c3RCZVNxdWFyZSIsIm9sZFdpZHRoIiwib2xkSGVpZ2h0IiwiaXNQYXJlbnQiLCJmb250RmFtaWxpeSIsImZvbnRTaXplIiwibGFiZWxUZXh0IiwibGFiZWxXaWR0aCIsImdldFdpZHRoQnlDb250ZW50IiwidW5pdEdhcCIsInRvcElkZWFsV2lkdGgiLCJib3R0b21JZGVhbFdpZHRoIiwicmlnaHRNYXhXaWR0aCIsImxlZnRNYXhXaWR0aCIsImJveCIsIm1pZGRsZVdpZHRoIiwiY29tcG91bmRXaWR0aCIsImNoaWxkcmVuIiwiYm91bmRpbmdCb3giLCJjYWxjdWxhdGVNaW5IZWlnaHQiLCJtYXJnaW4iLCJsZWZ0SW5mb0JveGVzIiwiZmlsdGVyIiwibGVmdEhlaWdodCIsInJpZ2h0SW5mb0JveGVzIiwicmlnaHRIZWlnaHQiLCJzcGxpdCIsInBhcnNlRmxvYXQiLCJzdWJzdHJpbmciLCJ0b3RhbEhlaWdodCIsImNvbXBvdW5kSGVpZ2h0IiwiaXNSZXNpemVkVG9Db250ZW50IiwiaXNOb2RlIiwibWluVyIsIm1pbkgiLCJyZWxvY2F0ZVN0YXRlQW5kSW5mb3MiLCJzdGF0ZUFuZEluZm9zIiwiY2hhbmdlU3RhdGVPckluZm9Cb3giLCJ2YWx1ZSIsInJlc3VsdCIsIm9sZExlbmd0aCIsIm5ld0xlbmd0aCIsImNvbnRlbnQiLCJzdGF0ZSIsIm1pbiIsImZvbnRGYW1pbHkiLCJib3JkZXJXaWR0aCIsIm9wdHMiLCJwcmV2aW91c1dpZHRoIiwidW5pdExheW91dCIsInVuaXRzIiwic2hpZnRBbW91bnQiLCJvYmoiLCJsb2NhdGlvbk9iaiIsImRlZmF1bHRQcm9wcyIsImluZm9ib3hQcm9wcyIsImdldERlZmF1bHRJbmZvYm94U3R5bGUiLCJVbml0T2ZJbmZvcm1hdGlvbiIsImNyZWF0ZSIsImxvY2F0aW9uIiwiU3RhdGVWYXJpYWJsZSIsInZhcmlhYmxlIiwicmVtb3ZlU3RhdGVPckluZm9Cb3giLCJ1bml0IiwidW5pdENsYXNzIiwiZ2V0QXV4VW5pdENsYXNzIiwicmVtb3ZlIiwiZml0VW5pdHMiLCJsb2NhdGlvbnMiLCJjaGVja0ZpdCIsInN0YXR1cyIsImlzTXVsdGltZXIiLCJlbmRzV2l0aCIsInJlcGxhY2UiLCJjaGFuZ2VGb250UHJvcGVydGllcyIsInZhbGlkYXRlQXJyb3dFbmRzIiwiaXNSZXBsYWNlbWVudCIsImVkZ2VjbGFzcyIsInNvdXJjZWNsYXNzIiwidGFyZ2V0Y2xhc3MiLCJlZGdlQ29uc3RyYWludHMiLCJjb25uZWN0aXZpdHlDb25zdHJhaW50cyIsInN0YXJ0c1dpdGgiLCJoYXNUb29NYW55RWRnZXMiLCJzb3VyY2VPclRhcmdldCIsIm5vZGVjbGFzcyIsInRvdGFsVG9vTWFueSIsImVkZ2VUb29NYW55Iiwic2FtZUVkZ2VDb3VudE91dCIsIm91dGdvZXJzIiwic2l6ZSIsInRvdGFsRWRnZUNvdW50T3V0IiwibWF4VG90YWwiLCJhc1NvdXJjZSIsIm1heEVkZ2UiLCJjb21wYXJlU3RyaWN0Iiwid2l0aGluTGltaXRzIiwic2FtZUVkZ2VDb3VudEluIiwiaW5jb21lcnMiLCJ0b3RhbEVkZ2VDb3VudEluIiwiYXNUYXJnZXQiLCJpc0luQ29tcGxleCIsInBhcmVudENsYXNzIiwiaXNBbGxvd2VkIiwiZGVsZXRlQW5kUGVyZm9ybUxheW91dCIsImxheW91dHBhcmFtIiwiaGlkZUFuZFBlcmZvcm1MYXlvdXQiLCJ2aWV3VXRpbGl0aWVzIiwiaGlkZSIsInNob3dBbmRQZXJmb3JtTGF5b3V0Iiwic2hvdyIsImNoYW5nZUNzcyIsInZhbHVlTWFwIiwiY2hhbmdlRGF0YSIsInVwZGF0ZVNldEZpZWxkIiwiZmllbGROYW1lIiwidG9EZWxldGUiLCJ0b0FkZCIsImNhbGxiYWNrIiwic2V0IiwidXBkYXRlcyIsImRlbGV0ZWQiLCJhZGRlZCIsImdldE5vZGVzQXQiLCJyZW5kZXJlZFBvcyIsInJlc3VsdE5vZGVzIiwicmVuZGVyZWRCYm94IiwicmVuZGVyZWRCb3VuZGluZ0JveCIsImluY2x1ZGVOb2RlcyIsImluY2x1ZGVFZGdlcyIsImluY2x1ZGVMYWJlbHMiLCJpbmNsdWRlU2hhZG93cyIsIngxIiwieDIiLCJ5MSIsInkyIiwiZGVtdWx0aW1lcml6ZUNsYXNzIiwicmVzZXRNYXBUeXBlIiwiZW1pdCIsInNpZGUiLCJwYXJlbnROb2RlIiwiYW55SGFzQmFja2dyb3VuZEltYWdlIiwiZ2V0QmFja2dyb3VuZEltYWdlT2JqcyIsImtleSIsImlzRW1wdHlPYmplY3QiLCJoYXNCYWNrZ3JvdW5kSW1hZ2UiLCJiZyIsIkFycmF5IiwiaXNBcnJheSIsImNsb25lSW1nIiwib25seUhhc0Nsb25lTWFya2VyQXNCZ0ltYWdlIiwiaW5kZXhPZiIsImdldEJhY2tncm91bmRJbWFnZVVSTCIsImNvbW1vblVSTCIsInVybCIsInBvcCIsImxpc3QiLCJnZXRCZ09iaiIsImdldEJhY2tncm91bmRGaXRPcHRpb25zIiwiY29tbW9uRml0IiwiZ2V0Rml0T3B0aW9uIiwic2VhcmNoS2V5Iiwic3Vic3RyIiwiZiIsInVwZGF0ZUJhY2tncm91bmRJbWFnZSIsImJnT2JqIiwiaW1ncyIsInhQb3MiLCJ5UG9zIiwid2lkdGhzIiwiaGVpZ2h0cyIsImZpdHMiLCJvcGFjaXRpZXMiLCJ0bXAiLCJqb2luIiwiY2hhbmdlQmFja2dyb3VuZEltYWdlIiwib2xkSW1nIiwibmV3SW1nIiwiZmlyc3RUaW1lIiwidXBkYXRlSW5mbyIsInByb21wdEludmFsaWRJbWFnZSIsInZhbGlkYXRlVVJMIiwicmVtb3ZlQmFja2dyb3VuZEltYWdlIiwiYWRkQmFja2dyb3VuZEltYWdlIiwibG9hZEJhY2tncm91bmRUaGVuQXBwbHkiLCJhcHBseUJhY2tncm91bmQiLCJjaGVja0dpdmVuVVJMIiwicmVhZGVyIiwiRmlsZVJlYWRlciIsImltZ0ZpbGUiLCJyZWFkQXNEYXRhVVJMIiwib25sb2FkIiwiZSIsImltZyIsImV4dGVuc2lvbiIsInZhbGlkRXh0ZW5zaW9ucyIsImluY2x1ZGVzIiwiYWpheCIsInN1Y2Nlc3MiLCJ4aHIiLCJlcnJvciIsImluZGV4VG9JbnNlcnQiLCJoYXNDbG9uZU1hcmtlciIsInNwbGljZSIsInJldmVyc2VFZGdlIiwib2xkU291cmNlIiwib2xkVGFyZ2V0Iiwib2xkUG9ydFNvdXJjZSIsIm9sZFBvcnRUYXJnZXQiLCJzZWdtZW50UG9pbnRzIiwiY29udHJvbFBvaW50cyIsImJlbmRQb2ludFBvc2l0aW9ucyIsImNvbnRyb2xQb2ludFBvc2l0aW9ucyIsImVkZ2VFZGl0aW5nIiwiaW5pdEFuY2hvclBvaW50cyIsImdldExpYnMiLCJpc0dyYXBoVG9wb2xvZ3lMb2NrZWQiLCJ1bmRvYWJsZSIsInVuZG9SZWRvIiwiaW52YWxpZEVkZ2VDYWxsYmFjayIsInZhbGlkYXRpb24iLCJ0ZW1wIiwicHJvY2Vzc1R5cGUiLCJpc0VQTkNsYXNzIiwiY2xvbmVDb2xsYXBzZWROb2Rlc0FuZFBvcnRzIiwiZWxlc0JlZm9yZSIsImVsZXNBZnRlciIsImVsZXNEaWZmIiwiZGlmZiIsImxlZnQiLCJjb2xsYXBzZWROb2RlcyIsImNvbm5lY3RlZEVkZ2VzIiwicmVtb3ZlQ2xhc3MiLCJfbm9kZSIsIm9sZFBvcnROYW1lMCIsIm9sZFBvcnROYW1lMSIsImVkZ2VzIiwiX2VkZ2UiLCJjbG9uZUVsZW1lbnRzIiwicGFzdGVBdE1vdXNlTG9jIiwiY29weUVsZW1lbnRzIiwicGFzdGVFbGVtZW50cyIsImNsaXBib2FyZCIsImNvcHkiLCJwYXN0ZSIsImFsaWduIiwiaG9yaXpvbnRhbCIsImFsaWduVG8iLCJfbm9kZXMiLCJlbGVtZW50IiwiaXNWYWxpZFBhcmVudCIsImdldFRvcE1vc3ROb2RlcyIsImFsbEhhdmVUaGVTYW1lUGFyZW50IiwiX25ld1BhcmVudCIsImRpZmZlcmVuY2UiLCJhbmNlc3RvcnMiLCJwYXJlbnRJZCIsInBhcmVudERhdGEiLCJtYWNyb21vbGVjdWxlTGlzdCIsImFjdGlvbnMiLCJwZXJmb3JtT3BlcmF0aW9uIiwicmVzaXplTm9kZXNUb0NvbnRlbnQiLCJjaGFuZ2VOb2RlTGFiZWwiLCJyZWRyYXdDbG9uZU1hcmtlcnMiLCJzZXRDbG9uZU1hcmtlclN0YXR1cyIsInNldERlZmF1bHRQcm9wZXJ0eSIsIl9jbGFzcyIsInByb3BNYXAiLCJzZXREZWZhdWx0UHJvcGVydGllcyIsImFsbE5vZGVzIiwibm9kZXNUb0tlZXAiLCJleHRlbmRSZW1haW5pbmdOb2RlcyIsIm5vZGVzVG9SZW1vdmUiLCJub3QiLCJub2Rlc1RvU2hvdyIsIm5vZGVzVG9IaWRlIiwibm9kZXNXaXRoSGlkZGVuTmVpZ2hib3IiLCJjb25uZWN0ZWROb2RlcyIsInRoaW5Cb3JkZXIiLCJ0aGlja2VuQm9yZGVyIiwidXIiLCJhY3Rpb24iLCJpbnRlcnNlY3Rpb24iLCJuZWlnaGJvcmhvb2QiLCJzaG93QWxsQW5kUGVyZm9ybUxheW91dCIsImhpZGRlbkVsZXMiLCJtYWluRWxlIiwiY2xvc2VVcEVsZW1lbnRzIiwibm9kZXNUb1RoaW5Cb3JkZXIiLCJub2Rlc1RvVGhpY2tlbkJvcmRlciIsImVkZ2VzV2l0aCIsImxlZnRYIiwiTnVtYmVyIiwiTUFYX1ZBTFVFIiwicmlnaHRYIiwiTUlOX1ZBTFVFIiwidG9wWSIsImJvdHRvbVkiLCJoYWxmV2lkdGgiLCJoYWxmSGVpZ2h0Iiwib3V0ZXJIZWlnaHQiLCJvbGRDZW50ZXJYIiwib2xkQ2VudGVyWSIsIm1pbkhvcml6b250YWxQYXJhbSIsIm1heEhvcml6b250YWxQYXJhbSIsIm1pblZlcnRpY2FsUGFyYW0iLCJtYXhWZXJ0aWNhbFBhcmFtIiwicXVhZHJhbnRzIiwiY2hlY2tPY2N1cGllZFF1YWRyYW50cyIsImZyZWVRdWFkcmFudHMiLCJwcm9wZXJ0eSIsImhvcml6b250YWxNdWx0IiwidmVydGljYWxNdWx0IiwicmFuZG9tUXVhZHJhbnQiLCJmbG9vciIsInJhbmRvbSIsImhvcml6b250YWxQYXJhbSIsImdlbmVyYXRlUmFuZG9tIiwidmVydGljYWxQYXJhbSIsIm5ld0NlbnRlclgiLCJuZXdDZW50ZXJZIiwibmV3eCIsIm5ld3kiLCJtdWx0IiwidmFsIiwidmlzaWJsZU5laWdoYm9yRWxlcyIsInZpc2libGVOZWlnaGJvcnNPZk5laWdoYm9ycyIsInZpc2libGVFbGVzIiwib2NjdXBpZWRRdWFkcmFudHMiLCJzZWNvbmQiLCJ0aGlyZCIsImZvdXJ0aCIsImhpZ2hsaWdodFByb2Nlc3NlcyIsImltZ1BhdGgiLCJmaXRMYWJlbHNUb05vZGVzIiwiZml0TGFiZWxzVG9JbmZvYm94ZXMiLCJkeW5hbWljTGFiZWxTaXplIiwiaW5mZXJOZXN0aW5nT25Mb2FkIiwiY29tcG91bmRQYWRkaW5nIiwibmV0d29ya0NvbnRhaW5lclNlbGVjdG9yIiwidW5kb2FibGVEcmFnIiwiZGVsZXRlRWxlc1NpbXBsZSIsInJlc3RvcmVFbGVzIiwiZGVsZXRlRWxlc1NtYXJ0IiwiY2hhbmdlQmVuZFBvaW50cyIsInVuZG9TaG93QW5kUGVyZm9ybUxheW91dCIsInVuZG9IaWRlQW5kUGVyZm9ybUxheW91dCIsInVuZG9EZWxldGVBbmRQZXJmb3JtTGF5b3V0IiwiYXBwbHlTSUZUb3BvbG9neUdyb3VwaW5nIiwiY29udmVydEludG9SZXZlcnNpYmxlUmVhY3Rpb24iLCJtb3ZlRWRnZSIsImZpeEVycm9yIiwidW5maXhFcnJvciIsImNsb25lSGlnaERlZ3JlZU5vZGUiLCJ1bkNsb25lSGlnaERlZ3JlZU5vZGUiLCJjaGFuZ2VNYXBUeXBlIiwic2V0Q29tcG91bmRQYWRkaW5nIiwiaXNFcXVhbCIsImdyb3VwQ29tcG91bmRUeXBlIiwiREVGQVVMVF9HUk9VUF9DT01QT1VORF9UWVBFIiwiRURHRV9TVFlMRV9OQU1FUyIsInRvcG9sb2d5R3JvdXBpbmciLCJwcm9wcyIsImFwcGxpZWQiLCJpbml0TWV0YVN0eWxlTWFwIiwiYXBwbHkiLCJldmFsT3B0IiwibWFwIiwiZ3JvdXBzIiwiZ2V0Tm9kZUdyb3VwcyIsIm1ldGFFZGdlcyIsImdldE1ldGFFZGdlcyIsImNvbXBvdW5kcyIsImdldEdyb3VwQ29tcG91bmRzIiwiYXBwbHlHcm91cGluZyIsInVuYXBwbHkiLCJ0b1Jlc3RvcmUiLCJyZXN0b3JlIiwib2xkVmFsIiwibWV0YVN0eWxlTWFwIiwibmV3VmFsIiwicGFyZW50cyIsInVubG9ja0dyYXBoVG9wb2xvZ3kiLCJjbGFzc05hbWUiLCJjbGVhckFwcGxpZWRGbGFnIiwic2V0QXBwbGllZEZsYWciLCJ0b2dnbGVBcHBsaWVkRmxhZyIsIm9wdCIsImhhbHZlcyIsImdldEhhbHZlcyIsImZpcnN0UGFydCIsInNlY29uZFBhcnQiLCJtZXJnZUdyb3VwcyIsImdldFBhcmVudE9yU2VsZiIsImNhbGNHcm91cGluZ0tleSIsInNyY0lkIiwidGd0SWQiLCJnZXRFZGdlVHlwZSIsImFkZFRvTWFwQ2hhaW4iLCJncm91cENvbXBvdW5kcyIsImNyZWF0ZUdyb3VwQ29tcG91bmQiLCJjaGlsZHJlbkVkZ2VzIiwiZWRnZXNNYXAiLCJtZXRhRWRnZSIsImNyZWF0ZU1ldGFFZGdlRm9yIiwic3R5bGVOYW1lIiwiY29tbW9uVmFsIiwiZ2V0Q29tbW9uUHJvcGVydHkiLCJncm91cHMxIiwiZ3JvdXBzMiIsIm5vdE1lcmdlZEdycyIsIm1lcmdlZEdycyIsImdyMSIsIm1lcmdlZCIsImNvbmNhdCIsImdyMiIsImluZGV4MiIsInNob3VsZE1lcmdlIiwibWVyZ2VkR3IiLCJyZW1vdmVBdCIsImdyb3VwMSIsImdyb3VwMiIsIm5vZGUxIiwibm9kZTIiLCJnZXRVbmRpcmVjdGVkRWRnZXMiLCJpc1VuZGlyZWN0ZWRFZGdlIiwidW5kaXIxIiwidW5kaXIyIiwiaW4xIiwiaW4yIiwib3V0MSIsIm91dDIiLCJjb21wYXJlRWRnZUdyb3VwIiwiaWQxIiwiaWQyIiwibWFwMSIsImZpbGxJZFRvVHlwZVNldE1hcCIsIm1hcDIiLCJmYWlsZWQiLCJvdGhlcktleSIsImVkZ2VHcm91cCIsIm5vZGVJZCIsImVkZ2VJZCIsIm90aGVyRW5kIiwiYWRkVG9SZWxhdGVkU2V0Iiwic2lkZVN0ciIsIlNldCIsInMiLCJoYWxmSW5kZXgiLCJmaXJzdEhhbGYiLCJzbGljZSIsInNlY29uZEhhbGYiLCJhcnIiLCJvbGRFbGVzIiwicmVtb3ZlZEVsZXMiLCJkZXNjZW5kYW50cyIsImdldE5vZGVQb3NpdGlvbnMiLCJwb3NpdGlvbnMiLCJlYWNoIiwicmV0dXJuVG9Qb3NpdGlvbnMiLCJjdXJyZW50UG9zaXRpb25zIiwicG9zIiwic2l6ZU1hcCIsImJpYXNMIiwiYmlhc1IiLCJiaWFzVCIsImJpYXNCIiwiX3ByaXZhdGUiLCJmb3JjZVJlbmRlciIsIm9sZFNpZGUiLCJyZXN1bHRTdGF0dXMiLCJjdXJyZW50U3RhdHVzIiwiY2xhc3NEZWZhdWx0cyIsImhhc093blByb3BlcnR5Iiwib2xkQmdPYmoiLCJjb252ZXJ0ZWRFZGdlIiwiZGlzdGFuY2UiLCJ3ZWlnaHQiLCJwcm9jZXNzSWQiLCJlcnJvckNvZGUiLCJuZXdOb2RlcyIsIm5ld0VkZ2VzIiwib2xkRWRnZXMiLCJvbGRFZGdlIiwibmV3U291cmNlIiwibmV3VGFyZ2V0IiwiY2xvbmVkRWRnZSIsImNsb25lIiwid2l0aERlc2NlbmRhbnQiLCJlbGVzVG9SZXN0b3JlIiwicG9zRGlmZiIsImR1cmF0aW9uIiwiZWFzaW5nIiwicGFkZGluZyIsImNvbXBsZXRlIiwib2xkWCIsIm9sZFkiLCJjbGFjdWxhdGVOZXdDbG9uZVBvc2l0aW9uIiwic291cmNlRW5kUG9pbnRYIiwic291cmNlRW5kUG9pbnRZIiwidGFyZ2V0RW5kUG9pbnRYIiwidGFyZ2V0RW5kUG9pbnRZIiwiZGVzaXJlZERpc3RhbmNlIiwiZGlyZWN0aW9uIiwic3FydCIsInBvdyIsImN4IiwiZWRnZUNsb25lIiwic3RhcnRQb3NpdGlvbiIsIm5ld1Bvc2l0aW9uIiwic291cmNlRW5kcG9pbnQiLCJ0YXJnZXRFbmRwb2ludCIsIm5ld05vZGVJZCIsImNsb25lRWRnZSIsIm51bWJlck9mRWRnZXMiLCJjbG9uZUlkIiwiY3VycmVudE1hcFR5cGUi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QUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLGFBQWEsTUFBTTtBQUNuQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLGFBQWEsUUFBUTtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLGFBQWEsRUFBRTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsYUFBYSxRQUFRO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcs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QUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakIsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsT0FBTztBQUNsQixXQUFXLFNBQVM7QUFDcEIsV0FBVyxTQUFTO0FBQ3BCLFdBQVcsT0FBTztBQUNsQixhQUFhLFFBQVE7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLFNBQVM7QUFDcEIsV0FBVyxTQUFTO0FBQ3BCLFdBQVcsT0FBTztBQUNsQixhQUFhLFFBQVE7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtB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O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxFQUFFO0FBQ2IsYUFBYSxRQUFRO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLEVBQUU7QUFDYixhQUFhLFFBQVE7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsRUFBRTtBQUNiLGFBQWEsUUFBUTtBQUNyQjtBQUNBO0FBQ0EsZ0JBQWdCO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxFQUFFO0FBQ2IsYUFBYSxRQUFRO0FBQ3JCO0FBQ0E7QUFDQSxvQkFBb0I7QUFDcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsRUFBRTtBQUNiLGFBQWEsUUFBUTtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixhQUFhLE1BQU07QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxNQUFNO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxRQUFRO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7Ozs7Ozs7VUN2ekRBO1VBQ0E7O1VBRUE7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7O1VBRUE7VUFDQTs7VUFFQTtVQUNBOztVQUVBO1VBQ0E7VUFDQTs7Ozs7V0N6QkE7V0FDQTtXQUNBO1dBQ0E7V0FDQSxFQUFFO1dBQ0Y7V0FDQTtXQUNBLENBQUMsSTs7Ozs7V0NQRDtXQUNBO1dBQ0E7V0FDQTtXQUNBLEU7Ozs7O1VDSkE7VUFDQTtVQUNBO1VBQ0EiLCJmaWxlIjoiY2hpc2UuanMiLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24gd2VicGFja1VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24ocm9vdCwgZmFjdG9yeSkge1xuXHRpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcpXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KCk7XG5cdGVsc2UgaWYodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKVxuXHRcdGRlZmluZShbXSwgZmFjdG9yeSk7XG5cdGVsc2UgaWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKVxuXHRcdGV4cG9ydHNbXCJjaGlzZVwiXSA9IGZhY3RvcnkoKTtcblx0ZWxzZVxuXHRcdHJvb3RbXCJjaGlzZVwiXSA9IGZhY3RvcnkoKTtcbn0pKHNlbGYsIGZ1bmN0aW9uKCkge1xucmV0dXJuICIsIihmdW5jdGlvbigpe1xuICB2YXIgY2hpc2UgPSBmdW5jdGlvbihfb3B0aW9ucykge1xuXG4gICAgdmFyIHBhcmFtID0ge307XG5cbiAgICAvLyBBY2Nlc3MgdGhlIGxpYnNcbiAgICB2YXIgbGlicyA9IHJlcXVpcmUoJy4vdXRpbGl0aWVzL2xpYi11dGlsaXRpZXMnKS5nZXRMaWJzKCk7XG5cbiAgICB2YXIgb3B0aW9uVXRpbGl0aWVzID0gcmVxdWlyZSgnLi91dGlsaXRpZXMvb3B0aW9uLXV0aWxpdGllcy1mYWN0b3J5JykoKTtcbiAgICB2YXIgb3B0aW9ucyA9IG9wdGlvblV0aWxpdGllcy5leHRlbmRPcHRpb25zKF9vcHRpb25zKTsgLy8gRXh0ZW5kcyB0aGUgZGVmYXVsdCBvcHRpb25zIHdpdGggdGhlIGdpdmVuIG9wdGlvbnNcblxuICAgIC8vIENyZWF0ZSBhbiBzYmdudml6IGluc3RhbmNlXG4gICAgdmFyIHNiZ252aXpJbnN0YW5jZVV0aWxpdGllcyA9IHJlcXVpcmUoJy4vdXRpbGl0aWVzL3NiZ252aXotaW5zdGFuY2UtdXRpbGl0aWVzLWZhY3RvcnknKSgpO1xuICAgIHZhciBzYmdudml6SW5zdGFuY2UgPSBzYmdudml6SW5zdGFuY2VVdGlsaXRpZXMob3B0aW9ucyk7XG5cbiAgICAvLyBSZWdpc3RlciB1bmRvL3JlZG8gYWN0aW9uc1xuICAgIHZhciByZWdpc3RlclVuZG9SZWRvQWN0aW9ucyA9IHJlcXVpcmUoJy4vdXRpbGl0aWVzL3JlZ2lzdGVyLXVuZG8tcmVkby1hY3Rpb25zLWZhY3RvcnknKSgpO1xuXG4gICAgdmFyIG1haW5VdGlsaXRpZXMgPSByZXF1aXJlKCcuL3V0aWxpdGllcy9tYWluLXV0aWxpdGllcy1mYWN0b3J5JykoKTtcbiAgICB2YXIgZWxlbWVudFV0aWxpdGllc0V4dGVuZGVyID0gcmVxdWlyZSgnLi91dGlsaXRpZXMvZWxlbWVudC11dGlsaXRpZXMtZXh0ZW5kZXItZmFjdG9yeScpKCk7XG4gICAgdmFyIHVuZG9SZWRvQWN0aW9uRnVuY3Rpb25zRXh0ZW5kZXIgPSByZXF1aXJlKCcuL3V0aWxpdGllcy91ci1hY3Rpb24tZnVuY3Rpb25zLWV4dGVuZGVyLWZhY3RvcnknKSgpO1xuICAgIHZhciBzaWZUb3BvbG9neUdyb3VwaW5nID0gcmVxdWlyZSgnLi91dGlsaXRpZXMvdG9wb2xvZ3ktZ3JvdXBpbmctZmFjdG9yeScpKCk7XG5cbiAgICB2YXIgZWxlbWVudFV0aWxpdGllcyA9ICBzYmdudml6SW5zdGFuY2UuZWxlbWVudFV0aWxpdGllcztcbiAgICB2YXIgdW5kb1JlZG9BY3Rpb25GdW5jdGlvbnMgPSBzYmdudml6SW5zdGFuY2UudW5kb1JlZG9BY3Rpb25GdW5jdGlvbnM7XG5cbiAgICBwYXJhbS5zYmdudml6SW5zdGFuY2VVdGlsaXRpZXMgPSBzYmdudml6SW5zdGFuY2VVdGlsaXRpZXM7XG4gICAgcGFyYW0ub3B0aW9uVXRpbGl0aWVzID0gb3B0aW9uVXRpbGl0aWVzO1xuICAgIHBhcmFtLmVsZW1lbnRVdGlsaXRpZXMgPSBlbGVtZW50VXRpbGl0aWVzO1xuICAgIHBhcmFtLnVuZG9SZWRvQWN0aW9uRnVuY3Rpb25zID0gdW5kb1JlZG9BY3Rpb25GdW5jdGlvbnM7XG4gICAgcGFyYW0uc2lmVG9wb2xvZ3lHcm91cGluZyA9IHNpZlRvcG9sb2d5R3JvdXBpbmc7XG5cbiAgICB2YXIgc2hvdWxkQXBwbHkgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBwYXJhbS5lbGVtZW50VXRpbGl0aWVzLm1hcFR5cGUgPT09ICdTSUYnO1xuICAgIH07XG5cbiAgICB1bmRvUmVkb0FjdGlvbkZ1bmN0aW9uc0V4dGVuZGVyKHBhcmFtKTtcbiAgICBlbGVtZW50VXRpbGl0aWVzRXh0ZW5kZXIocGFyYW0pO1xuICAgIHJlZ2lzdGVyVW5kb1JlZG9BY3Rpb25zKHBhcmFtKTtcbiAgICBtYWluVXRpbGl0aWVzKHBhcmFtKTtcbiAgICBzaWZUb3BvbG9neUdyb3VwaW5nKHBhcmFtLCB7bWV0YUVkZ2VJZGVudGlmaWVyOiAnc2lmLW1ldGEnLCBsb2NrR3JhcGhUb3BvbG9neTogdHJ1ZSwgc2hvdWxkQXBwbHl9KTtcblxuICAgIC8vIEV4cG9zZSB0aGUgYXBpXG4gICAgdmFyIGFwaSA9IHt9O1xuXG4gICAgLy8gRXhwb3NlIHRoZSBwcm9wZXJ0aWVzIGluaGVyaXRlZCBmcm9tIHNiZ252aXpcbiAgICAvLyB0aGVuIG92ZXJyaWRlIHNvbWUgb2YgdGhlc2UgcHJvcGVydGllcyBhbmQgZXhwb3NlIHNvbWUgbmV3IHByb3BlcnRpZXNcbiAgICBmb3IgKHZhciBwcm9wIGluIHNiZ252aXpJbnN0YW5jZSkge1xuICAgICAgYXBpW3Byb3BdID0gc2JnbnZpekluc3RhbmNlW3Byb3BdO1xuICAgIH1cblxuICAgIC8vIEV4cG9zZSBlYWNoIG1haW4gdXRpbGl0eSBzZXBlcmF0ZWx5XG4gICAgZm9yICh2YXIgcHJvcCBpbiBtYWluVXRpbGl0aWVzKSB7XG4gICAgICBhcGlbcHJvcF0gPSBtYWluVXRpbGl0aWVzW3Byb3BdO1xuICAgIH1cblxuICAgIC8vIEV4cG9zZSBnZXRTYmdudml6SW5zdGFuY2UoKVxuICAgIGFwaS5nZXRTYmdudml6SW5zdGFuY2UgPSBzYmdudml6SW5zdGFuY2VVdGlsaXRpZXMuZ2V0SW5zdGFuY2U7XG5cbiAgICAvLyBFeHBvc2UgZWxlbWVudFV0aWxpdGllcyBhbmQgdW5kb1JlZG9BY3Rpb25GdW5jdGlvbnMgYXMgaXNcbiAgICBhcGkuZWxlbWVudFV0aWxpdGllcyA9IGVsZW1lbnRVdGlsaXRpZXM7XG4gICAgYXBpLnVuZG9SZWRvQWN0aW9uRnVuY3Rpb25zID0gdW5kb1JlZG9BY3Rpb25GdW5jdGlvbnM7XG4gICAgYXBpLnNpZlRvcG9sb2d5R3JvdXBpbmcgPSBzaWZUb3BvbG9neUdyb3VwaW5nO1xuXG4gICAgcmV0dXJuIGFwaTtcbiAgfTtcblxuICAvLyBSZWdpc3RlciBjaGlzZSB3aXRoIGdpdmVuIGxpYnJhcmllc1xuICBjaGlzZS5yZWdpc3RlciA9IGZ1bmN0aW9uIChfbGlicykge1xuXG4gICAgdmFyIGxpYnMgPSB7fTtcbiAgICBsaWJzLmpRdWVyeSA9IF9saWJzLmpRdWVyeSB8fCBqUXVlcnk7XG4gICAgbGlicy5jeXRvc2NhcGUgPSBfbGlicy5jeXRvc2NhcGUgfHwgY3l0b3NjYXBlO1xuICAgIGxpYnMuc2JnbnZpeiA9IF9saWJzLnNiZ252aXogfHwgc2JnbnZpejtcbiAgICBsaWJzLnNhdmVBcyA9IF9saWJzLmZpbGVzYXZlciA/IF9saWJzLmZpbGVzYXZlci5zYXZlQXMgOiBzYXZlQXM7XG5cbiAgICBsaWJzLnNiZ252aXoucmVnaXN0ZXIoX2xpYnMpOyAvLyBSZWdpc3RlciBzYmdudml6IHdpdGggdGhlIGdpdmVuIGxpYnNcblxuICAgIC8vIGluaGVyaXQgZXhwb3NlZCBzdGF0aWMgcHJvcGVydGllcyBvZiBzYmdudml6IG90aGVyIHRoYW4gcmVnaXN0ZXJcbiAgICBmb3IgKHZhciBwcm9wIGluIGxpYnMuc2JnbnZpeikge1xuICAgICAgaWYgKHByb3AgIT09ICdyZWdpc3RlcicpIHtcbiAgICAgICAgY2hpc2VbcHJvcF0gPSBsaWJzLnNiZ252aXpbcHJvcF07XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gU2V0IHRoZSBsaWJyYXJpZXMgdG8gYWNjZXNzIHRoZW0gZnJvbSBhbnkgZmlsZVxuICAgIHZhciBsaWJVdGlsaXRpZXMgPSByZXF1aXJlKCcuL3V0aWxpdGllcy9saWItdXRpbGl0aWVzJyk7XG4gICAgbGliVXRpbGl0aWVzLnNldExpYnMobGlicyk7XG4gIH07XG5cbiAgaWYgKCB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyAmJiBtb2R1bGUuZXhwb3J0cyApIHtcbiAgICBtb2R1bGUuZXhwb3J0cyA9IGNoaXNlO1xuICB9XG59KSgpO1xuIiwiLy8gRXh0ZW5kcyBzYmdudml6LmVsZW1lbnRVdGlsaXRpZXNcbnZhciBsaWJzID0gcmVxdWlyZSgnLi9saWItdXRpbGl0aWVzJykuZ2V0TGlicygpO1xudmFyIGpRdWVyeSA9ICQgPSBsaWJzLmpRdWVyeTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBvcHRpb25zLCBzYmdudml6SW5zdGFuY2UsIGVsZW1lbnRVdGlsaXRpZXMsIGN5O1xuXG4gIGZ1bmN0aW9uIGVsZW1lbnRVdGlsaXRpZXNFeHRlbmRlciAocGFyYW0pIHtcbiAgICBzYmdudml6SW5zdGFuY2UgPSBwYXJhbS5zYmdudml6SW5zdGFuY2VVdGlsaXRpZXMuZ2V0SW5zdGFuY2UoKTtcbiAgICBvcHRpb25zID0gcGFyYW0ub3B0aW9uVXRpbGl0aWVzLmdldE9wdGlvbnMoKTtcbiAgICBlbGVtZW50VXRpbGl0aWVzID0gc2JnbnZpekluc3RhbmNlLmVsZW1lbnRVdGlsaXRpZXM7XG4gICAgY3kgPSBwYXJhbS5zYmdudml6SW5zdGFuY2VVdGlsaXRpZXMuZ2V0Q3koKTtcblxuICAgIGV4dGVuZCgpO1xuXG4gICAgLy8gUmV0dXJuIHRoZSBleHRlbmRlZCBlbGVtZW50VXRpbGl0aWVzXG4gICAgcmV0dXJuIGVsZW1lbnRVdGlsaXRpZXM7XG4gIH1cblxuICAvLyBFeHRlbmRzIGVsZW1lbnRVdGlsaXRpZXMgd2l0aCBjaGlzZSBzcGVjaWZpYyBmYWNpbGl0aWVzXG4gIGZ1bmN0aW9uIGV4dGVuZCAoKSB7XG4gICAgLy8gU2VjdGlvbiBTdGFydFxuICAgIC8vIEFkZCByZW1vdmUgdXRpbGl0aWVzXG5cbiAgICBlbGVtZW50VXRpbGl0aWVzLmFkZE5vZGUgPSBmdW5jdGlvbiAoeCwgeSwgbm9kZVBhcmFtcywgaWQsIHBhcmVudCwgdmlzaWJpbGl0eSkge1xuICAgICAgaWYgKHR5cGVvZiBub2RlUGFyYW1zICE9ICdvYmplY3QnKXtcbiAgICAgICAgdmFyIHNiZ25jbGFzcyA9IG5vZGVQYXJhbXM7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhciBzYmduY2xhc3MgPSBub2RlUGFyYW1zLmNsYXNzO1xuICAgICAgICAgIHZhciBsYW5ndWFnZSA9IG5vZGVQYXJhbXMubGFuZ3VhZ2U7XG4gICAgICB9XG5cbiAgICAgIHZhciBjc3MgPSB7fTtcbiAgICAgIC8vIGlmIHRoZXJlIGlzIG5vIHNwZWNpZmljIGRlZmF1bHQgd2lkdGggb3IgaGVpZ2h0IGZvclxuICAgICAgLy8gc2JnbmNsYXNzIHRoZXNlIHNpemVzIGFyZSB1c2VkXG4gICAgICB2YXIgZGVmYXVsdFdpZHRoID0gNTA7XG4gICAgICB2YXIgZGVmYXVsdEhlaWdodCA9IDUwO1xuXG4gICAgICBpZiAodmlzaWJpbGl0eSkge1xuICAgICAgICBjc3MudmlzaWJpbGl0eSA9IHZpc2liaWxpdHk7XG4gICAgICB9XG5cbiAgICAgIHZhciBkYXRhID0ge1xuICAgICAgICBjbGFzczogc2JnbmNsYXNzLFxuICAgIFx0ICBsYW5ndWFnZTogbGFuZ3VhZ2UsXG4gICAgICAgIGJib3g6IHtcbiAgICAgICAgICB3OiBkZWZhdWx0V2lkdGgsXG4gICAgICAgICAgaDogZGVmYXVsdEhlaWdodCxcbiAgICAgICAgICB4OiB4LFxuICAgICAgICAgIHk6IHlcbiAgICAgICAgfSxcbiAgICAgICAgc3RhdGVzYW5kaW5mb3M6IFtdLFxuICAgICAgICBwb3J0czogW11cbiAgICAgIH07XG5cbiAgICAgIGlmKGlkKSB7XG4gICAgICAgIGRhdGEuaWQgPSBpZDtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICBkYXRhLmlkID0gZWxlbWVudFV0aWxpdGllcy5nZW5lcmF0ZU5vZGVJZCgpO1xuICAgICAgfVxuXG4gICAgICBpZiAocGFyZW50KSB7XG4gICAgICAgIGRhdGEucGFyZW50ID0gcGFyZW50O1xuICAgICAgfVxuXG4gICAgICB0aGlzLmV4dGVuZE5vZGVEYXRhV2l0aENsYXNzRGVmYXVsdHMoIGRhdGEsIHNiZ25jbGFzcyApO1xuXG4gICAgICAvLyBzb21lIGRlZmF1bHRzIGFyZSBub3Qgc2V0IGJ5IGV4dGVuZE5vZGVEYXRhV2l0aENsYXNzRGVmYXVsdHMoKVxuICAgICAgdmFyIGRlZmF1bHRzID0gdGhpcy5nZXREZWZhdWx0UHJvcGVydGllcyggc2JnbmNsYXNzICk7XG5cbiAgICAgIGlmICggZGVmYXVsdHNbICdtdWx0aW1lcicgXSApIHtcbiAgICAgICAgZGF0YS5jbGFzcyArPSAnIG11bHRpbWVyJztcbiAgICAgIH1cblxuICAgICAgaWYgKCBkZWZhdWx0c1sgJ2Nsb25lbWFya2VyJyBdICkge1xuICAgICAgICBkYXRhWyAnY2xvbmVtYXJrZXInIF0gPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICBkYXRhLmJib3hbICd3JyBdID0gZGVmYXVsdHNbICd3aWR0aCcgXTtcbiAgICAgIGRhdGEuYmJveFsgJ2gnIF0gPSBkZWZhdWx0c1sgJ2hlaWdodCcgXTtcblxuICAgICAgdmFyIGVsZXMgPSBjeS5hZGQoe1xuICAgICAgICBncm91cDogXCJub2Rlc1wiLFxuICAgICAgICBkYXRhOiBkYXRhLFxuICAgICAgICBjc3M6IGNzcyxcbiAgICAgICAgcG9zaXRpb246IHtcbiAgICAgICAgICB4OiB4LFxuICAgICAgICAgIHk6IHlcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIHZhciBuZXdOb2RlID0gZWxlc1tlbGVzLmxlbmd0aCAtIDFdO1xuICAgICAgLy8gR2V0IHRoZSBkZWZhdWx0IHBvcnRzIG9yZGVyaW5nIGZvciB0aGUgbm9kZXMgd2l0aCBnaXZlbiBzYmduY2xhc3NcbiAgICAgIHZhciBvcmRlcmluZyA9IGRlZmF1bHRzWydwb3J0cy1vcmRlcmluZyddO1xuXG4gICAgICAvLyBJZiB0aGVyZSBpcyBhIGRlZmF1bHQgcG9ydHMgb3JkZXJpbmcgZm9yIHRoZSBub2RlcyB3aXRoIGdpdmVuIHNiZ25jbGFzcyBhbmQgaXQgaXMgZGlmZmVyZW50IHRoYW4gJ25vbmUnIHNldCB0aGUgcG9ydHMgb3JkZXJpbmcgdG8gdGhhdCBvcmRlcmluZ1xuICAgICAgaWYgKG9yZGVyaW5nICYmIG9yZGVyaW5nICE9PSAnbm9uZScpIHtcbiAgICAgICAgdGhpcy5zZXRQb3J0c09yZGVyaW5nKG5ld05vZGUsIG9yZGVyaW5nKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGxhbmd1YWdlID09IFwiQUZcIiAmJiAhZWxlbWVudFV0aWxpdGllcy5jYW5IYXZlTXVsdGlwbGVVbml0T2ZJbmZvcm1hdGlvbihuZXdOb2RlKSl7XG4gICAgICAgIGlmIChzYmduY2xhc3MgIT0gXCJCQSBwbGFpblwiKSB7IC8vIGlmIEFGIG5vZGUgY2FuIGhhdmUgbGFiZWwgaS5lOiBub3QgcGxhaW4gYmlvbG9naWNhbCBhY3Rpdml0eVxuICAgICAgICAgIHZhciB1b2lfb2JqID0ge1xuICAgICAgICAgICAgY2xheno6IFwidW5pdCBvZiBpbmZvcm1hdGlvblwiXG4gICAgICAgICAgfTtcbiAgICAgICAgICB1b2lfb2JqLmxhYmVsID0ge1xuICAgICAgICAgICAgdGV4dDogXCJcIlxuICAgICAgICAgIH07XG5cbiAgICAgICAgICB1b2lfb2JqLmJib3ggPSB7XG4gICAgICAgICAgICAgdzogMTIsXG4gICAgICAgICAgICAgaDogMTJcbiAgICAgICAgICB9O1xuICAgICAgICAgIGVsZW1lbnRVdGlsaXRpZXMuYWRkU3RhdGVPckluZm9Cb3gobmV3Tm9kZSwgdW9pX29iaik7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gbm9kZSBiZyBpbWFnZSB3YXMgdW5leHBlY3RlZGx5IG5vdCByZW5kZXJlZCB1bnRpbCBpdCBpcyBjbGlja2VkXG4gICAgICAvLyB1c2UgdGhpcyBkaXJ0eSBoYWNrIHVudGlsIGZpbmRpbmcgYSBzb2x1dGlvbiB0byB0aGUgcHJvYmxlbVxuICAgICAgdmFyIGJnSW1hZ2UgPSBuZXdOb2RlLmRhdGEoJ2JhY2tncm91bmQtaW1hZ2UnKTtcbiAgICAgIGlmICggYmdJbWFnZSApIHtcbiAgICAgICAgbmV3Tm9kZS5kYXRhKCAnYmFja2dyb3VuZC1pbWFnZScsIGJnSW1hZ2UgKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG5ld05vZGU7XG4gICAgfTtcblxuICAgIC8vU2F2ZXMgb2xkIGF1eCB1bml0cyBvZiBnaXZlbiBub2RlXG4gICAgZWxlbWVudFV0aWxpdGllcy5zYXZlVW5pdHMgPSBmdW5jdGlvbihub2RlKSB7XG4gICAgICB2YXIgdGVtcERhdGEgPSBbXTtcbiAgICAgIHZhciBpbmRleCA9IDA7XG4gICAgICBub2RlLmRhdGEoJ3N0YXRlc2FuZGluZm9zJykuZm9yRWFjaCggZnVuY3Rpb24oZWxlKSB7XG4gICAgICAgIHRlbXBEYXRhLnB1c2goe1xuICAgICAgICAgIHg6IGVsZS5iYm94LngsXG4gICAgICAgICAgeTogZWxlLmJib3gueSxcbiAgICAgICAgICBhbmNob3JTaWRlOiBlbGUuYW5jaG9yU2lkZSxcbiAgICAgICAgfSk7XG4gICAgICAgIGluZGV4Kys7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiB0ZW1wRGF0YTtcbiAgICB9O1xuXG4gICAgLy9SZXN0b3JlcyBmcm9tIGdpdmVuIGRhdGFcbiAgICBlbGVtZW50VXRpbGl0aWVzLnJlc3RvcmVVbml0cyA9IGZ1bmN0aW9uKG5vZGUsIGRhdGEpIHtcbiAgICAgIHZhciBpbmRleCA9IDA7XG4gICAgICBub2RlLmRhdGEoJ3N0YXRlc2FuZGluZm9zJykuZm9yRWFjaCggZnVuY3Rpb24oZWxlKSB7XG4gICAgICAgIGlmIChkYXRhICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBlbGUuYmJveC54ID0gZGF0YVtpbmRleF0ueDtcbiAgICAgICAgICBlbGUuYmJveC55ID0gZGF0YVtpbmRleF0ueVxuICAgICAgICAgIHZhciBhbmNob3JTaWRlID0gZWxlLmFuY2hvclNpZGU7XG4gICAgICAgICAgZWxlLmFuY2hvclNpZGUgPSBkYXRhW2luZGV4XS5hbmNob3JTaWRlO1xuICAgICAgICAgIGVsZW1lbnRVdGlsaXRpZXMubW9kaWZ5VW5pdHMobm9kZSwgZWxlLCBhbmNob3JTaWRlKTtcbiAgICAgICAgICBpbmRleCsrO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgLy9Nb2RpZnkgYXV4IHVuaXQgbGF5b3V0c1xuICAgIGVsZW1lbnRVdGlsaXRpZXMubW9kaWZ5VW5pdHMgPSBmdW5jdGlvbiAobm9kZSwgZWxlLCBhbmNob3JTaWRlKSB7XG4gICAgICBpbnN0YW5jZS5jbGFzc2VzLkF1eFVuaXRMYXlvdXQubW9kaWZ5VW5pdHMobm9kZSwgZWxlLCBhbmNob3JTaWRlLCBjeSk7XG4gICAgfTtcblxuXG4gICAgLy9Gb3IgcmV2ZXJzaWJsZSByZWFjdGlvbnMgYm90aCBzaWRlIG9mIHRoZSBwcm9jZXNzIGNhbiBiZSBpbnB1dC9vdXRwdXRcbiAgICAvL0dyb3VwIElEIGlkZW50aWZpZXMgdG8gd2hpY2ggZ3JvdXAgb2Ygbm9kZXMgdGhlIGVkZ2UgaXMgZ29pbmcgdG8gYmUgY29ubmVjdGVkIGZvciByZXZlcnNpYmxlIHJlYWN0aW9ucygwOiBncm91cCAxIElEIGFuZCAxOmdyb3VwIDIgSUQpXG4gICAgZWxlbWVudFV0aWxpdGllcy5hZGRFZGdlID0gZnVuY3Rpb24gKHNvdXJjZSwgdGFyZ2V0LCBlZGdlUGFyYW1zLCBpZCwgdmlzaWJpbGl0eSwgZ3JvdXBJRCApIHtcbiAgICAgIGlmICh0eXBlb2YgZWRnZVBhcmFtcyAhPSAnb2JqZWN0Jyl7XG4gICAgICAgIHZhciBzYmduY2xhc3MgPSBlZGdlUGFyYW1zO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YXIgc2JnbmNsYXNzID0gZWRnZVBhcmFtcy5jbGFzcztcbiAgICAgICAgICB2YXIgbGFuZ3VhZ2UgPSBlZGdlUGFyYW1zLmxhbmd1YWdlO1xuICAgICAgfVxuXG4gICAgICB2YXIgY3NzID0ge307XG5cbiAgICAgIGlmICh2aXNpYmlsaXR5KSB7XG4gICAgICAgIGNzcy52aXNpYmlsaXR5ID0gdmlzaWJpbGl0eTtcbiAgICAgIH1cblxuICAgICAgdmFyIGRhdGEgPSB7XG4gICAgICAgICAgc291cmNlOiBzb3VyY2UsXG4gICAgICAgICAgdGFyZ2V0OiB0YXJnZXQsXG4gICAgICAgICAgY2xhc3M6IHNiZ25jbGFzcyxcbiAgICAgICAgICBsYW5ndWFnZTogbGFuZ3VhZ2UsXG4gICAgICB9O1xuXG4gICAgICB2YXIgZGVmYXVsdHMgPSBlbGVtZW50VXRpbGl0aWVzLmdldERlZmF1bHRQcm9wZXJ0aWVzKCBzYmduY2xhc3MgKTtcblxuICAgICAgLy8gZXh0ZW5kIHRoZSBkYXRhIHdpdGggZGVmYXVsdCBwcm9wZXJ0aWVzIG9mIGVkZ2Ugc3R5bGVcbiAgICAgIE9iamVjdC5rZXlzKCBkZWZhdWx0cyApLmZvckVhY2goIGZ1bmN0aW9uKCBwcm9wICkge1xuICAgICAgICBkYXRhWyBwcm9wIF0gPSBkZWZhdWx0c1sgcHJvcCBdO1xuICAgICAgfSApO1xuXG4gICAgICBpZihpZCkge1xuICAgICAgICBkYXRhLmlkID0gaWQ7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgZGF0YS5pZCA9IGVsZW1lbnRVdGlsaXRpZXMuZ2VuZXJhdGVFZGdlSWQoKTtcbiAgICAgIH1cblxuICAgICAgaWYoZWxlbWVudFV0aWxpdGllcy5jYW5IYXZlU0JHTkNhcmRpbmFsaXR5KHNiZ25jbGFzcykpe1xuICAgICAgICBkYXRhLmNhcmRpbmFsaXR5ID0gMDtcbiAgICAgIH1cblxuICAgICAgdmFyIHNvdXJjZU5vZGUgPSBjeS5nZXRFbGVtZW50QnlJZChzb3VyY2UpOyAvLyBUaGUgb3JpZ2luYWwgc291cmNlIG5vZGVcbiAgICAgIHZhciB0YXJnZXROb2RlID0gY3kuZ2V0RWxlbWVudEJ5SWQodGFyZ2V0KTsgLy8gVGhlIG9yaWdpbmFsIHRhcmdldCBub2RlXG4gICAgICB2YXIgc291cmNlSGFzUG9ydHMgPSBzb3VyY2VOb2RlLmRhdGEoJ3BvcnRzJykubGVuZ3RoID09PSAyO1xuICAgICAgdmFyIHRhcmdldEhhc1BvcnRzID0gdGFyZ2V0Tm9kZS5kYXRhKCdwb3J0cycpLmxlbmd0aCA9PT0gMjtcbiAgICAgIC8vIFRoZSBwb3J0c291cmNlIGFuZCBwb3J0dGFyZ2V0IHZhcmlhYmxlc1xuICAgICAgdmFyIHBvcnRzb3VyY2U7XG4gICAgICB2YXIgcG9ydHRhcmdldDtcblxuICAgICAgLypcbiAgICAgICAqIEdldCBpbnB1dC9vdXRwdXQgcG9ydCBpZCdzIG9mIGEgbm9kZSB3aXRoIHRoZSBhc3N1bXB0aW9uIHRoYXQgdGhlIG5vZGUgaGFzIHZhbGlkIHBvcnRzLlxuICAgICAgICovXG4gICAgICB2YXIgZ2V0SU9Qb3J0SWRzID0gZnVuY3Rpb24gKG5vZGUpIHtcbiAgICAgICAgdmFyIG5vZGVJbnB1dFBvcnRJZCwgbm9kZU91dHB1dFBvcnRJZDtcbiAgICAgICAgdmFyIG5vZGVQb3J0c09yZGVyaW5nID0gc2JnbnZpekluc3RhbmNlLmVsZW1lbnRVdGlsaXRpZXMuZ2V0UG9ydHNPcmRlcmluZyhub2RlKTtcbiAgICAgICAgdmFyIG5vZGVQb3J0cyA9IG5vZGUuZGF0YSgncG9ydHMnKTtcbiAgICAgICAgaWYgKCBub2RlUG9ydHNPcmRlcmluZyA9PT0gJ0wtdG8tUicgfHwgbm9kZVBvcnRzT3JkZXJpbmcgPT09ICdSLXRvLUwnICkge1xuICAgICAgICAgIHZhciBsZWZ0UG9ydElkID0gbm9kZVBvcnRzWzBdLnggPCAwID8gbm9kZVBvcnRzWzBdLmlkIDogbm9kZVBvcnRzWzFdLmlkOyAvLyBUaGUgeCB2YWx1ZSBvZiBsZWZ0IHBvcnQgaXMgc3VwcG9zZWQgdG8gYmUgbmVnYXRpdmVcbiAgICAgICAgICB2YXIgcmlnaHRQb3J0SWQgPSBub2RlUG9ydHNbMF0ueCA+IDAgPyBub2RlUG9ydHNbMF0uaWQgOiBub2RlUG9ydHNbMV0uaWQ7IC8vIFRoZSB4IHZhbHVlIG9mIHJpZ2h0IHBvcnQgaXMgc3VwcG9zZWQgdG8gYmUgcG9zaXRpdmVcbiAgICAgICAgICAvKlxuICAgICAgICAgICAqIElmIHRoZSBwb3J0IG9yZGVyaW5nIGlzIGxlZnQgdG8gcmlnaHQgdGhlbiB0aGUgaW5wdXQgcG9ydCBpcyB0aGUgbGVmdCBwb3J0IGFuZCB0aGUgb3V0cHV0IHBvcnQgaXMgdGhlIHJpZ2h0IHBvcnQuXG4gICAgICAgICAgICogRWxzZSBpZiBpdCBpcyByaWdodCB0byBsZWZ0IGl0IGlzIHZpY2UgdmVyc2FcbiAgICAgICAgICAgKi9cbiAgICAgICAgICBub2RlSW5wdXRQb3J0SWQgPSBub2RlUG9ydHNPcmRlcmluZyA9PT0gJ0wtdG8tUicgPyBsZWZ0UG9ydElkIDogcmlnaHRQb3J0SWQ7XG4gICAgICAgICAgbm9kZU91dHB1dFBvcnRJZCA9IG5vZGVQb3J0c09yZGVyaW5nID09PSAnUi10by1MJyA/IGxlZnRQb3J0SWQgOiByaWdodFBvcnRJZDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICggbm9kZVBvcnRzT3JkZXJpbmcgPT09ICdULXRvLUInIHx8IG5vZGVQb3J0c09yZGVyaW5nID09PSAnQi10by1UJyApe1xuICAgICAgICAgIHZhciB0b3BQb3J0SWQgPSBub2RlUG9ydHNbMF0ueSA8IDAgPyBub2RlUG9ydHNbMF0uaWQgOiBub2RlUG9ydHNbMV0uaWQ7IC8vIFRoZSB5IHZhbHVlIG9mIHRvcCBwb3J0IGlzIHN1cHBvc2VkIHRvIGJlIG5lZ2F0aXZlXG4gICAgICAgICAgdmFyIGJvdHRvbVBvcnRJZCA9IG5vZGVQb3J0c1swXS55ID4gMCA/IG5vZGVQb3J0c1swXS5pZCA6IG5vZGVQb3J0c1sxXS5pZDsgLy8gVGhlIHkgdmFsdWUgb2YgYm90dG9tIHBvcnQgaXMgc3VwcG9zZWQgdG8gYmUgcG9zaXRpdmVcbiAgICAgICAgICAvKlxuICAgICAgICAgICAqIElmIHRoZSBwb3J0IG9yZGVyaW5nIGlzIHRvcCB0byBib3R0b20gdGhlbiB0aGUgaW5wdXQgcG9ydCBpcyB0aGUgdG9wIHBvcnQgYW5kIHRoZSBvdXRwdXQgcG9ydCBpcyB0aGUgYm90dG9tIHBvcnQuXG4gICAgICAgICAgICogRWxzZSBpZiBpdCBpcyByaWdodCB0byBsZWZ0IGl0IGlzIHZpY2UgdmVyc2FcbiAgICAgICAgICAgKi9cbiAgICAgICAgICBub2RlSW5wdXRQb3J0SWQgPSBub2RlUG9ydHNPcmRlcmluZyA9PT0gJ1QtdG8tQicgPyB0b3BQb3J0SWQgOiBib3R0b21Qb3J0SWQ7XG4gICAgICAgICAgbm9kZU91dHB1dFBvcnRJZCA9IG5vZGVQb3J0c09yZGVyaW5nID09PSAnQi10by1UJyA/IHRvcFBvcnRJZCA6IGJvdHRvbVBvcnRJZDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFJldHVybiBhbiBvYmplY3QgY29udGFpbmluZyB0aGUgSU8gcG9ydHMgb2YgdGhlIG5vZGVcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBpbnB1dFBvcnRJZDogbm9kZUlucHV0UG9ydElkLFxuICAgICAgICAgIG91dHB1dFBvcnRJZDogbm9kZU91dHB1dFBvcnRJZFxuICAgICAgICB9O1xuICAgICAgfTtcblxuICAgICAgLy8gSWYgYXQgbGVhc3Qgb25lIGVuZCBvZiB0aGUgZWRnZSBoYXMgcG9ydHMgdGhlbiB3ZSBzaG91bGQgZGV0ZXJtaW5lIHRoZSBwb3J0cyB3aGVyZSB0aGUgZWRnZSBzaG91bGQgYmUgY29ubmVjdGVkLlxuICAgICAgaWYgKHNvdXJjZUhhc1BvcnRzIHx8IHRhcmdldEhhc1BvcnRzKSB7XG4gICAgICAgIHZhciBzb3VyY2VOb2RlSW5wdXRQb3J0SWQsIHNvdXJjZU5vZGVPdXRwdXRQb3J0SWQsIHRhcmdldE5vZGVJbnB1dFBvcnRJZCwgdGFyZ2V0Tm9kZU91dHB1dFBvcnRJZDtcblxuICAgICAgICAvLyBJZiBzb3VyY2Ugbm9kZSBoYXMgcG9ydHMgc2V0IHRoZSB2YXJpYWJsZXMgZGVkaWNhdGVkIGZvciBpdHMgSU8gcG9ydHNcbiAgICAgICAgaWYgKCBzb3VyY2VIYXNQb3J0cyApIHtcbiAgICAgICAgICB2YXIgaW9Qb3J0cyA9IGdldElPUG9ydElkcyhzb3VyY2VOb2RlKTtcbiAgICAgICAgICBzb3VyY2VOb2RlSW5wdXRQb3J0SWQgPSBpb1BvcnRzLmlucHV0UG9ydElkO1xuICAgICAgICAgIHNvdXJjZU5vZGVPdXRwdXRQb3J0SWQgPSBpb1BvcnRzLm91dHB1dFBvcnRJZDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIElmIHRhcmdldCBub2RlIGhhcyBwb3J0cyBzZXQgdGhlIHZhcmlhYmxlcyBkZWRpY2F0ZWQgZm9yIGl0cyBJTyBwb3J0c1xuICAgICAgICBpZiAoIHRhcmdldEhhc1BvcnRzICkge1xuICAgICAgICAgIHZhciBpb1BvcnRzID0gZ2V0SU9Qb3J0SWRzKHRhcmdldE5vZGUpO1xuICAgICAgICAgIHRhcmdldE5vZGVJbnB1dFBvcnRJZCA9IGlvUG9ydHMuaW5wdXRQb3J0SWQ7XG4gICAgICAgICAgdGFyZ2V0Tm9kZU91dHB1dFBvcnRJZCA9IGlvUG9ydHMub3V0cHV0UG9ydElkO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHNiZ25jbGFzcyA9PT0gJ2NvbnN1bXB0aW9uJykge1xuICAgICAgICAgIC8vIEEgY29uc3VtcHRpb24gZWRnZSBzaG91bGQgYmUgY29ubmVjdGVkIHRvIHRoZSBpbnB1dCBwb3J0IG9mIHRoZSB0YXJnZXQgbm9kZSB3aGljaCBpcyBzdXBwb3NlZCB0byBiZSBhIHByb2Nlc3MgKGFueSBraW5kIG9mKVxuICAgICAgICAgIHBvcnRzb3VyY2UgPSBzb3VyY2VOb2RlT3V0cHV0UG9ydElkO1xuICAgICAgICAgIHBvcnR0YXJnZXQgPSB0YXJnZXROb2RlSW5wdXRQb3J0SWQ7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoc2JnbmNsYXNzID09PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICAvLyBBIHByb2R1Y3Rpb24gZWRnZSBzaG91bGQgYmUgY29ubmVjdGVkIHRvIHRoZSBvdXRwdXQgcG9ydCBvZiB0aGUgc291cmNlIG5vZGUgd2hpY2ggaXMgc3VwcG9zZWQgdG8gYmUgYSBwcm9jZXNzIChhbnkga2luZCBvZilcbiAgICAgICAgICAvLyBBIG1vZHVsYXRpb24gZWRnZSBtYXkgaGF2ZSBhIGxvZ2ljYWwgb3BlcmF0b3IgYXMgc291cmNlIG5vZGUgaW4gdGhpcyBjYXNlIHRoZSBlZGdlIHNob3VsZCBiZSBjb25uZWN0ZWQgdG8gdGhlIG91dHB1dCBwb3J0IG9mIGl0XG4gICAgICAgICAgLy8gVGhlIGJlbG93IGFzc2lnbm1lbnQgc2F0aXNmeSBhbGwgb2YgdGhlc2UgY29uZGl0aW9uXG4gICAgICAgICAgaWYoZ3JvdXBJRCA9PSAwIHx8IGdyb3VwSUQgPT0gdW5kZWZpbmVkKSB7IC8vIGdyb3VwSUQgMCBmb3IgcmV2ZXJzaWJsZSByZWFjdGlvbnMgZ3JvdXAgMFxuICAgICAgICAgICAgcG9ydHNvdXJjZSA9IHNvdXJjZU5vZGVPdXRwdXRQb3J0SWQ7XG4gICAgICAgICAgICBwb3J0dGFyZ2V0ID0gdGFyZ2V0Tm9kZUlucHV0UG9ydElkO1xuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIHsgLy9pZiByZWFjdGlvbiBpcyByZXZlcnNpYmxlIGFuZCBlZGdlIGJlbG9uZ3MgdG8gZ3JvdXAgMVxuICAgICAgICAgICAgcG9ydHNvdXJjZSA9IHNvdXJjZU5vZGVJbnB1dFBvcnRJZDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZihlbGVtZW50VXRpbGl0aWVzLmlzTW9kdWxhdGlvbkFyY0NsYXNzKHNiZ25jbGFzcykgfHwgZWxlbWVudFV0aWxpdGllcy5pc0FGQXJjQ2xhc3Moc2JnbmNsYXNzKSl7XG4gICAgICAgICAgcG9ydHNvdXJjZSA9IHNvdXJjZU5vZGVPdXRwdXRQb3J0SWQ7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoc2JnbmNsYXNzID09PSAnbG9naWMgYXJjJykge1xuICAgICAgICAgIHZhciBzcmNDbGFzcyA9IHNvdXJjZU5vZGUuZGF0YSgnY2xhc3MnKTtcbiAgICAgICAgICB2YXIgdGd0Q2xhc3MgPSB0YXJnZXROb2RlLmRhdGEoJ2NsYXNzJyk7XG4gICAgICAgICAgdmFyIGlzU291cmNlTG9naWNhbE9wID0gc3JjQ2xhc3MgPT09ICdhbmQnIHx8IHNyY0NsYXNzID09PSAnb3InIHx8IHNyY0NsYXNzID09PSAnbm90JztcbiAgICAgICAgICB2YXIgaXNUYXJnZXRMb2dpY2FsT3AgPSB0Z3RDbGFzcyA9PT0gJ2FuZCcgfHwgdGd0Q2xhc3MgPT09ICdvcicgfHwgdGd0Q2xhc3MgPT09ICdub3QnO1xuXG4gICAgICAgICAgaWYgKGlzU291cmNlTG9naWNhbE9wICYmIGlzVGFyZ2V0TG9naWNhbE9wKSB7XG4gICAgICAgICAgICAvLyBJZiBib3RoIGVuZCBhcmUgbG9naWNhbCBvcGVyYXRvcnMgdGhlbiB0aGUgZWRnZSBzaG91bGQgYmUgY29ubmVjdGVkIHRvIHRoZSBpbnB1dCBwb3J0IG9mIHRoZSB0YXJnZXQgYW5kIHRoZSBvdXRwdXQgcG9ydCBvZiB0aGUgaW5wdXRcbiAgICAgICAgICAgIHBvcnR0YXJnZXQgPSB0YXJnZXROb2RlSW5wdXRQb3J0SWQ7XG4gICAgICAgICAgICBwb3J0c291cmNlID0gc291cmNlTm9kZU91dHB1dFBvcnRJZDtcbiAgICAgICAgICB9Ly8gSWYganVzdCBvbmUgZW5kIG9mIGxvZ2ljYWwgb3BlcmF0b3IgdGhlbiB0aGUgZWRnZSBzaG91bGQgYmUgY29ubmVjdGVkIHRvIHRoZSBpbnB1dCBwb3J0IG9mIHRoZSBsb2dpY2FsIG9wZXJhdG9yXG4gICAgICAgICAgZWxzZSBpZiAoaXNTb3VyY2VMb2dpY2FsT3ApIHtcbiAgICAgICAgICAgIHBvcnRzb3VyY2UgPSBzb3VyY2VOb2RlSW5wdXRQb3J0SWQ7XG4gICAgICAgICAgICBwb3J0dGFyZ2V0ID0gdGFyZ2V0Tm9kZU91dHB1dFBvcnRJZDtcbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSBpZiAoaXNUYXJnZXRMb2dpY2FsT3ApIHtcbiAgICAgICAgICAgIHBvcnRzb3VyY2UgPSBzb3VyY2VOb2RlT3V0cHV0UG9ydElkO1xuICAgICAgICAgICAgcG9ydHRhcmdldCA9IHRhcmdldE5vZGVJbnB1dFBvcnRJZDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gVGhlIGRlZmF1bHQgcG9ydHNvdXJjZS9wb3J0dGFyZ2V0IGFyZSB0aGUgc291cmNlL3RhcmdldCB0aGVtc2VsdmVzLiBJZiB0aGV5IGFyZSBub3Qgc2V0IHVzZSB0aGVzZSBkZWZhdWx0cy5cbiAgICAgIC8vIFRoZSBwb3J0c291cmNlIGFuZCBwb3J0dGFyZ2V0IGFyZSBkZXRlcm1pbmVkIHNldCB0aGVtIGluIGRhdGEgb2JqZWN0LlxuICAgICAgZGF0YS5wb3J0c291cmNlID0gcG9ydHNvdXJjZSB8fCBzb3VyY2U7XG4gICAgICBkYXRhLnBvcnR0YXJnZXQgPSBwb3J0dGFyZ2V0IHx8IHRhcmdldDtcblxuICAgICAgdmFyIGVsZXMgPSBjeS5hZGQoe1xuICAgICAgICBncm91cDogXCJlZGdlc1wiLFxuICAgICAgICBkYXRhOiBkYXRhLFxuICAgICAgICBjc3M6IGNzc1xuICAgICAgfSk7XG5cbiAgICAgIHZhciBuZXdFZGdlID0gZWxlc1tlbGVzLmxlbmd0aCAtIDFdO1xuXG4gICAgICByZXR1cm4gbmV3RWRnZTtcbiAgICB9O1xuXG4gICAgZWxlbWVudFV0aWxpdGllcy5hZGRQcm9jZXNzV2l0aENvbnZlbmllbnRFZGdlcyA9IGZ1bmN0aW9uKF9zb3VyY2UsIF90YXJnZXQsIG5vZGVQYXJhbXMpIHtcbiAgICAgIC8vIElmIHNvdXJjZSBhbmQgdGFyZ2V0IElEcyBhcmUgZ2l2ZW4gZ2V0IHRoZSBlbGVtZW50cyBieSBJRHNcbiAgICAgIHZhciBzb3VyY2UgPSB0eXBlb2YgX3NvdXJjZSA9PT0gJ3N0cmluZycgPyBjeS5nZXRFbGVtZW50QnlJZChfc291cmNlKSA6IF9zb3VyY2U7XG4gICAgICB2YXIgdGFyZ2V0ID0gdHlwZW9mIF90YXJnZXQgPT09ICdzdHJpbmcnID8gY3kuZ2V0RWxlbWVudEJ5SWQoX3RhcmdldCkgOiBfdGFyZ2V0O1xuXG4gICAgICAvLyBQcm9jZXNzIHBhcmVudCBzaG91bGQgYmUgdGhlIGNsb3Nlc3QgY29tbW9uIGFuY2VzdG9yIG9mIHRoZSBzb3VyY2UgYW5kIHRhcmdldCBub2Rlc1xuICAgICAgdmFyIHByb2Nlc3NQYXJlbnQgPSBjeS5jb2xsZWN0aW9uKFtzb3VyY2VbMF0sIHRhcmdldFswXV0pLmNvbW1vbkFuY2VzdG9ycygpLmZpcnN0KCk7XG5cbiAgICAgIC8vIFByb2Nlc3Mgc2hvdWxkIGJlIGF0IHRoZSBtaWRkbGUgb2YgdGhlIHNvdXJjZSBhbmQgdGFyZ2V0IG5vZGVzXG4gICAgICB2YXIgeCA9ICggc291cmNlLnBvc2l0aW9uKCd4JykgKyB0YXJnZXQucG9zaXRpb24oJ3gnKSApIC8gMjtcbiAgICAgIHZhciB5ID0gKCBzb3VyY2UucG9zaXRpb24oJ3knKSArIHRhcmdldC5wb3NpdGlvbigneScpICkgLyAyO1xuXG4gICAgICAvLyBDcmVhdGUgdGhlIHByb2Nlc3Mgd2l0aCBnaXZlbi9jYWxjdWxhdGVkIHZhcmlhYmxlc1xuICAgICAgdmFyIHByb2Nlc3MgPSBlbGVtZW50VXRpbGl0aWVzLmFkZE5vZGUoeCwgeSwgbm9kZVBhcmFtcywgdW5kZWZpbmVkLCBwcm9jZXNzUGFyZW50LmlkKCkpO1xuICAgICAgICB2YXIgeGRpZmYgPSBzb3VyY2UucG9zaXRpb24oJ3gnKSAtIHRhcmdldC5wb3NpdGlvbigneCcpO1xuICAgICAgICB2YXIgeWRpZmYgPSBzb3VyY2UucG9zaXRpb24oJ3knKSAtIHRhcmdldC5wb3NpdGlvbigneScpXG4gICAgICAgIGlmIChNYXRoLmFicyh4ZGlmZikgPj0gTWF0aC5hYnMoeWRpZmYpKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAoeGRpZmYgPCAwKVxuICAgICAgICAgICAgICAgIGVsZW1lbnRVdGlsaXRpZXMuc2V0UG9ydHNPcmRlcmluZyhwcm9jZXNzLCAnTC10by1SJyk7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgZWxlbWVudFV0aWxpdGllcy5zZXRQb3J0c09yZGVyaW5nKHByb2Nlc3MsICdSLXRvLUwnKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICh5ZGlmZiA8IDApXG4gICAgICAgICAgICAgICAgZWxlbWVudFV0aWxpdGllcy5zZXRQb3J0c09yZGVyaW5nKHByb2Nlc3MsICdULXRvLUInKTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBlbGVtZW50VXRpbGl0aWVzLnNldFBvcnRzT3JkZXJpbmcocHJvY2VzcywgJ0ItdG8tVCcpO1xuICAgICAgICB9XG5cblxuICAgICAgLy8gQ3JlYXRlIHRoZSBlZGdlcyBvbmUgaXMgYmV0d2VlbiB0aGUgcHJvY2VzcyBhbmQgdGhlIHNvdXJjZSBub2RlICh3aGljaCBzaG91bGQgYmUgYSBjb25zdW1wdGlvbiksXG4gICAgICAvLyB0aGUgb3RoZXIgb25lIGlzIGJldHdlZW4gdGhlIHByb2Nlc3MgYW5kIHRoZSB0YXJnZXQgbm9kZSAod2hpY2ggc2hvdWxkIGJlIGEgcHJvZHVjdGlvbikuXG4gICAgICAvLyBGb3IgbW9yZSBpbmZvcm1hdGlvbiBwbGVhc2UgcmVmZXIgdG8gU0JHTi1QRCByZWZlcmVuY2UgY2FyZC5cbiAgICAgIHZhciBlZGdlQnR3U3JjID0gZWxlbWVudFV0aWxpdGllcy5hZGRFZGdlKHNvdXJjZS5pZCgpLCBwcm9jZXNzLmlkKCksIHtjbGFzcyA6ICdjb25zdW1wdGlvbicsIGxhbmd1YWdlIDogbm9kZVBhcmFtcy5sYW5ndWFnZX0pO1xuICAgICAgdmFyIGVkZ2VCdHdUZ3QgPSBlbGVtZW50VXRpbGl0aWVzLmFkZEVkZ2UocHJvY2Vzcy5pZCgpLCB0YXJnZXQuaWQoKSwge2NsYXNzIDogJ3Byb2R1Y3Rpb24nLCBsYW5ndWFnZSA6IG5vZGVQYXJhbXMubGFuZ3VhZ2V9KTtcblxuICAgICAgLy8gQ3JlYXRlIGEgY29sbGVjdGlvbiBpbmNsdWRpbmcgdGhlIGVsZW1lbnRzIGFuZCB0byBiZSByZXR1cm5lZFxuICAgICAgdmFyIGNvbGxlY3Rpb24gPSBjeS5jb2xsZWN0aW9uKFtwcm9jZXNzWzBdLCBlZGdlQnR3U3JjWzBdLCBlZGdlQnR3VGd0WzBdXSk7XG4gICAgICByZXR1cm4gY29sbGVjdGlvbjtcbiAgICB9O1xuXG4gICAgLypcbiAgICAgKiBUaGlzIG1ldGhvZCBhc3N1bWVzIHRoYXQgcGFyYW0ubm9kZXNUb01ha2VDb21wb3VuZCBjb250YWlucyBhdCBsZWFzdCBvbmUgbm9kZVxuICAgICAqIGFuZCBhbGwgb2YgdGhlIG5vZGVzIGluY2x1ZGluZyBpbiBpdCBoYXZlIHRoZSBzYW1lIHBhcmVudC4gSXQgY3JlYXRlcyBhIGNvbXBvdW5kIGZvdCB0aGUgZ2l2ZW4gbm9kZXMgYW4gaGF2aW5nIHRoZSBnaXZlbiB0eXBlLlxuICAgICAqL1xuICAgIGVsZW1lbnRVdGlsaXRpZXMuY3JlYXRlQ29tcG91bmRGb3JHaXZlbk5vZGVzID0gZnVuY3Rpb24gKG5vZGVzVG9NYWtlQ29tcG91bmQsIGNvbXBvdW5kVHlwZSkge1xuICAgICAgdmFyIG9sZFBhcmVudElkID0gbm9kZXNUb01ha2VDb21wb3VuZFswXS5kYXRhKFwicGFyZW50XCIpO1xuICAgICAgdmFyIGxhbmd1YWdlID0gbm9kZXNUb01ha2VDb21wb3VuZFswXS5kYXRhKFwibGFuZ3VhZ2VcIik7XG4gICAgICAvLyBpZiBub2Rlc1RvTWFrZUNvbXBvdW5kIGNvbnRhaW4gYm90aCBQRCBhbmQgQUYgbm9kZXMsIHRoZW4gc2V0IGxhbmd1YWdlIG9mIGNvbXBvdW5kIGFzIFVua25vd25cbiAgICAgIGZvciggdmFyIGk9MTsgaTxub2Rlc1RvTWFrZUNvbXBvdW5kLmxlbmd0aDsgaSsrKXtcbiAgICAgICAgaWYobm9kZXNUb01ha2VDb21wb3VuZFtpXSAhPSBsYW5ndWFnZSl7XG4gICAgICAgICAgbGFuZ3VhZ2UgPSBcIlVua25vd25cIjtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gVGhlIHBhcmVudCBvZiBuZXcgY29tcG91bmQgd2lsbCBiZSB0aGUgb2xkIHBhcmVudCBvZiB0aGUgbm9kZXMgdG8gbWFrZSBjb21wb3VuZC4geCwgeSBhbmQgaWQgcGFyYW1ldGVycyBhcmUgbm90IHNldC5cbiAgICAgIHZhciBuZXdDb21wb3VuZCA9IGVsZW1lbnRVdGlsaXRpZXMuYWRkTm9kZSh1bmRlZmluZWQsIHVuZGVmaW5lZCwge2NsYXNzIDogY29tcG91bmRUeXBlLCBsYW5ndWFnZSA6IGxhbmd1YWdlfSwgdW5kZWZpbmVkLCBvbGRQYXJlbnRJZCk7XG4gICAgICB2YXIgbmV3Q29tcG91bmRJZCA9IG5ld0NvbXBvdW5kLmlkKCk7XG4gICAgICB2YXIgbmV3RWxlcyA9IGVsZW1lbnRVdGlsaXRpZXMuY2hhbmdlUGFyZW50KG5vZGVzVG9NYWtlQ29tcG91bmQsIG5ld0NvbXBvdW5kSWQpO1xuICAgICAgbmV3RWxlcyA9IG5ld0VsZXMudW5pb24obmV3Q29tcG91bmQpO1xuICAgICAgcmV0dXJuIG5ld0VsZXM7XG4gICAgfTtcblxuICAgIGVsZW1lbnRVdGlsaXRpZXMuY3JlYXRlVHJhbnNsYXRpb25SZWFjdGlvbiA9IGZ1bmN0aW9uKG1SbmFOYW1lLCBwcm90ZWluTmFtZSwgcHJvY2Vzc1Bvc2l0aW9uLCBlZGdlTGVuZ3RoKSB7XG4gICAgICBjb25zdCBkZWZhdWx0UHJvY2Vzc1Byb3BlcnRpZXMgPSBlbGVtZW50VXRpbGl0aWVzLmdldERlZmF1bHRQcm9wZXJ0aWVzKFwidHJhbnNsYXRpb25cIik7XG4gICAgICBjb25zdCBkZWZhdWx0U291cmNlQW5kU2lua1Byb3BlcnRpZXMgPSBlbGVtZW50VXRpbGl0aWVzLmdldERlZmF1bHRQcm9wZXJ0aWVzKFwic291cmNlIGFuZCBzaW5rXCIpO1xuICAgICAgY29uc3QgZGVmYXVsdE51Y2xlaWNBY2lkRmVhdHVyZVByb3BlcnRpZXMgPSBlbGVtZW50VXRpbGl0aWVzLmdldERlZmF1bHRQcm9wZXJ0aWVzKFwibnVjbGVpYyBhY2lkIGZlYXR1cmVcIik7XG4gICAgICBjb25zdCBkZWZhdWx0TWFjcm9tb2xlY3VsZVByb3BlcnRpZXMgPSBlbGVtZW50VXRpbGl0aWVzLmdldERlZmF1bHRQcm9wZXJ0aWVzKFwibWFjcm9tb2xlY3VsZVwiKTtcbiAgICAgIGNvbnN0IG1hY3JvbW9sZWN1bGVXaWR0aCA9IGRlZmF1bHRNYWNyb21vbGVjdWxlUHJvcGVydGllcy53aWR0aCB8fCA1MDtcbiAgICAgIGNvbnN0IHNvdXJjZUFuZFNpbmtXaWR0aCA9IGRlZmF1bHRTb3VyY2VBbmRTaW5rUHJvcGVydGllcy53aWR0aCAgfHwgNTA7XG4gICAgICBjb25zdCBudWNsZWljQWNpZEZlYXR1cmVIZWlnaHQgPSBkZWZhdWx0TnVjbGVpY0FjaWRGZWF0dXJlUHJvcGVydGllcy5oZWlnaHQgfHwgNTA7XG4gICAgICBjb25zdCBwcm9jZXNzV2lkdGggPSBkZWZhdWx0UHJvY2Vzc1Byb3BlcnRpZXMud2lkdGggfHwgNTA7XG4gICAgICBjb25zdCBwcm9jZXNzSGVpZ2h0ID0gZGVmYXVsdFByb2Nlc3NQcm9wZXJ0aWVzLmhlaWdodCB8fCA1MDtcbiAgICAgIHZhciBwcm9jZXNzUG9zaXRpb24gPSBwcm9jZXNzUG9zaXRpb24gfHwgZWxlbWVudFV0aWxpdGllcy5jb252ZXJ0VG9Nb2RlbFBvc2l0aW9uKHt4OiBjeS53aWR0aCgpIC8gMiwgeTogY3kuaGVpZ2h0KCkgLyAyfSk7XG4gICAgICB2YXIgZWRnZUxlbmd0aCA9IGVkZ2VMZW5ndGggfHwgNjA7XG5cbiAgICAgIGN5LnN0YXJ0QmF0Y2goKTtcbiAgICAgIGlmICghZWxlbWVudFV0aWxpdGllcy5nZXRNYXBUeXBlKCkpIHtcbiAgICAgICAgZWxlbWVudFV0aWxpdGllcy5zZXRNYXBUeXBlKFwiUERcIik7XG4gICAgICB9XG5cbiAgICAgIHZhciBwcm9jZXNzTm9kZSA9IGVsZW1lbnRVdGlsaXRpZXMuYWRkTm9kZShwcm9jZXNzUG9zaXRpb24ueCwgcHJvY2Vzc1Bvc2l0aW9uLnksIHtjbGFzczogXCJwcm9jZXNzXCIsIGxhbmd1YWdlOiBcIlBEXCJ9KTtcbiAgICAgIGVsZW1lbnRVdGlsaXRpZXMuc2V0UG9ydHNPcmRlcmluZyhwcm9jZXNzTm9kZSwgXCJMLXRvLVJcIik7XG4gICAgICBwcm9jZXNzTm9kZS5kYXRhKCdqdXN0QWRkZWQnLCB0cnVlKTtcblxuICAgICAgY29uc3QgeFBvc09mU291cmNlQW5kU2lua05vZGUgPSBwcm9jZXNzUG9zaXRpb24ueCAtIGVkZ2VMZW5ndGggLSBwcm9jZXNzV2lkdGggLyAyIC0gc291cmNlQW5kU2lua1dpZHRoIC8gMjtcbiAgICAgIGNvbnN0IHlQb3NPZlNvdXJjZUFuZFNpbmtOb2RlID0gcHJvY2Vzc1Bvc2l0aW9uLnk7XG4gICAgICB2YXIgc291cmNlQW5kU2lua05vZGUgPSBlbGVtZW50VXRpbGl0aWVzLmFkZE5vZGUoeFBvc09mU291cmNlQW5kU2lua05vZGUsIHlQb3NPZlNvdXJjZUFuZFNpbmtOb2RlLCB7Y2xhc3M6ICdzb3VyY2UgYW5kIHNpbmsnLCBsYW5ndWFnZTogJ1BEJ30pO1xuICAgICAgc291cmNlQW5kU2lua05vZGUuZGF0YSgnanVzdEFkZGVkJywgdHJ1ZSk7XG5cbiAgICAgIHZhciBjb25zdW1wdGlvbkVkZ2UgPSBlbGVtZW50VXRpbGl0aWVzLmFkZEVkZ2Uoc291cmNlQW5kU2lua05vZGUuaWQoKSwgcHJvY2Vzc05vZGUuaWQoKSwge2NsYXNzOiAnY29uc3VtcHRpb24nLCBsYW5ndWFnZTogJ1BEJ30pO1xuICAgICAgY29uc3VtcHRpb25FZGdlLmRhdGEoJ2p1c3RBZGRlZCcsIHRydWUpO1xuXG4gICAgICBjb25zdCB4UG9zT2ZtUm5hTm9kZSA9IHByb2Nlc3NQb3NpdGlvbi54O1xuICAgICAgY29uc3QgeVBvc09mbVJuYU5vZGUgPSBwcm9jZXNzUG9zaXRpb24ueSAtIGVkZ2VMZW5ndGggLSBwcm9jZXNzSGVpZ2h0IC8gMiAtIG51Y2xlaWNBY2lkRmVhdHVyZUhlaWdodCAvIDI7XG4gICAgICB2YXIgbVJuYU5vZGUgPSBlbGVtZW50VXRpbGl0aWVzLmFkZE5vZGUoeFBvc09mbVJuYU5vZGUsIHlQb3NPZm1SbmFOb2RlLCB7Y2xhc3M6ICdudWNsZWljIGFjaWQgZmVhdHVyZScsIGxhbmd1YWdlOiAnUEQnfSk7XG4gICAgICBtUm5hTm9kZS5kYXRhKCdqdXN0QWRkZWQnLCB0cnVlKTtcbiAgICAgIG1SbmFOb2RlLmRhdGEoJ2xhYmVsJywgbVJuYU5hbWUpO1xuICAgICAgY29uc3QgaW5mb2JveE9iamVjdE9mR2VuZSA9IHtcbiAgICAgICAgY2xheno6IFwidW5pdCBvZiBpbmZvcm1hdGlvblwiLFxuICAgICAgICBsYWJlbDoge1xuICAgICAgICAgIHRleHQ6ICdjdDptUk5BJ1xuICAgICAgICB9LFxuICAgICAgICBiYm94OiB7XG4gICAgICAgICAgdzogNDUsXG4gICAgICAgICAgaDogMTVcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGVsZW1lbnRVdGlsaXRpZXMuYWRkU3RhdGVPckluZm9Cb3gobVJuYU5vZGUsIGluZm9ib3hPYmplY3RPZkdlbmUpO1xuXG4gICAgICB2YXIgbmVjZXNzYXJ5U3RpbXVsYXRpb25FZGdlID0gZWxlbWVudFV0aWxpdGllcy5hZGRFZGdlKG1SbmFOb2RlLmlkKCksIHByb2Nlc3NOb2RlLmlkKCksIHtjbGFzczogJ25lY2Vzc2FyeSBzdGltdWxhdGlvbicsIGxhbmd1YWdlOiAnUEQnfSk7XG4gICAgICBuZWNlc3NhcnlTdGltdWxhdGlvbkVkZ2UuZGF0YSgnanVzdEFkZGVkJywgdHJ1ZSk7XG5cbiAgICAgIGNvbnN0IHhQb3NPZlByb3RlaW5Ob2RlID0gcHJvY2Vzc1Bvc2l0aW9uLnggKyBlZGdlTGVuZ3RoICsgcHJvY2Vzc1dpZHRoIC8gMiArIG1hY3JvbW9sZWN1bGVXaWR0aCAvIDI7XG4gICAgICBjb25zdCB5UG9zdE9mUHJvdGVpbk5vZGUgPSBwcm9jZXNzUG9zaXRpb24ueTtcbiAgICAgIHZhciBwcm90ZWluTm9kZSA9IGVsZW1lbnRVdGlsaXRpZXMuYWRkTm9kZSh4UG9zT2ZQcm90ZWluTm9kZSwgeVBvc3RPZlByb3RlaW5Ob2RlLCB7Y2xhc3M6ICdtYWNyb21vbGVjdWxlJywgbGFuZ3VhZ2U6ICdQRCd9KTtcbiAgICAgIHByb3RlaW5Ob2RlLmRhdGEoJ2p1c3RBZGRlZCcsIHRydWUpO1xuICAgICAgcHJvdGVpbk5vZGUuZGF0YSgnbGFiZWwnLCBwcm90ZWluTmFtZSk7XG4gIFxuICAgICAgdmFyIHByb2R1Y3Rpb25FZGdlID0gZWxlbWVudFV0aWxpdGllcy5hZGRFZGdlKHByb2Nlc3NOb2RlLmlkKCksIHByb3RlaW5Ob2RlLmlkKCksIHtjbGFzczogJ3Byb2R1Y3Rpb24nLCBsYW5ndWFnZTogJ1BEJ30pO1xuICAgICAgcHJvZHVjdGlvbkVkZ2UuZGF0YSgnanVzdEFkZGVkJywgdHJ1ZSk7XG5cbiAgICAgIGN5LmVuZEJhdGNoKCk7XG5cbiAgICAgIC8vZmlsdGVyIHRoZSBqdXN0IGFkZGVkIGVsZW1lbXRzIHRvIHJldHVybiB0aGVtIGFuZCByZW1vdmUganVzdCBhZGRlZCBtYXJrXG4gICAgICB2YXIgZWxlcyA9IGN5LmVsZW1lbnRzKCdbanVzdEFkZGVkXScpO1xuICAgICAgZWxlcy5yZW1vdmVEYXRhKCdqdXN0QWRkZWQnKTtcblxuICAgICAgY3kuZWxlbWVudHMoKS51bnNlbGVjdCgpO1xuICAgICAgZWxlcy5zZWxlY3QoKTtcblxuICAgICAgcmV0dXJuIGVsZXM7IC8vIFJldHVybiB0aGUganVzdCBhZGRlZCBlbGVtZW50c1xuICAgIH07XG5cbiAgICBlbGVtZW50VXRpbGl0aWVzLmNyZWF0ZVRyYW5zY3JpcHRpb25SZWFjdGlvbiA9IGZ1bmN0aW9uKGdlbmVOYW1lLCBtUm5hTmFtZSwgcHJvY2Vzc1Bvc2l0aW9uLCBlZGdlTGVuZ3RoKSB7XG4gICAgICBjb25zdCBkZWZhdWx0UHJvY2Vzc1Byb3BlcnRpZXMgPSBlbGVtZW50VXRpbGl0aWVzLmdldERlZmF1bHRQcm9wZXJ0aWVzKFwidHJhbnNjcmlwdGlvblwiKTtcbiAgICAgIGNvbnN0IGRlZmF1bHRTb3VyY2VBbmRTaW5rUHJvcGVydGllcyA9IGVsZW1lbnRVdGlsaXRpZXMuZ2V0RGVmYXVsdFByb3BlcnRpZXMoXCJzb3VyY2UgYW5kIHNpbmtcIik7XG4gICAgICBjb25zdCBkZWZhdWx0TnVjbGVpY0FjaWRGZWF0dXJlUHJvcGVydGllcyA9IGVsZW1lbnRVdGlsaXRpZXMuZ2V0RGVmYXVsdFByb3BlcnRpZXMoXCJudWNsZWljIGFjaWQgZmVhdHVyZVwiKTtcbiAgICAgIGNvbnN0IHNvdXJjZUFuZFNpbmtXaWR0aCA9IGRlZmF1bHRTb3VyY2VBbmRTaW5rUHJvcGVydGllcy53aWR0aCAgfHwgNTA7XG4gICAgICBjb25zdCBudWNsZWljQWNpZEZlYXR1cmVIZWlnaHQgPSBkZWZhdWx0TnVjbGVpY0FjaWRGZWF0dXJlUHJvcGVydGllcy5oZWlnaHQgfHwgNTA7XG4gICAgICBjb25zdCBudWNsZWljQWNpZEZlYXR1cmVXaWR0aCA9IGRlZmF1bHROdWNsZWljQWNpZEZlYXR1cmVQcm9wZXJ0aWVzLndpZHRoIHx8IDUwO1xuICAgICAgY29uc3QgcHJvY2Vzc1dpZHRoID0gZGVmYXVsdFByb2Nlc3NQcm9wZXJ0aWVzLndpZHRoIHx8IDUwO1xuICAgICAgY29uc3QgcHJvY2Vzc0hlaWdodCA9IGRlZmF1bHRQcm9jZXNzUHJvcGVydGllcy5oZWlnaHQgfHwgNTA7XG4gICAgICB2YXIgcHJvY2Vzc1Bvc2l0aW9uID0gcHJvY2Vzc1Bvc2l0aW9uIHx8IGVsZW1lbnRVdGlsaXRpZXMuY29udmVydFRvTW9kZWxQb3NpdGlvbih7eDogY3kud2lkdGgoKSAvIDIsIHk6IGN5LmhlaWdodCgpIC8gMn0pO1xuICAgICAgdmFyIGVkZ2VMZW5ndGggPSBlZGdlTGVuZ3RoIHx8IDYwO1xuXG4gICAgICBjeS5zdGFydEJhdGNoKCk7XG4gICAgICBpZiAoIWVsZW1lbnRVdGlsaXRpZXMuZ2V0TWFwVHlwZSgpKSB7XG4gICAgICAgIGVsZW1lbnRVdGlsaXRpZXMuc2V0TWFwVHlwZShcIlBEXCIpO1xuICAgICAgfVxuXG4gICAgICB2YXIgcHJvY2Vzc05vZGUgPSBlbGVtZW50VXRpbGl0aWVzLmFkZE5vZGUocHJvY2Vzc1Bvc2l0aW9uLngsIHByb2Nlc3NQb3NpdGlvbi55LCB7Y2xhc3M6IFwicHJvY2Vzc1wiLCBsYW5ndWFnZTogXCJQRFwifSk7XG4gICAgICBlbGVtZW50VXRpbGl0aWVzLnNldFBvcnRzT3JkZXJpbmcocHJvY2Vzc05vZGUsIFwiTC10by1SXCIpO1xuICAgICAgcHJvY2Vzc05vZGUuZGF0YSgnanVzdEFkZGVkJywgdHJ1ZSk7XG5cbiAgICAgIGNvbnN0IHhQb3NPZlNvdXJjZUFuZFNpbmtOb2RlID0gcHJvY2Vzc1Bvc2l0aW9uLnggLSBlZGdlTGVuZ3RoIC0gcHJvY2Vzc1dpZHRoIC8gMiAtIHNvdXJjZUFuZFNpbmtXaWR0aCAvIDI7XG4gICAgICBjb25zdCB5UG9zT2ZTb3VyY2VBbmRTaW5rTm9kZSA9IHByb2Nlc3NQb3NpdGlvbi55O1xuICAgICAgdmFyIHNvdXJjZUFuZFNpbmtOb2RlID0gZWxlbWVudFV0aWxpdGllcy5hZGROb2RlKHhQb3NPZlNvdXJjZUFuZFNpbmtOb2RlLCB5UG9zT2ZTb3VyY2VBbmRTaW5rTm9kZSwge2NsYXNzOiAnc291cmNlIGFuZCBzaW5rJywgbGFuZ3VhZ2U6ICdQRCd9KTtcbiAgICAgIHNvdXJjZUFuZFNpbmtOb2RlLmRhdGEoJ2p1c3RBZGRlZCcsIHRydWUpO1xuXG4gICAgICB2YXIgY29uc3VtcHRpb25FZGdlID0gZWxlbWVudFV0aWxpdGllcy5hZGRFZGdlKHNvdXJjZUFuZFNpbmtOb2RlLmlkKCksIHByb2Nlc3NOb2RlLmlkKCksIHtjbGFzczogJ2NvbnN1bXB0aW9uJywgbGFuZ3VhZ2U6ICdQRCd9KTtcbiAgICAgIGNvbnN1bXB0aW9uRWRnZS5kYXRhKCdqdXN0QWRkZWQnLCB0cnVlKTtcblxuICAgICAgY29uc3QgeFBvc09mR2VuZU5vZGUgPSBwcm9jZXNzUG9zaXRpb24ueDtcbiAgICAgIGNvbnN0IHlQb3NPZkdlbmVOb2RlID0gcHJvY2Vzc1Bvc2l0aW9uLnkgLSBlZGdlTGVuZ3RoIC0gcHJvY2Vzc0hlaWdodCAvIDIgLSBudWNsZWljQWNpZEZlYXR1cmVIZWlnaHQgLyAyO1xuICAgICAgdmFyIGdlbmVOb2RlID0gZWxlbWVudFV0aWxpdGllcy5hZGROb2RlKHhQb3NPZkdlbmVOb2RlLCB5UG9zT2ZHZW5lTm9kZSwge2NsYXNzOiAnbnVjbGVpYyBhY2lkIGZlYXR1cmUnLCBsYW5ndWFnZTogJ1BEJ30pO1xuICAgICAgZ2VuZU5vZGUuZGF0YSgnanVzdEFkZGVkJywgdHJ1ZSk7XG4gICAgICBnZW5lTm9kZS5kYXRhKCdsYWJlbCcsIGdlbmVOYW1lKTtcbiAgICAgIGNvbnN0IGluZm9ib3hPYmplY3RPZkdlbmUgPSB7XG4gICAgICAgIGNsYXp6OiBcInVuaXQgb2YgaW5mb3JtYXRpb25cIixcbiAgICAgICAgbGFiZWw6IHtcbiAgICAgICAgICB0ZXh0OiAnY3Q6Z2VuZSdcbiAgICAgICAgfSxcbiAgICAgICAgYmJveDoge1xuICAgICAgICAgIHc6IDM2LFxuICAgICAgICAgIGg6IDE1XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBlbGVtZW50VXRpbGl0aWVzLmFkZFN0YXRlT3JJbmZvQm94KGdlbmVOb2RlLCBpbmZvYm94T2JqZWN0T2ZHZW5lKTtcblxuICAgICAgdmFyIG5lY2Vzc2FyeVN0aW11bGF0aW9uRWRnZSA9IGVsZW1lbnRVdGlsaXRpZXMuYWRkRWRnZShnZW5lTm9kZS5pZCgpLCBwcm9jZXNzTm9kZS5pZCgpLCB7Y2xhc3M6ICduZWNlc3Nhcnkgc3RpbXVsYXRpb24nLCBsYW5ndWFnZTogJ1BEJ30pO1xuICAgICAgbmVjZXNzYXJ5U3RpbXVsYXRpb25FZGdlLmRhdGEoJ2p1c3RBZGRlZCcsIHRydWUpO1xuXG4gICAgICBjb25zdCB4UG9zT2ZtUm5hTm9kZSA9IHByb2Nlc3NQb3NpdGlvbi54ICsgZWRnZUxlbmd0aCArIHByb2Nlc3NXaWR0aCAvIDIgKyBudWNsZWljQWNpZEZlYXR1cmVXaWR0aCAvIDI7XG4gICAgICBjb25zdCB5UG9zdE9mbVJuYU5vZGUgPSBwcm9jZXNzUG9zaXRpb24ueTtcbiAgICAgIHZhciBtUm5hTm9kZSA9IGVsZW1lbnRVdGlsaXRpZXMuYWRkTm9kZSh4UG9zT2ZtUm5hTm9kZSwgeVBvc3RPZm1SbmFOb2RlLCB7Y2xhc3M6ICdudWNsZWljIGFjaWQgZmVhdHVyZScsIGxhbmd1YWdlOiAnUEQnfSk7XG4gICAgICBtUm5hTm9kZS5kYXRhKCdqdXN0QWRkZWQnLCB0cnVlKTtcbiAgICAgIG1SbmFOb2RlLmRhdGEoJ2xhYmVsJywgbVJuYU5hbWUpO1xuICAgICAgY29uc3QgaW5mb2JveE9iamVjdE9mbVJuYSA9IHtcbiAgICAgICAgY2xheno6IFwidW5pdCBvZiBpbmZvcm1hdGlvblwiLFxuICAgICAgICBsYWJlbDoge1xuICAgICAgICAgIHRleHQ6ICdjdDptUk5BJ1xuICAgICAgICB9LFxuICAgICAgICBiYm94OiB7XG4gICAgICAgICAgdzogNDUsXG4gICAgICAgICAgaDogMTVcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGVsZW1lbnRVdGlsaXRpZXMuYWRkU3RhdGVPckluZm9Cb3gobVJuYU5vZGUsIGluZm9ib3hPYmplY3RPZm1SbmEpO1xuXG4gICAgICB2YXIgcHJvZHVjdGlvbkVkZ2UgPSBlbGVtZW50VXRpbGl0aWVzLmFkZEVkZ2UocHJvY2Vzc05vZGUuaWQoKSwgbVJuYU5vZGUuaWQoKSwge2NsYXNzOiAncHJvZHVjdGlvbicsIGxhbmd1YWdlOiAnUEQnfSk7XG4gICAgICBwcm9kdWN0aW9uRWRnZS5kYXRhKCdqdXN0QWRkZWQnLCB0cnVlKTtcblxuICAgICAgY3kuZW5kQmF0Y2goKTtcblxuICAgICAgLy9maWx0ZXIgdGhlIGp1c3QgYWRkZWQgZWxlbWVtdHMgdG8gcmV0dXJuIHRoZW0gYW5kIHJlbW92ZSBqdXN0IGFkZGVkIG1hcmtcbiAgICAgIHZhciBlbGVzID0gY3kuZWxlbWVudHMoJ1tqdXN0QWRkZWRdJyk7XG4gICAgICBlbGVzLnJlbW92ZURhdGEoJ2p1c3RBZGRlZCcpO1xuXG4gICAgICBjeS5lbGVtZW50cygpLnVuc2VsZWN0KCk7XG4gICAgICBlbGVzLnNlbGVjdCgpO1xuXG4gICAgICByZXR1cm4gZWxlczsgLy8gUmV0dXJuIHRoZSBqdXN0IGFkZGVkIGVsZW1lbnRzXG4gICAgfTtcblxuICAgIGVsZW1lbnRVdGlsaXRpZXMucm90YXRlOTAgPSBmdW5jdGlvbihwb2ludCwgY2VudGVyKSB7XG4gICAgICBjb25zdCByZWxhdGl2ZVggPSBjZW50ZXIueCAtIHBvaW50Lng7XG4gICAgICBjb25zdCByZWxhdGl2ZVkgPSBjZW50ZXIueSAtIHBvaW50Lnk7XG5cbiAgICAgIGNvbnN0IHJlbGF0aXZlUm90YXRlZFggPSByZWxhdGl2ZVk7XG4gICAgICBjb25zdCByZWxhdGl2ZVJvdGF0ZWRZID0gLTEgKiByZWxhdGl2ZVg7XG5cbiAgICAgIGNvbnN0IHJlc3VsdFggPSByZWxhdGl2ZVJvdGF0ZWRYICsgY2VudGVyLng7XG4gICAgICBjb25zdCByZXN1bHRZID0gcmVsYXRpdmVSb3RhdGVkWSArIGNlbnRlci55O1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICB4OiByZXN1bHRYLFxuICAgICAgICB5OiByZXN1bHRZXG4gICAgICB9XG4gICAgfVxuXG4gICAgZWxlbWVudFV0aWxpdGllcy5jcmVhdGVUcmFuc2xhdGlvbiA9IGZ1bmN0aW9uKHJlZ3VsYXRvckxhYmVsLCBvdXRwdXRMYWJlbCwgb3JpZW50YXRpb24pIHtcbiAgICAgIGNvbnN0IGRlZmF1bHRTb3VyY2VBbmRTaW5rUHJvcGVydGllcyA9IGVsZW1lbnRVdGlsaXRpZXMuZ2V0RGVmYXVsdFByb3BlcnRpZXMoXCJzb3VyY2UgYW5kIHNpbmtcIik7XG4gICAgICBjb25zdCBkZWZhdWx0TnVjbGVpY0FjaWRGZWF0dXJlUHJvcGVydGllcyA9IGVsZW1lbnRVdGlsaXRpZXMuZ2V0RGVmYXVsdFByb3BlcnRpZXMoXCJudWNsZWljIGFjaWQgZmVhdHVyZVwiKTtcbiAgICAgIGNvbnN0IGRlZmF1bHRNYWNyb21vbGVjdWxlUHJvcGV0aWVzID0gZWxlbWVudFV0aWxpdGllcy5nZXREZWZhdWx0UHJvcGVydGllcyhcIm1hY3JvbW9sZWN1bGVcIilcbiAgICAgIGNvbnN0IGRlZmF1bHRQcm9jZXNzUHJvcGVydGllcyA9IGVsZW1lbnRVdGlsaXRpZXMuZ2V0RGVmYXVsdFByb3BlcnRpZXMoXCJwcm9jZXNzXCIpO1xuICAgICAgY29uc3Qgc291cmNlQW5kU2lua1dpZHRoID0gZGVmYXVsdFNvdXJjZUFuZFNpbmtQcm9wZXJ0aWVzLndpZHRoIHx8IDUwO1xuICAgICAgY29uc3QgbnVjbGVpY0FjaWRGZWF0dXJlV2lkdGggPSBkZWZhdWx0TnVjbGVpY0FjaWRGZWF0dXJlUHJvcGVydGllcy53aWR0aCB8fCA1MDtcbiAgICAgIGNvbnN0IG51Y2xlaWNBY2lkRmVhdHVyZUhlaWdodCA9IGRlZmF1bHROdWNsZWljQWNpZEZlYXR1cmVQcm9wZXJ0aWVzLmhlaWdodCB8fCA1MDtcbiAgICAgIGNvbnN0IG1hY3JvbW9sZWN1bGVXaWR0aCA9IGRlZmF1bHRNYWNyb21vbGVjdWxlUHJvcGV0aWVzLndpZHRoIHx8IDUwO1xuICAgICAgY29uc3QgcHJvY2Vzc1dpZHRoID0gZGVmYXVsdFByb2Nlc3NQcm9wZXJ0aWVzLndpZHRoIHx8IDUwO1xuICAgICAgY29uc3QgcHJvY2Vzc0hlaWdodCA9IGRlZmF1bHRQcm9jZXNzUHJvcGVydGllcy5oZWlnaHQgfHwgNTA7XG4gICAgICBjb25zdCBwcm9jZXNzUG9zaXRpb24gPSBlbGVtZW50VXRpbGl0aWVzLmNvbnZlcnRUb01vZGVsUG9zaXRpb24oe3g6IGN5LndpZHRoKCkgLyAyLCB5OiBjeS5oZWlnaHQoKSAvIDJ9KTtcbiAgICAgIGNvbnN0IGVkZ2VMZW5ndGggPSAzMDtcbiAgICAgIGNvbnN0IHZlcnRpY2FsID0gb3JpZW50YXRpb24gPT09IFwidmVydGljYWxcIjtcbiAgICAgIGNvbnN0IHByb2Nlc3NQb3J0c09yZGVyaW5nID0gdmVydGljYWwgPyBcIlQtdG8tQlwiIDogXCJMLXRvLVJcIjtcbiAgICAgIGNvbnN0IG1pbkluZm9ib3hEaW1lbnNpb24gPSAxNTtcbiAgICAgIGNvbnN0IHdpZHRoUGVyQ2hhciA9IDY7XG4gICAgICBjb25zdCByZWd1bGF0b3JJbmZvYm94TGFiZWwgPSBcImN0Om1STkFcIjtcblxuICAgICAgY3kuc3RhcnRCYXRjaCgpO1xuXG4gICAgICBpZiAoIWVsZW1lbnRVdGlsaXRpZXMuZ2V0TWFwVHlwZSgpKSB7XG4gICAgICAgIGVsZW1lbnRVdGlsaXRpZXMuc2V0TWFwVHlwZShcIlBEXCIpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBwcm9jZXNzTm9kZSA9IGVsZW1lbnRVdGlsaXRpZXMuYWRkTm9kZShwcm9jZXNzUG9zaXRpb24ueCwgcHJvY2Vzc1Bvc2l0aW9uLnksIHtjbGFzczogXCJwcm9jZXNzXCIsIGxhbmd1YWdlOiBcIlBEXCJ9KTtcbiAgICAgIGVsZW1lbnRVdGlsaXRpZXMuc2V0UG9ydHNPcmRlcmluZyhwcm9jZXNzTm9kZSwgcHJvY2Vzc1BvcnRzT3JkZXJpbmcpO1xuICAgICAgcHJvY2Vzc05vZGUuZGF0YSgnanVzdEFkZGVkJywgdHJ1ZSk7XG5cbiAgICAgIGxldCB4UG9zT2ZJbnB1dCA9IHByb2Nlc3NQb3NpdGlvbi54IC0gZWRnZUxlbmd0aCAtIHByb2Nlc3NXaWR0aCAvIDIgLSBzb3VyY2VBbmRTaW5rV2lkdGggLyAyO1xuICAgICAgbGV0IHhQb3NPZk91dHB1dCA9IHByb2Nlc3NQb3NpdGlvbi54ICsgZWRnZUxlbmd0aCArIHByb2Nlc3NXaWR0aCAvIDIgKyBtYWNyb21vbGVjdWxlV2lkdGggLyAyO1xuICAgICAgbGV0IHlQb3NPZklucHV0ID0gcHJvY2Vzc1Bvc2l0aW9uLnk7XG4gICAgICBsZXQgeVBvc09mT3V0cHV0ID0gcHJvY2Vzc1Bvc2l0aW9uLnk7XG5cbiAgICAgIGxldCBub2RlUG9zaXRpb24gPSB7XG4gICAgICAgIHg6IHhQb3NPZklucHV0LFxuICAgICAgICB5OiB5UG9zT2ZJbnB1dFxuICAgICAgfVxuICAgICAgaWYgKHZlcnRpY2FsKSB7XG4gICAgICAgIG5vZGVQb3NpdGlvbiA9IGVsZW1lbnRVdGlsaXRpZXMucm90YXRlOTAobm9kZVBvc2l0aW9uLCBwcm9jZXNzUG9zaXRpb24pO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBpbnB1dE5vZGUgPSBlbGVtZW50VXRpbGl0aWVzLmFkZE5vZGUobm9kZVBvc2l0aW9uLngsIG5vZGVQb3NpdGlvbi55LCB7Y2xhc3M6ICdzb3VyY2UgYW5kIHNpbmsnLCBsYW5ndWFnZTogJ1BEJ30pO1xuICAgICAgaW5wdXROb2RlLmRhdGEoXCJqdXN0QWRkZWRcIiwgdHJ1ZSk7XG4gICAgICBpbnB1dE5vZGUuZGF0YShcImxhYmVsXCIsIGxhYmVsKTtcblxuICAgICAgY29uc3QgaW5wdXRFZGdlID0gZWxlbWVudFV0aWxpdGllcy5hZGRFZGdlKGlucHV0Tm9kZS5pZCgpLCBwcm9jZXNzTm9kZS5pZCgpLCB7Y2xhc3M6ICdjb25zdW1wdGlvbicsIGxhbmd1YWdlOiAnUEQnfSlcbiAgICAgIGlucHV0RWRnZS5kYXRhKFwianVzdEFkZGVkXCIsIHRydWUpO1xuXG4gICAgICBub2RlUG9zaXRpb24gPSB7XG4gICAgICAgIHg6IHhQb3NPZk91dHB1dCxcbiAgICAgICAgeTogeVBvc09mT3V0cHV0XG4gICAgICB9XG5cbiAgICAgIGlmICh2ZXJ0aWNhbCkge1xuICAgICAgICBub2RlUG9zaXRpb24gPSBlbGVtZW50VXRpbGl0aWVzLnJvdGF0ZTkwKG5vZGVQb3NpdGlvbiwgcHJvY2Vzc1Bvc2l0aW9uKTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgb3V0cHV0Tm9kZSA9IGVsZW1lbnRVdGlsaXRpZXMuYWRkTm9kZShub2RlUG9zaXRpb24ueCwgbm9kZVBvc2l0aW9uLnksIHtjbGFzczogXCJtYWNyb21vbGVjdWxlXCIsIGxhbmd1YWdlOiAnUEQnfSk7XG4gICAgICBvdXRwdXROb2RlLmRhdGEoXCJqdXN0QWRkZWRcIiwgdHJ1ZSk7XG4gICAgICBvdXRwdXROb2RlLmRhdGEoXCJsYWJlbFwiLCBvdXRwdXRMYWJlbCk7XG5cbiAgICAgIGNvbnN0IG91dHB1dEVkZ2UgPSBlbGVtZW50VXRpbGl0aWVzLmFkZEVkZ2UocHJvY2Vzc05vZGUuaWQoKSwgb3V0cHV0Tm9kZS5pZCgpLCB7Y2xhc3M6ICdwcm9kdWN0aW9uJywgbGFuZ3VhZ2U6ICdQRCd9KVxuICAgICAgb3V0cHV0RWRnZS5kYXRhKFwianVzdEFkZGVkXCIsIHRydWUpO1xuXG4gICAgICBsZXQgeFBvc09mUmVndWxhdG9yID0gcHJvY2Vzc1Bvc2l0aW9uLng7XG4gICAgICBjb25zdCBkaW1lbnNpb24gPSB2ZXJ0aWNhbCA/IG51Y2xlaWNBY2lkRmVhdHVyZVdpZHRoIDogbnVjbGVpY0FjaWRGZWF0dXJlSGVpZ2h0O1xuICAgICAgbGV0IHlQb3NPZlJlZ3VsYXRvciA9IHByb2Nlc3NQb3NpdGlvbi55IC0gKChwcm9jZXNzSGVpZ2h0IC8gMikgKyAoZGltZW5zaW9uIC8gMikgKyBlZGdlTGVuZ3RoKTsgXG5cbiAgICAgIG5vZGVQb3NpdGlvbiA9IHtcbiAgICAgICAgeDogeFBvc09mUmVndWxhdG9yLFxuICAgICAgICB5OiB5UG9zT2ZSZWd1bGF0b3JcbiAgICAgIH1cbiAgICAgIGlmICh2ZXJ0aWNhbCkge1xuICAgICAgICBub2RlUG9zaXRpb24gPSBlbGVtZW50VXRpbGl0aWVzLnJvdGF0ZTkwKG5vZGVQb3NpdGlvbiwgcHJvY2Vzc1Bvc2l0aW9uKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcmVndWxhdG9yTm9kZSA9IGVsZW1lbnRVdGlsaXRpZXMuYWRkTm9kZShub2RlUG9zaXRpb24ueCwgbm9kZVBvc2l0aW9uLnksIHtjbGFzczogXCJudWNsZWljIGFjaWQgZmVhdHVyZVwiLCBsYW5ndWFnZTogJ1BEJ30pO1xuICAgICAgcmVndWxhdG9yTm9kZS5kYXRhKCdqdXN0QWRkZWQnLCB0cnVlKTtcbiAgICAgIHJlZ3VsYXRvck5vZGUuZGF0YSgnbGFiZWwnLCByZWd1bGF0b3JMYWJlbCk7XG4gICAgICBpbmZvYm94T2JqZWN0ID0ge1xuICAgICAgICBjbGF6ejogXCJ1bml0IG9mIGluZm9ybWF0aW9uXCIsXG4gICAgICAgIGxhYmVsOiB7XG4gICAgICAgICAgdGV4dDogcmVndWxhdG9ySW5mb2JveExhYmVsXG4gICAgICAgIH0sXG4gICAgICAgIGJib3g6IHtcbiAgICAgICAgICB3OiBNYXRoLm1heChyZWd1bGF0b3JJbmZvYm94TGFiZWwubGVuZ3RoICogd2lkdGhQZXJDaGFyLCBtaW5JbmZvYm94RGltZW5zaW9uKSxcbiAgICAgICAgICBoOiBtaW5JbmZvYm94RGltZW5zaW9uXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBlbGVtZW50VXRpbGl0aWVzLmFkZFN0YXRlT3JJbmZvQm94KHJlZ3VsYXRvck5vZGUsIGluZm9ib3hPYmplY3QpO1xuXG4gICAgICBjb25zdCByZWd1bGF0b3JFZGdlID0gZWxlbWVudFV0aWxpdGllcy5hZGRFZGdlKHJlZ3VsYXRvck5vZGUuaWQoKSwgcHJvY2Vzc05vZGUuaWQoKSwge2NsYXNzOiAnbmVjZXNzYXJ5IHN0aW11bGF0aW9uJywgbGFuZ3VhZ2U6ICdQRCd9KTtcbiAgICAgIHJlZ3VsYXRvckVkZ2UuZGF0YSgnanVzdEFkZGVkJywgdHJ1ZSk7XG5cbiAgICAgIGN5LmVuZEJhdGNoKCk7XG5cbiAgICAgIGNvbnN0IGVsZXMgPSBjeS5lbGVtZW50cygnW2p1c3RBZGRlZF0nKTtcbiAgICAgIGVsZXMucmVtb3ZlRGF0YSgnanVzdEFkZGVkJyk7XG5cbiAgICAgIGN5LmVsZW1lbnRzKCkudW5zZWxlY3QoKTtcbiAgICAgIGVsZXMuc2VsZWN0KCk7XG5cbiAgICAgIHJldHVybiBlbGVzO1xuICAgIH1cblxuICAgIGVsZW1lbnRVdGlsaXRpZXMuY3JlYXRlVHJhbnNjcmlwdGlvbiA9IGZ1bmN0aW9uKGxhYmVsLCBvcmllbnRhdGlvbikge1xuICAgICAgY29uc3QgZGVmYXVsdFNvdXJjZUFuZFNpbmtQcm9wZXJ0aWVzID0gZWxlbWVudFV0aWxpdGllcy5nZXREZWZhdWx0UHJvcGVydGllcyhcInNvdXJjZSBhbmQgc2lua1wiKTtcbiAgICAgIGNvbnN0IGRlZmF1bHROdWNsZWljQWNpZEZlYXR1cmVQcm9wZXJ0aWVzID0gZWxlbWVudFV0aWxpdGllcy5nZXREZWZhdWx0UHJvcGVydGllcyhcIm51Y2xlaWMgYWNpZCBmZWF0dXJlXCIpO1xuICAgICAgY29uc3QgZGVmYXVsdFByb2Nlc3NQcm9wZXJ0aWVzID0gZWxlbWVudFV0aWxpdGllcy5nZXREZWZhdWx0UHJvcGVydGllcyhcInByb2Nlc3NcIilcbiAgICAgIGNvbnN0IHNvdXJjZUFuZFNpbmtXaWR0aCA9IGRlZmF1bHRTb3VyY2VBbmRTaW5rUHJvcGVydGllcy53aWR0aCB8fCA1MDtcbiAgICAgIGNvbnN0IG51Y2xlaWNBY2lkRmVhdHVyZVdpZHRoID0gZGVmYXVsdE51Y2xlaWNBY2lkRmVhdHVyZVByb3BlcnRpZXMud2lkdGggfHwgNTA7XG4gICAgICBjb25zdCBudWNsZWljQWNpZEZlYXR1cmVIZWlnaHQgPSBkZWZhdWx0TnVjbGVpY0FjaWRGZWF0dXJlUHJvcGVydGllcy5oZWlnaHQgfHwgNTA7XG4gICAgICBjb25zdCBwcm9jZXNzV2lkdGggPSBkZWZhdWx0UHJvY2Vzc1Byb3BlcnRpZXMud2lkdGggfHwgNTA7XG4gICAgICBjb25zdCBwcm9jZXNzSGVpZ2h0ID0gZGVmYXVsdFByb2Nlc3NQcm9wZXJ0aWVzLmhlaWdodCB8fCA1MDtcbiAgICAgIGNvbnN0IHByb2Nlc3NQb3NpdGlvbiA9IGVsZW1lbnRVdGlsaXRpZXMuY29udmVydFRvTW9kZWxQb3NpdGlvbih7eDogY3kud2lkdGgoKSAvIDIsIHk6IGN5LmhlaWdodCgpIC8gMn0pO1xuICAgICAgY29uc3QgZWRnZUxlbmd0aCA9IDMwO1xuICAgICAgY29uc3QgdmVydGljYWwgPSBvcmllbnRhdGlvbiA9PT0gXCJ2ZXJ0aWNhbFwiO1xuICAgICAgY29uc3QgcHJvY2Vzc1BvcnRzT3JkZXJpbmcgPSB2ZXJ0aWNhbCA/IFwiVC10by1CXCIgOiBcIkwtdG8tUlwiO1xuICAgICAgY29uc3QgbWluSW5mb2JveERpbWVuc2lvbiA9IDE1O1xuICAgICAgY29uc3Qgd2lkdGhQZXJDaGFyID0gNjtcbiAgICAgIGNvbnN0IG91dHB1dEluZm9ib3hMYWJlbCA9IFwiY3Q6bVJOQVwiO1xuICAgICAgY29uc3QgcmVndWxhdG9ySW5mb2JveExhYmVsID0gXCJjdDpnZW5lXCI7XG5cbiAgICAgIGN5LnN0YXJ0QmF0Y2goKTtcblxuICAgICAgaWYgKCFlbGVtZW50VXRpbGl0aWVzLmdldE1hcFR5cGUoKSkge1xuICAgICAgICBlbGVtZW50VXRpbGl0aWVzLnNldE1hcFR5cGUoXCJQRFwiKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcHJvY2Vzc05vZGUgPSBlbGVtZW50VXRpbGl0aWVzLmFkZE5vZGUocHJvY2Vzc1Bvc2l0aW9uLngsIHByb2Nlc3NQb3NpdGlvbi55LCB7Y2xhc3M6IFwicHJvY2Vzc1wiLCBsYW5ndWFnZTogXCJQRFwifSk7XG4gICAgICBlbGVtZW50VXRpbGl0aWVzLnNldFBvcnRzT3JkZXJpbmcocHJvY2Vzc05vZGUsIHByb2Nlc3NQb3J0c09yZGVyaW5nKTtcbiAgICAgIHByb2Nlc3NOb2RlLmRhdGEoJ2p1c3RBZGRlZCcsIHRydWUpO1xuXG4gICAgICBsZXQgeFBvc09mSW5wdXQgPSBwcm9jZXNzUG9zaXRpb24ueCAtIGVkZ2VMZW5ndGggLSBwcm9jZXNzV2lkdGggLyAyIC0gc291cmNlQW5kU2lua1dpZHRoIC8gMjtcbiAgICAgIGxldCB4UG9zT2ZPdXRwdXQgPSBwcm9jZXNzUG9zaXRpb24ueCArIGVkZ2VMZW5ndGggKyBwcm9jZXNzV2lkdGggLyAyICsgbnVjbGVpY0FjaWRGZWF0dXJlV2lkdGggLyAyO1xuICAgICAgbGV0IHlQb3NPZklucHV0ID0gcHJvY2Vzc1Bvc2l0aW9uLnk7XG4gICAgICBsZXQgeVBvc09mT3V0cHV0ID0gcHJvY2Vzc1Bvc2l0aW9uLnk7XG5cbiAgICAgIGxldCBub2RlUG9zaXRpb24gPSB7XG4gICAgICAgIHg6IHhQb3NPZklucHV0LFxuICAgICAgICB5OiB5UG9zT2ZJbnB1dFxuICAgICAgfVxuICAgICAgaWYgKHZlcnRpY2FsKSB7XG4gICAgICAgIG5vZGVQb3NpdGlvbiA9IGVsZW1lbnRVdGlsaXRpZXMucm90YXRlOTAobm9kZVBvc2l0aW9uLCBwcm9jZXNzUG9zaXRpb24pO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBpbnB1dE5vZGUgPSBlbGVtZW50VXRpbGl0aWVzLmFkZE5vZGUobm9kZVBvc2l0aW9uLngsIG5vZGVQb3NpdGlvbi55LCB7Y2xhc3M6ICdzb3VyY2UgYW5kIHNpbmsnLCBsYW5ndWFnZTogJ1BEJ30pO1xuICAgICAgaW5wdXROb2RlLmRhdGEoXCJqdXN0QWRkZWRcIiwgdHJ1ZSk7XG5cbiAgICAgIGNvbnN0IGlucHV0RWRnZSA9IGVsZW1lbnRVdGlsaXRpZXMuYWRkRWRnZShpbnB1dE5vZGUuaWQoKSwgcHJvY2Vzc05vZGUuaWQoKSwge2NsYXNzOiAnY29uc3VtcHRpb24nLCBsYW5ndWFnZTogJ1BEJ30pXG4gICAgICBpbnB1dEVkZ2UuZGF0YShcImp1c3RBZGRlZFwiLCB0cnVlKTtcblxuICAgICAgbm9kZVBvc2l0aW9uID0ge1xuICAgICAgICB4OiB4UG9zT2ZPdXRwdXQsXG4gICAgICAgIHk6IHlQb3NPZk91dHB1dFxuICAgICAgfVxuXG4gICAgICBpZiAodmVydGljYWwpIHtcbiAgICAgICAgbm9kZVBvc2l0aW9uID0gZWxlbWVudFV0aWxpdGllcy5yb3RhdGU5MChub2RlUG9zaXRpb24sIHByb2Nlc3NQb3NpdGlvbik7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG91dHB1dE5vZGUgPSBlbGVtZW50VXRpbGl0aWVzLmFkZE5vZGUobm9kZVBvc2l0aW9uLngsIG5vZGVQb3NpdGlvbi55LCB7Y2xhc3M6ICdudWNsZWljIGFjaWQgZmVhdHVyZScsIGxhbmd1YWdlOiAnUEQnfSk7XG4gICAgICBvdXRwdXROb2RlLmRhdGEoXCJqdXN0QWRkZWRcIiwgdHJ1ZSk7XG4gICAgICBvdXRwdXROb2RlLmRhdGEoXCJsYWJlbFwiLCBsYWJlbCk7XG4gICAgICBpbmZvYm94T2JqZWN0ID0ge1xuICAgICAgICBjbGF6ejogXCJ1bml0IG9mIGluZm9ybWF0aW9uXCIsXG4gICAgICAgIGxhYmVsOiB7XG4gICAgICAgICAgdGV4dDogb3V0cHV0SW5mb2JveExhYmVsXG4gICAgICAgIH0sXG4gICAgICAgIGJib3g6IHtcbiAgICAgICAgICB3OiBNYXRoLm1heChvdXRwdXRJbmZvYm94TGFiZWwubGVuZ3RoICogd2lkdGhQZXJDaGFyLCBtaW5JbmZvYm94RGltZW5zaW9uKSxcbiAgICAgICAgICBoOiBtaW5JbmZvYm94RGltZW5zaW9uXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBlbGVtZW50VXRpbGl0aWVzLmFkZFN0YXRlT3JJbmZvQm94KG91dHB1dE5vZGUsIGluZm9ib3hPYmplY3QpO1xuXG4gICAgICBjb25zdCBvdXRwdXRFZGdlID0gZWxlbWVudFV0aWxpdGllcy5hZGRFZGdlKHByb2Nlc3NOb2RlLmlkKCksIG91dHB1dE5vZGUuaWQoKSwge2NsYXNzOiAncHJvZHVjdGlvbicsIGxhbmd1YWdlOiAnUEQnfSlcbiAgICAgIG91dHB1dEVkZ2UuZGF0YShcImp1c3RBZGRlZFwiLCB0cnVlKTtcblxuICAgICAgbGV0IHhQb3NPZlJlZ3VsYXRvciA9IHByb2Nlc3NQb3NpdGlvbi54O1xuICAgICAgY29uc3QgZGltZW5zaW9uID0gdmVydGljYWwgPyBudWNsZWljQWNpZEZlYXR1cmVXaWR0aCA6IG51Y2xlaWNBY2lkRmVhdHVyZUhlaWdodDtcbiAgICAgIGxldCB5UG9zT2ZSZWd1bGF0b3IgPSBwcm9jZXNzUG9zaXRpb24ueSAtICgocHJvY2Vzc0hlaWdodCAvIDIpICsgKGRpbWVuc2lvbiAvIDIpICsgZWRnZUxlbmd0aCk7IFxuXG4gICAgICBub2RlUG9zaXRpb24gPSB7XG4gICAgICAgIHg6IHhQb3NPZlJlZ3VsYXRvcixcbiAgICAgICAgeTogeVBvc09mUmVndWxhdG9yXG4gICAgICB9XG4gICAgICBpZiAodmVydGljYWwpIHtcbiAgICAgICAgbm9kZVBvc2l0aW9uID0gZWxlbWVudFV0aWxpdGllcy5yb3RhdGU5MChub2RlUG9zaXRpb24sIHByb2Nlc3NQb3NpdGlvbik7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHJlZ3VsYXRvck5vZGUgPSBlbGVtZW50VXRpbGl0aWVzLmFkZE5vZGUobm9kZVBvc2l0aW9uLngsIG5vZGVQb3NpdGlvbi55LCB7Y2xhc3M6IFwibnVjbGVpYyBhY2lkIGZlYXR1cmVcIiwgbGFuZ3VhZ2U6ICdQRCd9KTtcbiAgICAgIHJlZ3VsYXRvck5vZGUuZGF0YSgnanVzdEFkZGVkJywgdHJ1ZSk7XG4gICAgICByZWd1bGF0b3JOb2RlLmRhdGEoJ2xhYmVsJywgbGFiZWwpO1xuICAgICAgaW5mb2JveE9iamVjdCA9IHtcbiAgICAgICAgY2xheno6IFwidW5pdCBvZiBpbmZvcm1hdGlvblwiLFxuICAgICAgICBsYWJlbDoge1xuICAgICAgICAgIHRleHQ6IHJlZ3VsYXRvckluZm9ib3hMYWJlbFxuICAgICAgICB9LFxuICAgICAgICBiYm94OiB7XG4gICAgICAgICAgdzogTWF0aC5tYXgocmVndWxhdG9ySW5mb2JveExhYmVsLmxlbmd0aCAqIHdpZHRoUGVyQ2hhciwgbWluSW5mb2JveERpbWVuc2lvbiksXG4gICAgICAgICAgaDogbWluSW5mb2JveERpbWVuc2lvblxuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgZWxlbWVudFV0aWxpdGllcy5hZGRTdGF0ZU9ySW5mb0JveChyZWd1bGF0b3JOb2RlLCBpbmZvYm94T2JqZWN0KTtcblxuICAgICAgY29uc3QgcmVndWxhdG9yRWRnZSA9IGVsZW1lbnRVdGlsaXRpZXMuYWRkRWRnZShyZWd1bGF0b3JOb2RlLmlkKCksIHByb2Nlc3NOb2RlLmlkKCksIHtjbGFzczogJ25lY2Vzc2FyeSBzdGltdWxhdGlvbicsIGxhbmd1YWdlOiAnUEQnfSk7XG4gICAgICByZWd1bGF0b3JFZGdlLmRhdGEoJ2p1c3RBZGRlZCcsIHRydWUpO1xuXG4gICAgICBjeS5lbmRCYXRjaCgpO1xuXG4gICAgICBjb25zdCBlbGVzID0gY3kuZWxlbWVudHMoJ1tqdXN0QWRkZWRdJyk7XG4gICAgICBlbGVzLnJlbW92ZURhdGEoJ2p1c3RBZGRlZCcpO1xuXG4gICAgICBjeS5lbGVtZW50cygpLnVuc2VsZWN0KCk7XG4gICAgICBlbGVzLnNlbGVjdCgpO1xuXG4gICAgICByZXR1cm4gZWxlcztcbiAgICB9XG5cbiAgICBlbGVtZW50VXRpbGl0aWVzLmNyZWF0ZURlZ3JhZGF0aW9uID0gZnVuY3Rpb24obWFjcm9tb2xlY3VsZSwgb3JpZW50YXRpb24pIHtcbiAgICAgIGNvbnN0IG1hY3JvbW9sZWN1bGVOYW1lID0gbWFjcm9tb2xlY3VsZS5uYW1lO1xuICAgICAgY29uc3QgZGVmYXVsdE1hY3JvbW9sZWN1bGVQcm9wZXJ0aWVzID0gZWxlbWVudFV0aWxpdGllcy5nZXREZWZhdWx0UHJvcGVydGllcyhcIm1hY3JvbW9sZWN1bGVcIik7XG4gICAgICBjb25zdCBtYWNyb21vbGVjdWxlV2lkdGggPSBkZWZhdWx0TWFjcm9tb2xlY3VsZVByb3BlcnRpZXMud2lkdGggfHwgNTA7XG4gICAgICBjb25zdCBkZWZhdWx0UHJvY2Vzc1Byb3BlcnRpZXMgPSBlbGVtZW50VXRpbGl0aWVzLmdldERlZmF1bHRQcm9wZXJ0aWVzKFwiY2F0YWx5dGljXCIpO1xuICAgICAgY29uc3QgcHJvY2Vzc1dpZHRoID0gZGVmYXVsdFByb2Nlc3NQcm9wZXJ0aWVzLndpZHRoIHx8IDUwO1xuICAgICAgY29uc3QgcHJvY2Vzc1Bvc2l0aW9uID0gZWxlbWVudFV0aWxpdGllcy5jb252ZXJ0VG9Nb2RlbFBvc2l0aW9uKHt4OiBjeS53aWR0aCgpIC8gMiwgeTogY3kuaGVpZ2h0KCkgLyAyfSk7XG4gICAgICBjb25zdCBlZGdlTGVuZ3RoID0gMzA7XG4gICAgICBjb25zdCB2ZXJ0aWNhbCA9IG9yaWVudGF0aW9uID09PSBcInZlcnRpY2FsXCI7XG4gICAgICBjb25zdCBwcm9jZXNzUG9ydHNPcmRlcmluZyA9IHZlcnRpY2FsID8gXCJULXRvLUJcIiA6IFwiTC10by1SXCI7XG5cbiAgICAgIGN5LnN0YXJ0QmF0Y2goKTtcblxuICAgICAgaWYgKCFlbGVtZW50VXRpbGl0aWVzLmdldE1hcFR5cGUoKSkge1xuICAgICAgICBlbGVtZW50VXRpbGl0aWVzLnNldE1hcFR5cGUoXCJQRFwiKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcHJvY2Vzc05vZGUgPSBlbGVtZW50VXRpbGl0aWVzLmFkZE5vZGUocHJvY2Vzc1Bvc2l0aW9uLngsIHByb2Nlc3NQb3NpdGlvbi55LCB7Y2xhc3M6IFwicHJvY2Vzc1wiLCBsYW5ndWFnZTogXCJQRFwifSk7XG4gICAgICBlbGVtZW50VXRpbGl0aWVzLnNldFBvcnRzT3JkZXJpbmcocHJvY2Vzc05vZGUsIHByb2Nlc3NQb3J0c09yZGVyaW5nKTtcbiAgICAgIHByb2Nlc3NOb2RlLmRhdGEoJ2p1c3RBZGRlZCcsIHRydWUpO1xuXG4gICAgICBsZXQgeFBvc09mSW5wdXQgPSBwcm9jZXNzUG9zaXRpb24ueCAtIGVkZ2VMZW5ndGggLSBwcm9jZXNzV2lkdGggLyAyIC0gbWFjcm9tb2xlY3VsZVdpZHRoIC8gMjtcbiAgICAgIGxldCB4UG9zT2ZPdXRwdXQgPSBwcm9jZXNzUG9zaXRpb24ueCArIGVkZ2VMZW5ndGggKyBwcm9jZXNzV2lkdGggLyAyICsgbWFjcm9tb2xlY3VsZVdpZHRoIC8gMjtcbiAgICAgIGxldCB5UG9zT2ZJbnB1dCA9IHByb2Nlc3NQb3NpdGlvbi55O1xuICAgICAgbGV0IHlQb3NPZk91dHB1dCA9IHByb2Nlc3NQb3NpdGlvbi55O1xuXG4gICAgICBsZXQgbm9kZVBvc2l0aW9uID0ge1xuICAgICAgICB4OiB4UG9zT2ZJbnB1dCxcbiAgICAgICAgeTogeVBvc09mSW5wdXRcbiAgICAgIH1cbiAgICAgIGlmICh2ZXJ0aWNhbCkge1xuICAgICAgICBub2RlUG9zaXRpb24gPSBlbGVtZW50VXRpbGl0aWVzLnJvdGF0ZTkwKG5vZGVQb3NpdGlvbiwgcHJvY2Vzc1Bvc2l0aW9uKTtcbiAgICAgIH1cblxuICAgICAgbGV0IGlucHV0Tm9kZSA9IGVsZW1lbnRVdGlsaXRpZXMuYWRkTm9kZShub2RlUG9zaXRpb24ueCwgbm9kZVBvc2l0aW9uLnksIHtjbGFzczogJ21hY3JvbW9sZWN1bGUnLCBsYW5ndWFnZTogJ1BEJ30pO1xuICAgICAgaW5wdXROb2RlLmRhdGEoXCJqdXN0QWRkZWRcIiwgdHJ1ZSk7XG4gICAgICBpbnB1dE5vZGUuZGF0YShcImxhYmVsXCIsIG1hY3JvbW9sZWN1bGVOYW1lKTtcblxuICAgICAgbGV0IGlucHV0RWRnZSA9IGVsZW1lbnRVdGlsaXRpZXMuYWRkRWRnZShpbnB1dE5vZGUuaWQoKSwgcHJvY2Vzc05vZGUuaWQoKSwge2NsYXNzOiAnY29uc3VtcHRpb24nLCBsYW5ndWFnZTogJ1BEJ30pXG4gICAgICBpbnB1dEVkZ2UuZGF0YShcImp1c3RBZGRlZFwiLCB0cnVlKTtcblxuICAgICAgbm9kZVBvc2l0aW9uID0ge1xuICAgICAgICB4OiB4UG9zT2ZPdXRwdXQsXG4gICAgICAgIHk6IHlQb3NPZk91dHB1dFxuICAgICAgfVxuXG4gICAgICBpZiAodmVydGljYWwpIHtcbiAgICAgICAgbm9kZVBvc2l0aW9uID0gZWxlbWVudFV0aWxpdGllcy5yb3RhdGU5MChub2RlUG9zaXRpb24sIHByb2Nlc3NQb3NpdGlvbik7XG4gICAgICB9XG5cbiAgICAgIGxldCBvdXRwdXROb2RlID0gZWxlbWVudFV0aWxpdGllcy5hZGROb2RlKG5vZGVQb3NpdGlvbi54LCBub2RlUG9zaXRpb24ueSwge2NsYXNzOiAnc291cmNlIGFuZCBzaW5rJywgbGFuZ3VhZ2U6ICdQRCd9KTtcbiAgICAgIG91dHB1dE5vZGUuZGF0YShcImp1c3RBZGRlZFwiLCB0cnVlKTtcblxuICAgICAgbGV0IG91dHB1dEVkZ2UgPSBlbGVtZW50VXRpbGl0aWVzLmFkZEVkZ2UocHJvY2Vzc05vZGUuaWQoKSwgb3V0cHV0Tm9kZS5pZCgpLCB7Y2xhc3M6ICdwcm9kdWN0aW9uJywgbGFuZ3VhZ2U6ICdQRCd9KVxuICAgICAgb3V0cHV0RWRnZS5kYXRhKFwianVzdEFkZGVkXCIsIHRydWUpO1xuXG4gICAgICBjeS5lbmRCYXRjaCgpO1xuXG4gICAgICBjb25zdCBlbGVzID0gY3kuZWxlbWVudHMoJ1tqdXN0QWRkZWRdJyk7XG4gICAgICBlbGVzLnJlbW92ZURhdGEoJ2p1c3RBZGRlZCcpO1xuXG4gICAgICBjeS5lbGVtZW50cygpLnVuc2VsZWN0KCk7XG4gICAgICBlbGVzLnNlbGVjdCgpO1xuXG4gICAgICByZXR1cm4gZWxlcztcbiAgICB9XG5cbiAgICBlbGVtZW50VXRpbGl0aWVzLmNyZWF0ZUNvbXBsZXhQcm90ZWluRm9ybWF0aW9uID0gZnVuY3Rpb24ocHJvdGVpbkxhYmVscywgY29tcGxleExhYmVsLCByZWd1bGF0b3IsIG9yaWVudGF0aW9uLCByZXZlcnNlKSB7XG4gICAgICBjb25zdCBoYXNSZWd1bGF0b3IgPSByZWd1bGF0b3IubmFtZSAhPT0gdW5kZWZpbmVkO1xuICAgICAgY29uc3QgZGVmYXVsdE1hY3JvbW9sZWN1bGVQcm9wZXJ0aWVzID0gZWxlbWVudFV0aWxpdGllcy5nZXREZWZhdWx0UHJvcGVydGllcyhcIm1hY3JvbW9sZWN1bGVcIik7XG4gICAgICBjb25zdCBkZWZhdWx0UmVndWxhdG9yUHJvcGVydGllcyA9IGhhc1JlZ3VsYXRvciA/IGVsZW1lbnRVdGlsaXRpZXMuZ2V0RGVmYXVsdFByb3BlcnRpZXMocmVndWxhdG9yLnR5cGUpIDoge307XG4gICAgICBjb25zdCBkZWZhdWx0UHJvY2Vzc1Byb3BlcnRpZXMgPSBlbGVtZW50VXRpbGl0aWVzLmdldERlZmF1bHRQcm9wZXJ0aWVzKFwiY2F0YWx5dGljXCIpO1xuICAgICAgY29uc3QgcHJvY2Vzc1dpZHRoID0gZGVmYXVsdFByb2Nlc3NQcm9wZXJ0aWVzLndpZHRoIHx8IDUwO1xuICAgICAgY29uc3QgbWFjcm9tb2xlY3VsZVdpZHRoID0gZGVmYXVsdE1hY3JvbW9sZWN1bGVQcm9wZXJ0aWVzLndpZHRoIHx8IDUwO1xuICAgICAgY29uc3QgbWFjcm9tb2xlY3VsZUhlaWdodCA9IGRlZmF1bHRNYWNyb21vbGVjdWxlUHJvcGVydGllcy5oZWlnaHQgfHwgNTA7IFxuICAgICAgY29uc3QgcHJvY2Vzc0hlaWdodCA9IGRlZmF1bHRQcm9jZXNzUHJvcGVydGllcy5oZWlnaHQgfHwgNTA7XG4gICAgICBjb25zdCByZWd1bGF0b3JIZWlnaHQgPSBkZWZhdWx0UmVndWxhdG9yUHJvcGVydGllcy5oZWlnaHQgfHwgNTA7XG4gICAgICBjb25zdCBwcm9jZXNzUG9zaXRpb24gPSBlbGVtZW50VXRpbGl0aWVzLmNvbnZlcnRUb01vZGVsUG9zaXRpb24oe3g6IGN5LndpZHRoKCkgLyAyLCB5OiBjeS5oZWlnaHQoKSAvIDJ9KTtcbiAgICAgIGNvbnN0IGVkZ2VMZW5ndGggPSAzMDtcbiAgICAgIGNvbnN0IHByb2Nlc3NQb3J0c09yZGVyaW5nID0gb3JpZW50YXRpb24gPT09IFwidmVydGljYWxcIiA/IFwiVC10by1CXCIgOiBcIkwtdG8tUlwiO1xuICAgICAgY29uc3QgbWluSW5mb2JveERpbWVuc2lvbiA9IDIwO1xuICAgICAgY29uc3Qgd2lkdGhQZXJDaGFyID0gNjtcbiAgICAgIGNvbnN0IHRpbGluZ1BhZGRpbmdWZXJ0aWNhbCA9IDE1O1xuICAgICAgY29uc3QgdGlsaW5nUGFkZGluZ0hvcml6b250YWwgPSAxNTtcblxuICAgICAgY3kuc3RhcnRCYXRjaCgpO1xuXG4gICAgICBpZiAoIWVsZW1lbnRVdGlsaXRpZXMuZ2V0TWFwVHlwZSgpKSB7XG4gICAgICAgIGVsZW1lbnRVdGlsaXRpZXMuc2V0TWFwVHlwZShcIlBEXCIpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBwcm9jZXNzTm9kZSA9IGVsZW1lbnRVdGlsaXRpZXMuYWRkTm9kZShwcm9jZXNzUG9zaXRpb24ueCwgcHJvY2Vzc1Bvc2l0aW9uLnksIHtjbGFzczogXCJwcm9jZXNzXCIsIGxhbmd1YWdlOiBcIlBEXCJ9KTtcbiAgICAgIGVsZW1lbnRVdGlsaXRpZXMuc2V0UG9ydHNPcmRlcmluZyhwcm9jZXNzTm9kZSwgcHJvY2Vzc1BvcnRzT3JkZXJpbmcpO1xuICAgICAgcHJvY2Vzc05vZGUuZGF0YSgnanVzdEFkZGVkJywgdHJ1ZSk7XG5cbiAgICAgIGNvbnN0IG9mZnNldFggPSBwcm9jZXNzV2lkdGggLyAyICsgZWRnZUxlbmd0aCArIG1hY3JvbW9sZWN1bGVXaWR0aCAvIDI7XG4gICAgICBsZXQgeFBvc09mUHJvdGVpbiA9IHJldmVyc2UgPyBwcm9jZXNzUG9zaXRpb24ueCArIG9mZnNldFhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBwcm9jZXNzUG9zaXRpb24ueCAtIG9mZnNldFg7XG5cbiAgICAgIGNvbnN0IHByb3RlaW5Db3VudCA9IHByb3RlaW5MYWJlbHMubGVuZ3RoO1xuXG4gICAgICBjb25zdCBtYWNyb21vbGVjdWxlRGltZW5zaW9uID0gb3JpZW50YXRpb24gPT09IFwidmVydGljYWxcIiA/IG1hY3JvbW9sZWN1bGVXaWR0aCA6IG1hY3JvbW9sZWN1bGVIZWlnaHQ7XG4gICAgICBjb25zdCBzdGVwT2Zmc2V0ID0gbWFjcm9tb2xlY3VsZURpbWVuc2lvbiArIHRpbGluZ1BhZGRpbmdWZXJ0aWNhbDtcbiAgICAgIGNvbnN0IG9mZnNldFkgPSAocHJvdGVpbkNvdW50IC0gMSkgLyAyICogKG1hY3JvbW9sZWN1bGVEaW1lbnNpb24gKyB0aWxpbmdQYWRkaW5nVmVydGljYWwpO1xuICAgICAgY29uc3QgaG9yaXpvbnRhbE9mZnNldFggPSAocHJvdGVpbkNvdW50IC0gMSkgLyAyICogKG1hY3JvbW9sZWN1bGVEaW1lbnNpb24gKyB0aWxpbmdQYWRkaW5nSG9yaXpvbnRhbCk7XG4gICAgICBcbiAgICAgIGxldCB5UG9zT2ZQcm90ZWluID0gcHJvY2Vzc1Bvc2l0aW9uLnkgLSBvZmZzZXRZO1xuXG4gICAgICBwcm90ZWluTGFiZWxzLmZvckVhY2goZnVuY3Rpb24obGFiZWwpIHtcbiAgICAgICAgbGV0IG5vZGVQb3NpdGlvbiA9IHtcbiAgICAgICAgICB4OiB4UG9zT2ZQcm90ZWluLFxuICAgICAgICAgIHk6IHlQb3NPZlByb3RlaW5cbiAgICAgICAgfVxuICAgICAgICBpZiAob3JpZW50YXRpb24gPT09IFwidmVydGljYWxcIikge1xuICAgICAgICAgIG5vZGVQb3NpdGlvbiA9IGVsZW1lbnRVdGlsaXRpZXMucm90YXRlOTAobm9kZVBvc2l0aW9uLCBwcm9jZXNzUG9zaXRpb24pO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgbm9kZSA9IGVsZW1lbnRVdGlsaXRpZXMuYWRkTm9kZShub2RlUG9zaXRpb24ueCwgbm9kZVBvc2l0aW9uLnksIHtjbGFzczogXCJtYWNyb21vbGVjdWxlXCIsIGxhbmd1YWdlOiBcIlBEXCJ9KTtcbiAgICAgICAgbm9kZS5kYXRhKFwibGFiZWxcIiwgbGFiZWwpO1xuICAgICAgICBub2RlLmRhdGEoXCJqdXN0QWRkZWRcIiwgdHJ1ZSk7XG4gICAgICAgIHlQb3NPZlByb3RlaW4gKz0gc3RlcE9mZnNldDtcblxuICAgICAgICBjb25zdCBzb3VyY2UgPSByZXZlcnNlID8gcHJvY2Vzc05vZGUuaWQoKSA6IG5vZGUuaWQoKTtcbiAgICAgICAgY29uc3QgdGFyZ2V0ID0gcmV2ZXJzZSA/IG5vZGUuaWQoKSA6IHByb2Nlc3NOb2RlLmlkKCk7XG4gICAgICAgIGNvbnN0IGVkZ2VDbGFzcyA9IHJldmVyc2UgPyBcInByb2R1Y3Rpb25cIiA6IFwiY29uc3VtcHRpb25cIjtcbiAgICAgICAgY29uc3QgZWRnZSA9IGVsZW1lbnRVdGlsaXRpZXMuYWRkRWRnZShzb3VyY2UsIHRhcmdldCwge2NsYXNzOiBlZGdlQ2xhc3MsIGxhbmd1YWdlOiBcIlBEXCJ9KTtcbiAgICAgICAgZWRnZS5kYXRhKFwianVzdEFkZGVkXCIsIHRydWUpO1xuICAgICAgfSk7XG5cbiAgICAgIGxldCBjb21wbGV4UG9zID0ge1xuICAgICAgICB4OiBwcm9jZXNzUG9zaXRpb24ueCArIChyZXZlcnNlID8gLTEgOiAxKSAqIG9mZnNldFgsXG4gICAgICAgIHk6IHByb2Nlc3NQb3NpdGlvbi55XG4gICAgICB9XG5cbiAgICAgIGlmIChvcmllbnRhdGlvbiA9PT0gXCJ2ZXJ0aWNhbFwiKSB7XG4gICAgICAgIGNvbXBsZXhQb3MgPSBlbGVtZW50VXRpbGl0aWVzLnJvdGF0ZTkwKGNvbXBsZXhQb3MsIHByb2Nlc3NQb3NpdGlvbik7IFxuICAgICAgfVxuXG4gICAgICBjb25zdCBjb21wbGV4ID0gZWxlbWVudFV0aWxpdGllcy5hZGROb2RlKGNvbXBsZXhQb3MueCwgY29tcGxleFBvcy55LCB7Y2xhc3M6IFwiY29tcGxleFwiLCBsYW5ndWFnZTogXCJQRFwifSk7XG4gICAgICBjb21wbGV4LmRhdGEoXCJsYWJlbFwiLCBjb21wbGV4TGFiZWwpO1xuICAgICAgY29tcGxleC5kYXRhKFwianVzdEFkZGVkXCIsIHRydWUpO1xuXG4gICAgICBjb25zdCBzb3VyY2UgPSByZXZlcnNlID8gY29tcGxleC5pZCgpIDogcHJvY2Vzc05vZGUuaWQoKTtcbiAgICAgIGNvbnN0IHRhcmdldCA9IHJldmVyc2UgPyBwcm9jZXNzTm9kZS5pZCgpIDogY29tcGxleC5pZCgpO1xuICAgICAgY29uc3QgZWRnZUNsYXNzID0gcmV2ZXJzZSA/IFwiY29uc3VtcHRpb25cIiA6IFwicHJvZHVjdGlvblwiO1xuICAgICAgY29uc3QgY29tcGxleEVkZ2UgPSBlbGVtZW50VXRpbGl0aWVzLmFkZEVkZ2Uoc291cmNlLCB0YXJnZXQsIHtjbGFzczogZWRnZUNsYXNzLCBsYW5ndWFnZTogXCJQRFwifSk7XG4gICAgICBjb21wbGV4RWRnZS5kYXRhKFwianVzdEFkZGVkXCIsIHRydWUpO1xuXG4gICAgICBcbiAgICAgIGlmIChvcmllbnRhdGlvbiA9PT0gXCJ2ZXJ0aWNhbFwiKSB7XG4gICAgICAgIHhQb3NPZlByb3RlaW4gPSBjb21wbGV4LnBvc2l0aW9uKFwieFwiKSAtIGhvcml6b250YWxPZmZzZXRYO1xuICAgICAgICB5UG9zT2ZQcm90ZWluID0gY29tcGxleC5wb3NpdGlvbihcInlcIik7ICAgXG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgeFBvc09mUHJvdGVpbiA9IGNvbXBsZXgucG9zaXRpb24oXCJ4XCIpO1xuICAgICAgICB5UG9zT2ZQcm90ZWluID0gY29tcGxleC5wb3NpdGlvbihcInlcIikgLSBvZmZzZXRZO1xuICAgICAgfVxuXG4gICAgICBwcm90ZWluTGFiZWxzLmZvckVhY2goZnVuY3Rpb24obGFiZWwpIHtcblxuICAgICAgICBsZXQgbm9kZVBvc2l0aW9uID0ge1xuICAgICAgICAgIHg6IHhQb3NPZlByb3RlaW4sXG4gICAgICAgICAgeTogeVBvc09mUHJvdGVpblxuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICBjb25zdCBub2RlID0gZWxlbWVudFV0aWxpdGllcy5hZGROb2RlKG5vZGVQb3NpdGlvbi54LCBub2RlUG9zaXRpb24ueSwge2NsYXNzOiBcIm1hY3JvbW9sZWN1bGVcIiwgbGFuZ3VhZ2U6IFwiUERcIn0sIHVuZGVmaW5lZCwgY29tcGxleC5pZCgpKTtcbiAgICAgICAgbm9kZS5kYXRhKFwibGFiZWxcIiwgbGFiZWwpO1xuICAgICAgICBub2RlLmRhdGEoXCJqdXN0QWRkZWRcIiwgdHJ1ZSk7XG4gICAgICAgIFxuICAgICAgICBpZiAob3JpZW50YXRpb24gPT09IFwidmVydGljYWxcIikge1xuICAgICAgICAgIHhQb3NPZlByb3RlaW4gKz0gc3RlcE9mZnNldDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICB5UG9zT2ZQcm90ZWluICs9IHN0ZXBPZmZzZXQ7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBpZiAoaGFzUmVndWxhdG9yKSB7XG4gICAgICAgIGNvbnN0IHJlZ3VsYXRvck5hbWUgPSByZWd1bGF0b3IubmFtZTtcbiAgICAgICAgY29uc3QgcmVndWxhdG9yVHlwZSA9IHJlZ3VsYXRvci50eXBlO1xuICAgICAgICBjb25zdCByZWd1bGF0b3JFZGdlVHlwZSA9IHJlZ3VsYXRvci5lZGdlVHlwZTtcbiAgICAgICAgY29uc3QgcmVndWxhdG9yTXVsdGltZXIgPSByZWd1bGF0b3IubXVsdGltZXI7XG5cbiAgICAgICAgbGV0IHhQb3NPZlJlZ3VsYXRvciA9IHByb2Nlc3NQb3NpdGlvbi54O1xuICAgICAgICBsZXQgeVBvc09mUmVndWxhdG9yID0gcHJvY2Vzc1Bvc2l0aW9uLnkgLSAoKHByb2Nlc3NIZWlnaHQgLyAyKSArIChyZWd1bGF0b3JIZWlnaHQgLyAyKSArIGVkZ2VMZW5ndGgpOyBcblxuICAgICAgICBub2RlUG9zaXRpb24gPSB7XG4gICAgICAgICAgeDogeFBvc09mUmVndWxhdG9yLFxuICAgICAgICAgIHk6IHlQb3NPZlJlZ3VsYXRvclxuICAgICAgICB9XG4gICAgICAgIGlmIChvcmllbnRhdGlvbiA9PT0gXCJ2ZXJ0aWNhbFwiKSB7XG4gICAgICAgICAgbm9kZVBvc2l0aW9uID0gZWxlbWVudFV0aWxpdGllcy5yb3RhdGU5MChub2RlUG9zaXRpb24sIHByb2Nlc3NQb3NpdGlvbik7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgcmVndWxhdG9yTm9kZSA9IGVsZW1lbnRVdGlsaXRpZXMuYWRkTm9kZShub2RlUG9zaXRpb24ueCwgbm9kZVBvc2l0aW9uLnksIHtjbGFzczogcmVndWxhdG9yVHlwZSwgbGFuZ3VhZ2U6ICdQRCd9KTtcbiAgICAgICAgcmVndWxhdG9yTm9kZS5kYXRhKCdqdXN0QWRkZWQnLCB0cnVlKTtcbiAgICAgICAgcmVndWxhdG9yTm9kZS5kYXRhKCdsYWJlbCcsIHJlZ3VsYXRvck5hbWUpO1xuXG4gICAgICAgIGlmIChyZWd1bGF0b3JNdWx0aW1lci5lbmFibGVkKSB7XG4gICAgICAgICAgZWxlbWVudFV0aWxpdGllcy5zZXRNdWx0aW1lclN0YXR1cyhyZWd1bGF0b3JOb2RlLCB0cnVlKTtcblxuICAgICAgICAgIGNvbnN0IGNhcmRpbmFsaXR5ID0gcmVndWxhdG9yTXVsdGltZXIuY2FyZGluYWxpdHk7XG4gICAgICAgICAgaWYgKGNhcmRpbmFsaXR5ICE9ICcnKSB7XG4gICAgICAgICAgICBjb25zdCBpbmZvYm94TGFiZWwgPSBcIk46XCIgKyBjYXJkaW5hbGl0eTtcbiAgICAgICAgICAgIGluZm9ib3hPYmplY3QgPSB7XG4gICAgICAgICAgICAgIGNsYXp6OiBcInVuaXQgb2YgaW5mb3JtYXRpb25cIixcbiAgICAgICAgICAgICAgbGFiZWw6IHtcbiAgICAgICAgICAgICAgICB0ZXh0OiBpbmZvYm94TGFiZWxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgYmJveDoge1xuICAgICAgICAgICAgICAgIHc6IGluZm9ib3hMYWJlbC5sZW5ndGggKiB3aWR0aFBlckNoYXIsXG4gICAgICAgICAgICAgICAgaDogbWluSW5mb2JveERpbWVuc2lvblxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgZWxlbWVudFV0aWxpdGllcy5hZGRTdGF0ZU9ySW5mb0JveChyZWd1bGF0b3JOb2RlLCBpbmZvYm94T2JqZWN0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgcmVndWxhdG9yRWRnZSA9IGVsZW1lbnRVdGlsaXRpZXMuYWRkRWRnZShyZWd1bGF0b3JOb2RlLmlkKCksIHByb2Nlc3NOb2RlLmlkKCksIHtjbGFzczogcmVndWxhdG9yRWRnZVR5cGUsIGxhbmd1YWdlOiAnUEQnfSk7XG4gICAgICAgIHJlZ3VsYXRvckVkZ2UuZGF0YSgnanVzdEFkZGVkJywgdHJ1ZSk7XG4gICAgICB9XG5cbiAgICAgIGN5LmVuZEJhdGNoKCk7XG5cbiAgICAgIGNvbnN0IGVsZXMgPSBjeS5lbGVtZW50cygnW2p1c3RBZGRlZF0nKTtcbiAgICAgIGVsZXMucmVtb3ZlRGF0YSgnanVzdEFkZGVkJyk7XG5cbiAgICAgIGN5LmVsZW1lbnRzKCkudW5zZWxlY3QoKTtcbiAgICAgIGVsZXMuc2VsZWN0KCk7XG5cbiAgICAgIHJldHVybiBlbGVzO1xuXG4gICAgfVxuXG4gICAgZWxlbWVudFV0aWxpdGllcy5jcmVhdGVNdWx0aW1lcml6YXRpb24gPSBmdW5jdGlvbiAobWFjcm9tb2xlY3VsZSwgcmVndWxhdG9yLCByZWd1bGF0b3JNdWx0aW1lciwgb3JpZW50YXRpb24pIHtcbiAgICAgIGNvbnN0IGhhc1JlZ3VsYXRvciA9IHJlZ3VsYXRvci5uYW1lICE9PSB1bmRlZmluZWQ7XG4gICAgICBjb25zdCBtYWNyb21vbGVjdWxlTmFtZSA9IG1hY3JvbW9sZWN1bGUubmFtZTtcbiAgICAgIGNvbnN0IG1hY3JvbW9sZWN1bGVNdWx0aW1lckNhcmRpbmFsaXR5ID0gbWFjcm9tb2xlY3VsZS5jYXJkaW5hbGl0eTtcbiAgICAgIGNvbnN0IGRlZmF1bHRNYWNyb21vbGVjdWxlUHJvcGVydGllcyA9IGVsZW1lbnRVdGlsaXRpZXMuZ2V0RGVmYXVsdFByb3BlcnRpZXMoXCJtYWNyb21vbGVjdWxlXCIpO1xuICAgICAgY29uc3QgZGVmYXVsdFJlZ3VsYXRvclByb3BlcnRpZXMgPSBoYXNSZWd1bGF0b3IgPyBlbGVtZW50VXRpbGl0aWVzLmdldERlZmF1bHRQcm9wZXJ0aWVzKHJlZ3VsYXRvci50eXBlKSA6IHt9O1xuICAgICAgY29uc3QgZGVmYXVsdFByb2Nlc3NQcm9wZXJ0aWVzID0gZWxlbWVudFV0aWxpdGllcy5nZXREZWZhdWx0UHJvcGVydGllcyhcImNhdGFseXRpY1wiKTtcbiAgICAgIGNvbnN0IHByb2Nlc3NXaWR0aCA9IGRlZmF1bHRQcm9jZXNzUHJvcGVydGllcy53aWR0aCB8fCA1MDtcbiAgICAgIGNvbnN0IG1hY3JvbW9sZWN1bGVXaWR0aCA9IGRlZmF1bHRNYWNyb21vbGVjdWxlUHJvcGVydGllcy53aWR0aCB8fCA1MDtcbiAgICAgIGNvbnN0IG1hY3JvbW9sZWN1bGVIZWlnaHQgPSBkZWZhdWx0TWFjcm9tb2xlY3VsZVByb3BlcnRpZXMuaGVpZ2h0IHx8IDUwOyBcbiAgICAgIGNvbnN0IHByb2Nlc3NIZWlnaHQgPSBkZWZhdWx0UHJvY2Vzc1Byb3BlcnRpZXMuaGVpZ2h0IHx8IDUwO1xuICAgICAgY29uc3QgcmVndWxhdG9ySGVpZ2h0ID0gZGVmYXVsdFJlZ3VsYXRvclByb3BlcnRpZXMuaGVpZ2h0IHx8IDUwO1xuICAgICAgY29uc3QgcHJvY2Vzc1Bvc2l0aW9uID0gZWxlbWVudFV0aWxpdGllcy5jb252ZXJ0VG9Nb2RlbFBvc2l0aW9uKHt4OiBjeS53aWR0aCgpIC8gMiwgeTogY3kuaGVpZ2h0KCkgLyAyfSk7XG4gICAgICBjb25zdCBlZGdlTGVuZ3RoID0gMzA7XG4gICAgICBjb25zdCBwcm9jZXNzUG9ydHNPcmRlcmluZyA9IG9yaWVudGF0aW9uID09PSBcInZlcnRpY2FsXCIgPyBcIlQtdG8tQlwiIDogXCJMLXRvLVJcIjtcbiAgICAgIGNvbnN0IG1pbkluZm9ib3hEaW1lbnNpb24gPSAyMDtcbiAgICAgIGNvbnN0IHdpZHRoUGVyQ2hhciA9IDY7XG5cbiAgICAgIGN5LnN0YXJ0QmF0Y2goKTtcblxuICAgICAgaWYgKCFlbGVtZW50VXRpbGl0aWVzLmdldE1hcFR5cGUoKSkge1xuICAgICAgICBlbGVtZW50VXRpbGl0aWVzLnNldE1hcFR5cGUoXCJQRFwiKTtcbiAgICAgIH1cblxuICAgICAgbGV0IHhQb3NPZklucHV0ID0gcHJvY2Vzc1Bvc2l0aW9uLnggLSBlZGdlTGVuZ3RoIC0gcHJvY2Vzc1dpZHRoIC8gMiAtIG1hY3JvbW9sZWN1bGVXaWR0aCAvIDI7XG4gICAgICBsZXQgeFBvc09mT3V0cHV0ID0gcHJvY2Vzc1Bvc2l0aW9uLnggKyBlZGdlTGVuZ3RoICsgcHJvY2Vzc1dpZHRoIC8gMiArIG1hY3JvbW9sZWN1bGVXaWR0aCAvIDI7XG4gICAgICBsZXQgeVBvc09mSW5wdXQgPSBwcm9jZXNzUG9zaXRpb24ueTtcbiAgICAgIGxldCB5UG9zT2ZPdXRwdXQgPSBwcm9jZXNzUG9zaXRpb24ueTtcblxuICAgICAgbGV0IHByb2Nlc3NOb2RlID0gZWxlbWVudFV0aWxpdGllcy5hZGROb2RlKHByb2Nlc3NQb3NpdGlvbi54LCBwcm9jZXNzUG9zaXRpb24ueSwge2NsYXNzOiBcInByb2Nlc3NcIiwgbGFuZ3VhZ2U6IFwiUERcIn0pO1xuICAgICAgZWxlbWVudFV0aWxpdGllcy5zZXRQb3J0c09yZGVyaW5nKHByb2Nlc3NOb2RlLCBwcm9jZXNzUG9ydHNPcmRlcmluZyk7XG4gICAgICBwcm9jZXNzTm9kZS5kYXRhKCdqdXN0QWRkZWQnLCB0cnVlKTtcblxuICAgICAgbGV0IG5vZGVQb3NpdGlvbiA9IHtcbiAgICAgICAgeDogeFBvc09mSW5wdXQsXG4gICAgICAgIHk6IHlQb3NPZklucHV0XG4gICAgICB9XG4gICAgICBpZiAob3JpZW50YXRpb24gPT09IFwidmVydGljYWxcIikge1xuICAgICAgICBub2RlUG9zaXRpb24gPSBlbGVtZW50VXRpbGl0aWVzLnJvdGF0ZTkwKG5vZGVQb3NpdGlvbiwgcHJvY2Vzc1Bvc2l0aW9uKTtcbiAgICAgIH1cblxuICAgICAgbGV0IGlucHV0Tm9kZSA9IGVsZW1lbnRVdGlsaXRpZXMuYWRkTm9kZShub2RlUG9zaXRpb24ueCwgbm9kZVBvc2l0aW9uLnksIHtjbGFzczogJ21hY3JvbW9sZWN1bGUnLCBsYW5ndWFnZTogJ1BEJ30pO1xuICAgICAgaW5wdXROb2RlLmRhdGEoXCJqdXN0QWRkZWRcIiwgdHJ1ZSk7XG4gICAgICBpbnB1dE5vZGUuZGF0YShcImxhYmVsXCIsIG1hY3JvbW9sZWN1bGVOYW1lKTtcblxuICAgICAgbGV0IGlucHV0RWRnZSA9IGVsZW1lbnRVdGlsaXRpZXMuYWRkRWRnZShpbnB1dE5vZGUuaWQoKSwgcHJvY2Vzc05vZGUuaWQoKSwge2NsYXNzOiAnY29uc3VtcHRpb24nLCBsYW5ndWFnZTogJ1BEJ30pXG4gICAgICBpbnB1dEVkZ2UuZGF0YShcImp1c3RBZGRlZFwiLCB0cnVlKTtcblxuICAgICAgbGV0IGNhcmRpbmFsaXR5ID0gbWFjcm9tb2xlY3VsZU11bHRpbWVyQ2FyZGluYWxpdHk7XG4gICAgICBpZiAoY2FyZGluYWxpdHkgIT09ICcnKSB7XG4gICAgICAgIGlucHV0RWRnZS5kYXRhKFwiY2FyZGluYWxpdHlcIiwgY2FyZGluYWxpdHkpO1xuICAgICAgfVxuXG4gICAgICBub2RlUG9zaXRpb24gPSB7XG4gICAgICAgIHg6IHhQb3NPZk91dHB1dCxcbiAgICAgICAgeTogeVBvc09mT3V0cHV0XG4gICAgICB9XG5cbiAgICAgIGlmIChvcmllbnRhdGlvbiA9PT0gXCJ2ZXJ0aWNhbFwiKSB7XG4gICAgICAgIG5vZGVQb3NpdGlvbiA9IGVsZW1lbnRVdGlsaXRpZXMucm90YXRlOTAobm9kZVBvc2l0aW9uLCBwcm9jZXNzUG9zaXRpb24pO1xuICAgICAgfVxuXG4gICAgICBsZXQgb3V0cHV0Tm9kZSA9IGVsZW1lbnRVdGlsaXRpZXMuYWRkTm9kZShub2RlUG9zaXRpb24ueCwgbm9kZVBvc2l0aW9uLnksIHtjbGFzczogJ21hY3JvbW9sZWN1bGUnLCBsYW5ndWFnZTogJ1BEJ30pO1xuICAgICAgb3V0cHV0Tm9kZS5kYXRhKFwianVzdEFkZGVkXCIsIHRydWUpO1xuICAgICAgb3V0cHV0Tm9kZS5kYXRhKFwibGFiZWxcIiwgbWFjcm9tb2xlY3VsZU5hbWUpO1xuICAgICAgZWxlbWVudFV0aWxpdGllcy5zZXRNdWx0aW1lclN0YXR1cyhvdXRwdXROb2RlLCB0cnVlKTtcblxuICAgICAgaWYgKGNhcmRpbmFsaXR5ICE9PSAnJykge1xuICAgICAgICBjb25zdCBpbmZvYm94TGFiZWwgPSBcIk46XCIgKyBjYXJkaW5hbGl0eTtcbiAgICAgICAgaW5mb2JveE9iamVjdCA9IHtcbiAgICAgICAgICBjbGF6ejogXCJ1bml0IG9mIGluZm9ybWF0aW9uXCIsXG4gICAgICAgICAgbGFiZWw6IHtcbiAgICAgICAgICAgIHRleHQ6IGluZm9ib3hMYWJlbFxuICAgICAgICAgIH0sXG4gICAgICAgICAgYmJveDoge1xuICAgICAgICAgICAgdzogaW5mb2JveExhYmVsLmxlbmd0aCAqIHdpZHRoUGVyQ2hhcixcbiAgICAgICAgICAgIGg6IG1pbkluZm9ib3hEaW1lbnNpb25cbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIGVsZW1lbnRVdGlsaXRpZXMuYWRkU3RhdGVPckluZm9Cb3gob3V0cHV0Tm9kZSwgaW5mb2JveE9iamVjdCk7XG4gICAgICB9XG5cbiAgICAgIGxldCBvdXRwdXRFZGdlID0gZWxlbWVudFV0aWxpdGllcy5hZGRFZGdlKHByb2Nlc3NOb2RlLmlkKCksIG91dHB1dE5vZGUuaWQoKSwge2NsYXNzOiAncHJvZHVjdGlvbicsIGxhbmd1YWdlOiAnUEQnfSlcbiAgICAgIG91dHB1dEVkZ2UuZGF0YShcImp1c3RBZGRlZFwiLCB0cnVlKTtcblxuICAgICAgaWYgKGhhc1JlZ3VsYXRvcikge1xuICAgICAgICBjb25zdCByZWd1bGF0b3JOYW1lID0gcmVndWxhdG9yLm5hbWU7XG4gICAgICAgIGNvbnN0IHJlZ3VsYXRvclR5cGUgPSByZWd1bGF0b3IudHlwZTtcbiAgICAgICAgY29uc3QgcmVndWxhdG9yRWRnZVR5cGUgPSByZWd1bGF0b3IuZWRnZVR5cGU7XG5cbiAgICAgICAgbGV0IHhQb3NPZlJlZ3VsYXRvciA9IHByb2Nlc3NQb3NpdGlvbi54O1xuICAgICAgICBsZXQgeVBvc09mUmVndWxhdG9yID0gcHJvY2Vzc1Bvc2l0aW9uLnkgLSAoKHByb2Nlc3NIZWlnaHQgLyAyKSArIChyZWd1bGF0b3JIZWlnaHQgLyAyKSArIGVkZ2VMZW5ndGgpOyBcblxuICAgICAgICBub2RlUG9zaXRpb24gPSB7XG4gICAgICAgICAgeDogeFBvc09mUmVndWxhdG9yLFxuICAgICAgICAgIHk6IHlQb3NPZlJlZ3VsYXRvclxuICAgICAgICB9XG4gICAgICAgIGlmIChvcmllbnRhdGlvbiA9PT0gXCJ2ZXJ0aWNhbFwiKSB7XG4gICAgICAgICAgbm9kZVBvc2l0aW9uID0gZWxlbWVudFV0aWxpdGllcy5yb3RhdGU5MChub2RlUG9zaXRpb24sIHByb2Nlc3NQb3NpdGlvbik7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgcmVndWxhdG9yTm9kZSA9IGVsZW1lbnRVdGlsaXRpZXMuYWRkTm9kZShub2RlUG9zaXRpb24ueCwgbm9kZVBvc2l0aW9uLnksIHtjbGFzczogcmVndWxhdG9yVHlwZSwgbGFuZ3VhZ2U6ICdQRCd9KTtcbiAgICAgICAgcmVndWxhdG9yTm9kZS5kYXRhKCdqdXN0QWRkZWQnLCB0cnVlKTtcbiAgICAgICAgcmVndWxhdG9yTm9kZS5kYXRhKCdsYWJlbCcsIHJlZ3VsYXRvck5hbWUpO1xuXG4gICAgICAgIGlmIChyZWd1bGF0b3JNdWx0aW1lci5lbmFibGVkKSB7XG4gICAgICAgICAgZWxlbWVudFV0aWxpdGllcy5zZXRNdWx0aW1lclN0YXR1cyhyZWd1bGF0b3JOb2RlLCB0cnVlKTtcblxuICAgICAgICAgIGNvbnN0IGNhcmRpbmFsaXR5ID0gcmVndWxhdG9yTXVsdGltZXIuY2FyZGluYWxpdHk7XG4gICAgICAgICAgaWYgKGNhcmRpbmFsaXR5ICE9ICcnKSB7XG4gICAgICAgICAgICBjb25zdCBpbmZvYm94TGFiZWwgPSBcIk46XCIgKyBjYXJkaW5hbGl0eTtcbiAgICAgICAgICAgIGluZm9ib3hPYmplY3QgPSB7XG4gICAgICAgICAgICAgIGNsYXp6OiBcInVuaXQgb2YgaW5mb3JtYXRpb25cIixcbiAgICAgICAgICAgICAgbGFiZWw6IHtcbiAgICAgICAgICAgICAgICB0ZXh0OiBpbmZvYm94TGFiZWxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgYmJveDoge1xuICAgICAgICAgICAgICAgIHc6IGluZm9ib3hMYWJlbC5sZW5ndGggKiB3aWR0aFBlckNoYXIsXG4gICAgICAgICAgICAgICAgaDogbWluSW5mb2JveERpbWVuc2lvblxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgZWxlbWVudFV0aWxpdGllcy5hZGRTdGF0ZU9ySW5mb0JveChyZWd1bGF0b3JOb2RlLCBpbmZvYm94T2JqZWN0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgcmVndWxhdG9yRWRnZSA9IGVsZW1lbnRVdGlsaXRpZXMuYWRkRWRnZShyZWd1bGF0b3JOb2RlLmlkKCksIHByb2Nlc3NOb2RlLmlkKCksIHtjbGFzczogcmVndWxhdG9yRWRnZVR5cGUsIGxhbmd1YWdlOiAnUEQnfSk7XG4gICAgICAgIHJlZ3VsYXRvckVkZ2UuZGF0YSgnanVzdEFkZGVkJywgdHJ1ZSk7XG4gICAgICB9XG5cbiAgICAgIGN5LmVuZEJhdGNoKCk7XG5cbiAgICAgIGNvbnN0IGVsZXMgPSBjeS5lbGVtZW50cygnW2p1c3RBZGRlZF0nKTtcbiAgICAgIGVsZXMucmVtb3ZlRGF0YSgnanVzdEFkZGVkJyk7XG5cbiAgICAgIGN5LmVsZW1lbnRzKCkudW5zZWxlY3QoKTtcbiAgICAgIGVsZXMuc2VsZWN0KCk7XG5cbiAgICAgIHJldHVybiBlbGVzO1xuICAgIH07XG5cbiAgICBlbGVtZW50VXRpbGl0aWVzLmNyZWF0ZUNvbnZlcnNpb24gPSBmdW5jdGlvbiAobWFjcm9tb2xlY3VsZSwgcmVndWxhdG9yLCByZWd1bGF0b3JNdWx0aW1lciwgb3JpZW50YXRpb24sIGlucHV0SW5mb2JveExhYmVscywgb3V0cHV0SW5mb2JveExhYmVscykge1xuICAgICAgY29uc3QgaGFzUmVndWxhdG9yID0gcmVndWxhdG9yLm5hbWUgIT09IHVuZGVmaW5lZDtcbiAgICAgIGNvbnN0IG1hY3JvbW9sZWN1bGVOYW1lID0gbWFjcm9tb2xlY3VsZS5uYW1lO1xuICAgICAgY29uc3QgbWFjcm9tb2xlY3VsZUlzTXVsdGltZXIgPSBtYWNyb21vbGVjdWxlLm11bHRpbWVyLmVuYWJsZWQ7XG4gICAgICBjb25zdCBtYWNyb21vbGVjdWxlTXVsdGltZXJDYXJkaW5hbGl0eSA9IG1hY3JvbW9sZWN1bGUubXVsdGltZXIuY2FyZGluYWxpdHk7XG4gICAgICBjb25zdCBkZWZhdWx0TWFjcm9tb2xlY3VsZVByb3BlcnRpZXMgPSBlbGVtZW50VXRpbGl0aWVzLmdldERlZmF1bHRQcm9wZXJ0aWVzKFwibWFjcm9tb2xlY3VsZVwiKTtcbiAgICAgIGNvbnN0IGRlZmF1bHRSZWd1bGF0b3JQcm9wZXJ0aWVzID0gaGFzUmVndWxhdG9yID8gZWxlbWVudFV0aWxpdGllcy5nZXREZWZhdWx0UHJvcGVydGllcyhyZWd1bGF0b3IudHlwZSkgOiB7fTtcbiAgICAgIGNvbnN0IGRlZmF1bHRQcm9jZXNzUHJvcGVydGllcyA9IGVsZW1lbnRVdGlsaXRpZXMuZ2V0RGVmYXVsdFByb3BlcnRpZXMoXCJjYXRhbHl0aWNcIik7XG4gICAgICBjb25zdCBwcm9jZXNzV2lkdGggPSBkZWZhdWx0UHJvY2Vzc1Byb3BlcnRpZXMud2lkdGggfHwgNTA7XG4gICAgICBjb25zdCBtYWNyb21vbGVjdWxlV2lkdGggPSBkZWZhdWx0TWFjcm9tb2xlY3VsZVByb3BlcnRpZXMud2lkdGggfHwgNTA7XG4gICAgICBjb25zdCBtYWNyb21vbGVjdWxlSGVpZ2h0ID0gZGVmYXVsdE1hY3JvbW9sZWN1bGVQcm9wZXJ0aWVzLmhlaWdodCB8fCA1MDsgXG4gICAgICBjb25zdCBwcm9jZXNzSGVpZ2h0ID0gZGVmYXVsdFByb2Nlc3NQcm9wZXJ0aWVzLmhlaWdodCB8fCA1MDtcbiAgICAgIGNvbnN0IHJlZ3VsYXRvckhlaWdodCA9IGRlZmF1bHRSZWd1bGF0b3JQcm9wZXJ0aWVzLmhlaWdodCB8fCA1MDtcbiAgICAgIGNvbnN0IHByb2Nlc3NQb3NpdGlvbiA9IGVsZW1lbnRVdGlsaXRpZXMuY29udmVydFRvTW9kZWxQb3NpdGlvbih7eDogY3kud2lkdGgoKSAvIDIsIHk6IGN5LmhlaWdodCgpIC8gMn0pO1xuICAgICAgY29uc3QgZWRnZUxlbmd0aCA9IDMwO1xuICAgICAgY29uc3QgcHJvY2Vzc1BvcnRzT3JkZXJpbmcgPSBvcmllbnRhdGlvbiA9PT0gXCJ2ZXJ0aWNhbFwiID8gXCJULXRvLUJcIiA6IFwiTC10by1SXCI7XG4gICAgICBjb25zdCBtaW5JbmZvYm94RGltZW5zaW9uID0gMjA7XG4gICAgICBjb25zdCB3aWR0aFBlckNoYXIgPSA2O1xuXG4gICAgICBjeS5zdGFydEJhdGNoKCk7XG5cbiAgICAgIGlmICghZWxlbWVudFV0aWxpdGllcy5nZXRNYXBUeXBlKCkpIHtcbiAgICAgICAgZWxlbWVudFV0aWxpdGllcy5zZXRNYXBUeXBlKFwiUERcIik7XG4gICAgICB9XG5cbiAgICAgIGxldCB4UG9zT2ZJbnB1dCA9IHByb2Nlc3NQb3NpdGlvbi54IC0gZWRnZUxlbmd0aCAtIHByb2Nlc3NXaWR0aCAvIDIgLSBtYWNyb21vbGVjdWxlV2lkdGggLyAyO1xuICAgICAgbGV0IHhQb3NPZk91dHB1dCA9IHByb2Nlc3NQb3NpdGlvbi54ICsgZWRnZUxlbmd0aCArIHByb2Nlc3NXaWR0aCAvIDIgKyBtYWNyb21vbGVjdWxlV2lkdGggLyAyO1xuICAgICAgbGV0IHlQb3NPZklucHV0ID0gcHJvY2Vzc1Bvc2l0aW9uLnk7XG4gICAgICBsZXQgeVBvc09mT3V0cHV0ID0gcHJvY2Vzc1Bvc2l0aW9uLnk7XG5cbiAgICAgIGxldCBwcm9jZXNzTm9kZSA9IGVsZW1lbnRVdGlsaXRpZXMuYWRkTm9kZShwcm9jZXNzUG9zaXRpb24ueCwgcHJvY2Vzc1Bvc2l0aW9uLnksIHtjbGFzczogXCJwcm9jZXNzXCIsIGxhbmd1YWdlOiBcIlBEXCJ9KTtcbiAgICAgIGVsZW1lbnRVdGlsaXRpZXMuc2V0UG9ydHNPcmRlcmluZyhwcm9jZXNzTm9kZSwgcHJvY2Vzc1BvcnRzT3JkZXJpbmcpO1xuICAgICAgcHJvY2Vzc05vZGUuZGF0YSgnanVzdEFkZGVkJywgdHJ1ZSk7XG5cbiAgICAgIGxldCBub2RlUG9zaXRpb24gPSB7XG4gICAgICAgIHg6IHhQb3NPZklucHV0LFxuICAgICAgICB5OiB5UG9zT2ZJbnB1dFxuICAgICAgfVxuICAgICAgaWYgKG9yaWVudGF0aW9uID09PSBcInZlcnRpY2FsXCIpIHtcbiAgICAgICAgbm9kZVBvc2l0aW9uID0gZWxlbWVudFV0aWxpdGllcy5yb3RhdGU5MChub2RlUG9zaXRpb24sIHByb2Nlc3NQb3NpdGlvbik7XG4gICAgICB9XG5cbiAgICAgIGxldCBpbnB1dE5vZGUgPSBlbGVtZW50VXRpbGl0aWVzLmFkZE5vZGUobm9kZVBvc2l0aW9uLngsIG5vZGVQb3NpdGlvbi55LCB7Y2xhc3M6ICdtYWNyb21vbGVjdWxlJywgbGFuZ3VhZ2U6ICdQRCd9KTtcbiAgICAgIGlucHV0Tm9kZS5kYXRhKFwianVzdEFkZGVkXCIsIHRydWUpO1xuICAgICAgaW5wdXROb2RlLmRhdGEoXCJsYWJlbFwiLCBtYWNyb21vbGVjdWxlTmFtZSk7XG4gICAgICBpZiAobWFjcm9tb2xlY3VsZUlzTXVsdGltZXIpIHtcbiAgICAgICAgXG4gICAgICAgIGVsZW1lbnRVdGlsaXRpZXMuc2V0TXVsdGltZXJTdGF0dXMoaW5wdXROb2RlLCB0cnVlKTtcblxuICAgICAgICBjb25zdCBjYXJkaW5hbGl0eSA9IG1hY3JvbW9sZWN1bGVNdWx0aW1lckNhcmRpbmFsaXR5O1xuICAgICAgICBpZiAoY2FyZGluYWxpdHkgIT0gJycpIHtcbiAgICAgICAgICBjb25zdCBpbmZvYm94TGFiZWwgPSBcIk46XCIgKyBjYXJkaW5hbGl0eTtcbiAgICAgICAgICBpbmZvYm94T2JqZWN0ID0ge1xuICAgICAgICAgICAgY2xheno6IFwidW5pdCBvZiBpbmZvcm1hdGlvblwiLFxuICAgICAgICAgICAgbGFiZWw6IHtcbiAgICAgICAgICAgICAgdGV4dDogaW5mb2JveExhYmVsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYmJveDoge1xuICAgICAgICAgICAgICB3OiBpbmZvYm94TGFiZWwubGVuZ3RoICogd2lkdGhQZXJDaGFyLFxuICAgICAgICAgICAgICBoOiBtaW5JbmZvYm94RGltZW5zaW9uXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfTtcbiAgICAgICAgICBlbGVtZW50VXRpbGl0aWVzLmFkZFN0YXRlT3JJbmZvQm94KGlucHV0Tm9kZSwgaW5mb2JveE9iamVjdCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaW5wdXRJbmZvYm94TGFiZWxzLmZvckVhY2goZnVuY3Rpb24obGFiZWwpIHtcbiAgICAgICAgY29uc3QgaW5wdXRJbmZvYm94V2lkdGggPSBsYWJlbC5sZW5ndGggPiAwID8gXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1hdGgubWF4KHdpZHRoUGVyQ2hhciAqIGxhYmVsLmxlbmd0aCwgbWluSW5mb2JveERpbWVuc2lvbikgOiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluSW5mb2JveERpbWVuc2lvbjsgXG4gICAgICAgIGxldCBpbmZvYm94T2JqZWN0ID0ge1xuICAgICAgICAgIGNsYXp6OiBcInVuaXQgb2YgaW5mb3JtYXRpb25cIixcbiAgICAgICAgICBsYWJlbDoge1xuICAgICAgICAgICAgdGV4dDogbGFiZWxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGJib3g6IHtcbiAgICAgICAgICAgIHc6IGlucHV0SW5mb2JveFdpZHRoLFxuICAgICAgICAgICAgaDogbWluSW5mb2JveERpbWVuc2lvblxuICAgICAgICAgIH0sXG4gICAgICAgICAgc3R5bGU6IHtcbiAgICAgICAgICAgIFwic2hhcGUtbmFtZVwiOiBcImVsbGlwc2VcIlxuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgZWxlbWVudFV0aWxpdGllcy5hZGRTdGF0ZU9ySW5mb0JveChpbnB1dE5vZGUsIGluZm9ib3hPYmplY3QpO1xuICAgICAgfSk7XG5cbiAgICAgIGxldCBpbnB1dEVkZ2UgPSBlbGVtZW50VXRpbGl0aWVzLmFkZEVkZ2UoaW5wdXROb2RlLmlkKCksIHByb2Nlc3NOb2RlLmlkKCksIHtjbGFzczogJ2NvbnN1bXB0aW9uJywgbGFuZ3VhZ2U6ICdQRCd9KVxuICAgICAgaW5wdXRFZGdlLmRhdGEoXCJqdXN0QWRkZWRcIiwgdHJ1ZSk7XG5cbiAgICAgIG5vZGVQb3NpdGlvbiA9IHtcbiAgICAgICAgeDogeFBvc09mT3V0cHV0LFxuICAgICAgICB5OiB5UG9zT2ZPdXRwdXRcbiAgICAgIH1cblxuICAgICAgaWYgKG9yaWVudGF0aW9uID09PSBcInZlcnRpY2FsXCIpIHtcbiAgICAgICAgbm9kZVBvc2l0aW9uID0gZWxlbWVudFV0aWxpdGllcy5yb3RhdGU5MChub2RlUG9zaXRpb24sIHByb2Nlc3NQb3NpdGlvbik7XG4gICAgICB9XG5cbiAgICAgIGxldCBvdXRwdXROb2RlID0gZWxlbWVudFV0aWxpdGllcy5hZGROb2RlKG5vZGVQb3NpdGlvbi54LCBub2RlUG9zaXRpb24ueSwge2NsYXNzOiAnbWFjcm9tb2xlY3VsZScsIGxhbmd1YWdlOiAnUEQnfSk7XG4gICAgICBvdXRwdXROb2RlLmRhdGEoXCJqdXN0QWRkZWRcIiwgdHJ1ZSk7XG4gICAgICBvdXRwdXROb2RlLmRhdGEoXCJsYWJlbFwiLCBtYWNyb21vbGVjdWxlTmFtZSk7XG4gICAgICBpZiAobWFjcm9tb2xlY3VsZUlzTXVsdGltZXIpIHtcbiAgICAgICAgXG4gICAgICAgIGVsZW1lbnRVdGlsaXRpZXMuc2V0TXVsdGltZXJTdGF0dXMob3V0cHV0Tm9kZSwgdHJ1ZSk7XG5cbiAgICAgICAgY29uc3QgY2FyZGluYWxpdHkgPSBtYWNyb21vbGVjdWxlTXVsdGltZXJDYXJkaW5hbGl0eTtcbiAgICAgICAgaWYgKGNhcmRpbmFsaXR5ICE9ICcnKSB7XG4gICAgICAgICAgY29uc3QgaW5mb2JveExhYmVsID0gXCJOOlwiICsgY2FyZGluYWxpdHk7XG4gICAgICAgICAgaW5mb2JveE9iamVjdCA9IHtcbiAgICAgICAgICAgIGNsYXp6OiBcInVuaXQgb2YgaW5mb3JtYXRpb25cIixcbiAgICAgICAgICAgIGxhYmVsOiB7XG4gICAgICAgICAgICAgIHRleHQ6IGluZm9ib3hMYWJlbFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGJib3g6IHtcbiAgICAgICAgICAgICAgdzogaW5mb2JveExhYmVsLmxlbmd0aCAqIHdpZHRoUGVyQ2hhcixcbiAgICAgICAgICAgICAgaDogbWluSW5mb2JveERpbWVuc2lvblxuICAgICAgICAgICAgfVxuICAgICAgICAgIH07XG4gICAgICAgICAgZWxlbWVudFV0aWxpdGllcy5hZGRTdGF0ZU9ySW5mb0JveChvdXRwdXROb2RlLCBpbmZvYm94T2JqZWN0KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBvdXRwdXRJbmZvYm94TGFiZWxzLmZvckVhY2goZnVuY3Rpb24obGFiZWwpIHtcbiAgICAgICAgY29uc3Qgb3V0cHV0SW5mb2JveFdpZHRoID0gbGFiZWwubGVuZ3RoID4gMCA/IFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYXRoLm1heCh3aWR0aFBlckNoYXIgKiBsYWJlbC5sZW5ndGgsIG1pbkluZm9ib3hEaW1lbnNpb24pIDogXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbkluZm9ib3hEaW1lbnNpb247XG4gICAgICAgIGluZm9ib3hPYmplY3QgPSB7XG4gICAgICAgICAgY2xheno6IFwidW5pdCBvZiBpbmZvcm1hdGlvblwiLFxuICAgICAgICAgIGxhYmVsOiB7XG4gICAgICAgICAgICB0ZXh0OiBsYWJlbFxuICAgICAgICAgIH0sXG4gICAgICAgICAgYmJveDoge1xuICAgICAgICAgICAgdzogb3V0cHV0SW5mb2JveFdpZHRoLFxuICAgICAgICAgICAgaDogbWluSW5mb2JveERpbWVuc2lvblxuICAgICAgICAgIH0sXG4gICAgICAgICAgc3R5bGU6IHtcbiAgICAgICAgICAgIFwic2hhcGUtbmFtZVwiOiBcImVsbGlwc2VcIlxuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgZWxlbWVudFV0aWxpdGllcy5hZGRTdGF0ZU9ySW5mb0JveChvdXRwdXROb2RlLCBpbmZvYm94T2JqZWN0KTtcbiAgICAgIH0pO1xuXG4gICAgICBcbiAgICAgIFtpbnB1dE5vZGUsIG91dHB1dE5vZGVdLmZvckVhY2goZnVuY3Rpb24obm9kZSl7XG4gICAgICAgIGNvbnN0IHdpZHRoID0gZWxlbWVudFV0aWxpdGllcy5jYWxjdWxhdGVNaW5XaWR0aChub2RlKTtcbiAgICAgICAgXG4gICAgICAgIGVsZW1lbnRVdGlsaXRpZXMucmVzaXplTm9kZXMobm9kZSwgd2lkdGgsIG1hY3JvbW9sZWN1bGVIZWlnaHQsIGZhbHNlLCB0cnVlKTtcbiAgICAgIH0pO1xuICAgICAgXG4gICAgICBpZiAob3JpZW50YXRpb24gPT09IFwiaG9yaXpvbnRhbFwiKSB7XG4gICAgICAgIGxldCBuZXdJbnB1dFhQb3MgPSBwcm9jZXNzUG9zaXRpb24ueCAtIGVkZ2VMZW5ndGggLSBwcm9jZXNzV2lkdGggLyAyIC0gaW5wdXROb2RlLmRhdGEoJ2Jib3gnKS53IC8gMjtcbiAgICAgICAgaW5wdXROb2RlLnBvc2l0aW9uKCd4JywgbmV3SW5wdXRYUG9zKTtcbiAgICAgIFxuICAgICAgICBsZXQgbmV3T3V0cHV0WFBvcyA9IHByb2Nlc3NQb3NpdGlvbi54ICsgZWRnZUxlbmd0aCArIHByb2Nlc3NXaWR0aCAvIDIgKyBvdXRwdXROb2RlLmRhdGEoJ2Jib3gnKS53IC8gMjtcbiAgICAgICAgb3V0cHV0Tm9kZS5wb3NpdGlvbigneCcsIG5ld091dHB1dFhQb3MpO1xuICAgICAgfSBcbiAgICAgIGVsc2Uge1xuICAgICAgICBsZXQgbmV3SW5wdXRZUG9zID0gcHJvY2Vzc1Bvc2l0aW9uLnkgLSBlZGdlTGVuZ3RoIC0gcHJvY2Vzc1dpZHRoIC8gMiAtIGlucHV0Tm9kZS5kYXRhKCdiYm94JykuaCAvIDI7XG4gICAgICAgIGlucHV0Tm9kZS5wb3NpdGlvbigneScsIG5ld0lucHV0WVBvcyk7XG4gICAgICBcbiAgICAgICAgbGV0IG5ld091dHB1dFlQb3MgPSBwcm9jZXNzUG9zaXRpb24ueSArIGVkZ2VMZW5ndGggKyBwcm9jZXNzV2lkdGggLyAyICsgb3V0cHV0Tm9kZS5kYXRhKCdiYm94JykuaCAvIDI7XG4gICAgICAgIG91dHB1dE5vZGUucG9zaXRpb24oJ3knLCBuZXdPdXRwdXRZUG9zKTtcbiAgICAgIH1cblxuICAgICAgbGV0IG91dHB1dEVkZ2UgPSBlbGVtZW50VXRpbGl0aWVzLmFkZEVkZ2UocHJvY2Vzc05vZGUuaWQoKSwgb3V0cHV0Tm9kZS5pZCgpLCB7Y2xhc3M6ICdwcm9kdWN0aW9uJywgbGFuZ3VhZ2U6ICdQRCd9KVxuICAgICAgb3V0cHV0RWRnZS5kYXRhKFwianVzdEFkZGVkXCIsIHRydWUpO1xuXG4gICAgICBpZiAoaGFzUmVndWxhdG9yKSB7XG4gICAgICAgIGNvbnN0IHJlZ3VsYXRvck5hbWUgPSByZWd1bGF0b3IubmFtZTtcbiAgICAgICAgY29uc3QgcmVndWxhdG9yVHlwZSA9IHJlZ3VsYXRvci50eXBlO1xuICAgICAgICBsZXQgeFBvc09mUmVndWxhdG9yID0gcHJvY2Vzc1Bvc2l0aW9uLng7XG4gICAgICAgIGxldCB5UG9zT2ZSZWd1bGF0b3IgPSBwcm9jZXNzUG9zaXRpb24ueSAtICgocHJvY2Vzc0hlaWdodCAvIDIpICsgKHJlZ3VsYXRvckhlaWdodCAvIDIpICsgZWRnZUxlbmd0aCk7IFxuXG4gICAgICAgIG5vZGVQb3NpdGlvbiA9IHtcbiAgICAgICAgICB4OiB4UG9zT2ZSZWd1bGF0b3IsXG4gICAgICAgICAgeTogeVBvc09mUmVndWxhdG9yXG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9yaWVudGF0aW9uID09PSBcInZlcnRpY2FsXCIpIHtcbiAgICAgICAgICBub2RlUG9zaXRpb24gPSBlbGVtZW50VXRpbGl0aWVzLnJvdGF0ZTkwKG5vZGVQb3NpdGlvbiwgcHJvY2Vzc1Bvc2l0aW9uKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCByZWd1bGF0b3JOb2RlID0gZWxlbWVudFV0aWxpdGllcy5hZGROb2RlKG5vZGVQb3NpdGlvbi54LCBub2RlUG9zaXRpb24ueSwge2NsYXNzOiByZWd1bGF0b3JUeXBlLCBsYW5ndWFnZTogJ1BEJ30pO1xuICAgICAgICByZWd1bGF0b3JOb2RlLmRhdGEoJ2p1c3RBZGRlZCcsIHRydWUpO1xuICAgICAgICByZWd1bGF0b3JOb2RlLmRhdGEoJ2xhYmVsJywgcmVndWxhdG9yTmFtZSk7XG5cbiAgICAgICAgaWYgKHJlZ3VsYXRvck11bHRpbWVyLmVuYWJsZWQpIHtcbiAgICAgICAgICBlbGVtZW50VXRpbGl0aWVzLnNldE11bHRpbWVyU3RhdHVzKHJlZ3VsYXRvck5vZGUsIHRydWUpO1xuXG4gICAgICAgICAgY29uc3QgY2FyZGluYWxpdHkgPSByZWd1bGF0b3JNdWx0aW1lci5jYXJkaW5hbGl0eTtcbiAgICAgICAgICBpZiAoY2FyZGluYWxpdHkgIT0gJycpIHtcbiAgICAgICAgICAgIGNvbnN0IGluZm9ib3hMYWJlbCA9IFwiTjpcIiArIGNhcmRpbmFsaXR5O1xuICAgICAgICAgICAgaW5mb2JveE9iamVjdCA9IHtcbiAgICAgICAgICAgICAgY2xheno6IFwidW5pdCBvZiBpbmZvcm1hdGlvblwiLFxuICAgICAgICAgICAgICBsYWJlbDoge1xuICAgICAgICAgICAgICAgIHRleHQ6IGluZm9ib3hMYWJlbFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBiYm94OiB7XG4gICAgICAgICAgICAgICAgdzogaW5mb2JveExhYmVsLmxlbmd0aCAqIHdpZHRoUGVyQ2hhcixcbiAgICAgICAgICAgICAgICBoOiBtaW5JbmZvYm94RGltZW5zaW9uXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBlbGVtZW50VXRpbGl0aWVzLmFkZFN0YXRlT3JJbmZvQm94KHJlZ3VsYXRvck5vZGUsIGluZm9ib3hPYmplY3QpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGxldCByZWd1bGF0b3JFZGdlID0gZWxlbWVudFV0aWxpdGllcy5hZGRFZGdlKHJlZ3VsYXRvck5vZGUuaWQoKSwgcHJvY2Vzc05vZGUuaWQoKSwge2NsYXNzOiAnY2F0YWx5c2lzJywgbGFuZ3VhZ2U6ICdQRCd9KTtcbiAgICAgICAgcmVndWxhdG9yRWRnZS5kYXRhKCdqdXN0QWRkZWQnLCB0cnVlKTtcbiAgICAgIH1cblxuICAgICAgY3kuZW5kQmF0Y2goKTtcblxuICAgICAgY29uc3QgZWxlcyA9IGN5LmVsZW1lbnRzKCdbanVzdEFkZGVkXScpO1xuICAgICAgZWxlcy5yZW1vdmVEYXRhKCdqdXN0QWRkZWQnKTtcblxuICAgICAgY3kuZWxlbWVudHMoKS51bnNlbGVjdCgpO1xuICAgICAgZWxlcy5zZWxlY3QoKTtcblxuICAgICAgcmV0dXJuIGVsZXM7XG4gICAgfTtcblxuICAgIGVsZW1lbnRVdGlsaXRpZXMuY3JlYXRlTWV0YWJvbGljUmVhY3Rpb24gPSBmdW5jdGlvbiAoaW5wdXRzLCBvdXRwdXRzLCByZXZlcnNpYmxlLCByZWd1bGF0b3IsIHJlZ3VsYXRvck11bHRpbWVyLCBvcmllbnRhdGlvbikge1xuICAgICAgbGV0IHJvdGF0ZTkwID0gZnVuY3Rpb24ocG9pbnQsIGNlbnRlcikge1xuICAgICAgICBjb25zdCByZWxhdGl2ZVggPSBjZW50ZXIueCAtIHBvaW50Lng7XG4gICAgICAgIGNvbnN0IHJlbGF0aXZlWSA9IGNlbnRlci55IC0gcG9pbnQueTtcblxuICAgICAgICBjb25zdCByZWxhdGl2ZVJvdGF0ZWRYID0gcmVsYXRpdmVZO1xuICAgICAgICBjb25zdCByZWxhdGl2ZVJvdGF0ZWRZID0gLTEgKiByZWxhdGl2ZVg7XG5cbiAgICAgICAgY29uc3QgcmVzdWx0WCA9IHJlbGF0aXZlUm90YXRlZFggKyBjZW50ZXIueDtcbiAgICAgICAgY29uc3QgcmVzdWx0WSA9IHJlbGF0aXZlUm90YXRlZFkgKyBjZW50ZXIueTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHg6IHJlc3VsdFgsXG4gICAgICAgICAgeTogcmVzdWx0WVxuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgY29uc3QgaGFzUmVndWxhdG9yID0gcmVndWxhdG9yLm5hbWUgIT09IHVuZGVmaW5lZDtcbiAgICAgIGNvbnN0IGRlZmF1bHRTaW1wbGVDaGVtaWNhbFByb3BlcnRpZXMgPSBlbGVtZW50VXRpbGl0aWVzLmdldERlZmF1bHRQcm9wZXJ0aWVzKCBcInNpbXBsZSBjaGVtaWNhbFwiICk7XG4gICAgICBjb25zdCBkZWZhdWx0UmVndWxhdG9yUHJvcGVydGllcyA9IGhhc1JlZ3VsYXRvciA/IGVsZW1lbnRVdGlsaXRpZXMuZ2V0RGVmYXVsdFByb3BlcnRpZXMocmVndWxhdG9yLnR5cGUpIDoge307XG4gICAgICBjb25zdCBkZWZhdWx0UHJvY2Vzc1Byb3BlcnRpZXMgPSBlbGVtZW50VXRpbGl0aWVzLmdldERlZmF1bHRQcm9wZXJ0aWVzKFwiY2F0YWx5dGljXCIpO1xuICAgICAgY29uc3QgcHJvY2Vzc1dpZHRoID0gZGVmYXVsdFByb2Nlc3NQcm9wZXJ0aWVzLndpZHRoIHx8IDUwO1xuICAgICAgY29uc3QgcHJvY2Vzc0hlaWdodCA9IGRlZmF1bHRQcm9jZXNzUHJvcGVydGllcy5oZWlnaHQgfHwgNTA7XG4gICAgICBjb25zdCBzaW1wbGVDaGVtaWNhbEhlaWdodCA9IGRlZmF1bHRTaW1wbGVDaGVtaWNhbFByb3BlcnRpZXMuaGVpZ2h0IHx8IDM1O1xuICAgICAgY29uc3Qgc2ltcGxlQ2hlbWljYWxXaWR0aCA9IGRlZmF1bHRTaW1wbGVDaGVtaWNhbFByb3BlcnRpZXMud2lkdGggfHwgMzU7XG4gICAgICBjb25zdCByZWd1bGF0b3JIZWlnaHQgPSBkZWZhdWx0UmVndWxhdG9yUHJvcGVydGllcy5oZWlnaHQgfHwgNTA7XG4gICAgICBjb25zdCBwcm9jZXNzUG9zaXRpb24gPSBlbGVtZW50VXRpbGl0aWVzLmNvbnZlcnRUb01vZGVsUG9zaXRpb24oe3g6IGN5LndpZHRoKCkgLyAyLCB5OiBjeS5oZWlnaHQoKSAvIDJ9KTtcbiAgICAgIGNvbnN0IHRpbGluZ1BhZGRpbmdWZXJ0aWNhbCA9IDE1O1xuICAgICAgY29uc3QgdGlsaW5nUGFkZGluZ0hvcml6b250YWwgPSAxNTtcbiAgICAgIGNvbnN0IGVkZ2VMZW5ndGggPSAzMDtcbiAgICAgIGNvbnN0IHByb2Nlc3NMZWZ0U2lkZUVkZ2VUeXBlID0gcmV2ZXJzaWJsZSA/IFwicHJvZHVjdGlvblwiIDogXCJjb25zdW1wdGlvblwiO1xuICAgICAgY29uc3QgcHJvY2Vzc1JpZ2h0U2lkZUVkZ2VUeXBlID0gXCJwcm9kdWN0aW9uXCI7XG4gICAgICBjb25zdCBwcm9jZXNzUG9ydHNPcmRlcmluZyA9IG9yaWVudGF0aW9uID09PSBcInZlcnRpY2FsXCIgPyBcIlQtdG8tQlwiIDogXCJMLXRvLVJcIjtcblxuICAgICAgY3kuc3RhcnRCYXRjaCgpO1xuICAgICAgaWYgKCFlbGVtZW50VXRpbGl0aWVzLmdldE1hcFR5cGUoKSkge1xuICAgICAgICBlbGVtZW50VXRpbGl0aWVzLnNldE1hcFR5cGUoXCJQRFwiKTtcbiAgICAgIH1cblxuICAgICAgbGV0IHhQb3NPZklucHV0ID0gcHJvY2Vzc1Bvc2l0aW9uLnggLSBlZGdlTGVuZ3RoIC0gcHJvY2Vzc1dpZHRoIC8gMiAtIHNpbXBsZUNoZW1pY2FsV2lkdGggLyAyO1xuICAgICAgbGV0IHhQb3NPZk91dHB1dCA9IHByb2Nlc3NQb3NpdGlvbi54ICsgZWRnZUxlbmd0aCArIHByb2Nlc3NXaWR0aCAvIDIgKyBzaW1wbGVDaGVtaWNhbFdpZHRoIC8gMjtcblxuXG4gICAgICBsZXQgcHJvY2Vzc05vZGUgPSBlbGVtZW50VXRpbGl0aWVzLmFkZE5vZGUocHJvY2Vzc1Bvc2l0aW9uLngsIHByb2Nlc3NQb3NpdGlvbi55LCB7Y2xhc3M6IFwicHJvY2Vzc1wiLCBsYW5ndWFnZTogXCJQRFwifSk7XG4gICAgICBlbGVtZW50VXRpbGl0aWVzLnNldFBvcnRzT3JkZXJpbmcocHJvY2Vzc05vZGUsIHByb2Nlc3NQb3J0c09yZGVyaW5nKTtcbiAgICAgIHByb2Nlc3NOb2RlLmRhdGEoJ2p1c3RBZGRlZCcsIHRydWUpO1xuXG4gICAgICBjb25zdCBudW1PZklucHV0Tm9kZXMgPSBpbnB1dHMubGVuZ3RoO1xuICAgICAgY29uc3QgbnVtT2ZPdXRwdXROb2RlcyA9IG91dHB1dHMubGVuZ3RoO1xuXG4gICAgICBsZXQgeVBvc09mSW5wdXQgPSBwcm9jZXNzUG9zaXRpb24ueSAtICgobnVtT2ZJbnB1dE5vZGVzIC0gMSkgLyAyKSAqIChzaW1wbGVDaGVtaWNhbEhlaWdodCArIHRpbGluZ1BhZGRpbmdWZXJ0aWNhbCk7XG5cbiAgICAgIGlucHV0cy5mb3JFYWNoKGZ1bmN0aW9uKGRhdGEsIGluZGV4KSB7XG4gICAgICAgIGNvbnN0IG5vZGVOYW1lID0gZGF0YS5uYW1lO1xuICAgICAgICBjb25zdCBub2RlVHlwZSA9IGRhdGEudHlwZTtcblxuICAgICAgICBpZiAoaW5kZXggPT09IDApIHtcbiAgICAgICAgICB5UG9zT2ZJbnB1dCA9IHByb2Nlc3NQb3NpdGlvbi55O1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGluZGV4ICUgMiA9PT0gMSkge1xuICAgICAgICAgIHlQb3NPZklucHV0ID0gcHJvY2Vzc1Bvc2l0aW9uLnkgLSAoKHNpbXBsZUNoZW1pY2FsSGVpZ2h0ICsgdGlsaW5nUGFkZGluZ1ZlcnRpY2FsKSAqIE1hdGguY2VpbChpbmRleCAvIDIpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICB5UG9zT2ZJbnB1dCA9IHByb2Nlc3NQb3NpdGlvbi55ICsgKChzaW1wbGVDaGVtaWNhbEhlaWdodCArIHRpbGluZ1BhZGRpbmdWZXJ0aWNhbCkgKiAoaW5kZXggLyAyKSk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbm9kZVBvc2l0aW9uID0ge1xuICAgICAgICAgIHg6IHhQb3NPZklucHV0LFxuICAgICAgICAgIHk6IHlQb3NPZklucHV0XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9yaWVudGF0aW9uID09PSBcInZlcnRpY2FsXCIpIHtcbiAgICAgICAgICBub2RlUG9zaXRpb24gPSByb3RhdGU5MChub2RlUG9zaXRpb24sIHByb2Nlc3NQb3NpdGlvbik7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbmV3Tm9kZSA9IGVsZW1lbnRVdGlsaXRpZXMuYWRkTm9kZShub2RlUG9zaXRpb24ueCwgbm9kZVBvc2l0aW9uLnksIHtjbGFzczogbm9kZVR5cGUudG9Mb3dlckNhc2UoKSwgbGFuZ3VhZ2U6IFwiUERcIn0pO1xuICAgICAgICBuZXdOb2RlLmRhdGEoXCJqdXN0QWRkZWRcIiwgdHJ1ZSk7XG4gICAgICAgIG5ld05vZGUuZGF0YShcImxhYmVsXCIsIG5vZGVOYW1lKTtcblxuICAgICAgICBsZXQgbmV3RWRnZTtcbiAgICAgICAgaWYgKHJldmVyc2libGUpIHtcbiAgICAgICAgICBuZXdFZGdlID0gZWxlbWVudFV0aWxpdGllcy5hZGRFZGdlKHByb2Nlc3NOb2RlLmlkKCksIG5ld05vZGUuaWQoKSwge2NsYXNzOiBwcm9jZXNzTGVmdFNpZGVFZGdlVHlwZSwgbGFuZ3VhZ2U6IFwiUERcIn0sIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCAxKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBuZXdFZGdlID0gZWxlbWVudFV0aWxpdGllcy5hZGRFZGdlKG5ld05vZGUuaWQoKSwgcHJvY2Vzc05vZGUuaWQoKSwge2NsYXNzOiBwcm9jZXNzTGVmdFNpZGVFZGdlVHlwZSwgbGFuZ3VhZ2U6IFwiUERcIn0pO1xuICAgICAgICB9XG4gICAgICAgIG5ld0VkZ2UuZGF0YShcImp1c3RBZGRlZFwiLCB0cnVlKTtcbiAgICAgIH0pO1xuXG4gICAgICBsZXQgeVBvc09mT3V0cHV0ID0gcHJvY2Vzc1Bvc2l0aW9uLnkgLSAoKG51bU9mT3V0cHV0Tm9kZXMgLSAxKSAvIDIpICogKHNpbXBsZUNoZW1pY2FsSGVpZ2h0ICsgdGlsaW5nUGFkZGluZ1ZlcnRpY2FsKTtcblxuICAgICAgb3V0cHV0cy5mb3JFYWNoKGZ1bmN0aW9uKGRhdGEsIGluZGV4KSB7XG4gICAgICAgIGNvbnN0IG5vZGVOYW1lID0gZGF0YS5uYW1lO1xuICAgICAgICBjb25zdCBub2RlVHlwZSA9IGRhdGEudHlwZTtcblxuICAgICAgICBpZiAoaW5kZXggPT09IDApIHtcbiAgICAgICAgICB5UG9zT2ZPdXRwdXQgPSBwcm9jZXNzUG9zaXRpb24ueTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChpbmRleCAlIDIgPT09IDEpIHtcbiAgICAgICAgICB5UG9zT2ZPdXRwdXQgPSBwcm9jZXNzUG9zaXRpb24ueSAtICgoc2ltcGxlQ2hlbWljYWxIZWlnaHQgKyB0aWxpbmdQYWRkaW5nVmVydGljYWwpICogTWF0aC5jZWlsKGluZGV4IC8gMikpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIHlQb3NPZk91dHB1dCA9IHByb2Nlc3NQb3NpdGlvbi55ICsgKChzaW1wbGVDaGVtaWNhbEhlaWdodCArIHRpbGluZ1BhZGRpbmdWZXJ0aWNhbCkgKiAoaW5kZXggLyAyKSk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbm9kZVBvc2l0aW9uID0ge1xuICAgICAgICAgIHg6IHhQb3NPZk91dHB1dCxcbiAgICAgICAgICB5OiB5UG9zT2ZPdXRwdXRcbiAgICAgICAgfVxuICAgICAgICBpZiAob3JpZW50YXRpb24gPT09IFwidmVydGljYWxcIikge1xuICAgICAgICAgIG5vZGVQb3NpdGlvbiA9IHJvdGF0ZTkwKG5vZGVQb3NpdGlvbiwgcHJvY2Vzc1Bvc2l0aW9uKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBuZXdOb2RlID0gZWxlbWVudFV0aWxpdGllcy5hZGROb2RlKG5vZGVQb3NpdGlvbi54LCBub2RlUG9zaXRpb24ueSwge2NsYXNzOiBub2RlVHlwZS50b0xvd2VyQ2FzZSgpLCBsYW5ndWFnZTogXCJQRFwifSk7XG4gICAgICAgIG5ld05vZGUuZGF0YShcImp1c3RBZGRlZFwiLCB0cnVlKTtcbiAgICAgICAgbmV3Tm9kZS5kYXRhKFwibGFiZWxcIiwgbm9kZU5hbWUpO1xuXG4gICAgICAgIGxldCBuZXdFZGdlID0gZWxlbWVudFV0aWxpdGllcy5hZGRFZGdlKHByb2Nlc3NOb2RlLmlkKCksIG5ld05vZGUuaWQoKSwge2NsYXNzOiBwcm9jZXNzUmlnaHRTaWRlRWRnZVR5cGUsIGxhbmd1YWdlOiBcIlBEXCJ9LCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgMCk7XG4gICAgICAgIG5ld0VkZ2UuZGF0YShcImp1c3RBZGRlZFwiLCB0cnVlKTtcbiAgICAgIH0pO1xuXG4gICAgICAvLyBhZGQgcmVndWxhdG9yIG5vZGVcbiAgICAgIGlmIChoYXNSZWd1bGF0b3IpIHtcbiAgICAgICAgY29uc3QgcmVndWxhdG9yTmFtZSA9IHJlZ3VsYXRvci5uYW1lO1xuICAgICAgICBjb25zdCByZWd1bGF0b3JUeXBlID0gcmVndWxhdG9yLnR5cGU7XG4gICAgICAgIGxldCB4UG9zT2ZSZWd1bGF0b3IgPSBwcm9jZXNzUG9zaXRpb24ueDtcbiAgICAgICAgbGV0IHlQb3NPZlJlZ3VsYXRvciA9IHByb2Nlc3NQb3NpdGlvbi55IC0gKChwcm9jZXNzSGVpZ2h0IC8gMikgKyAocmVndWxhdG9ySGVpZ2h0IC8gMikgKyBlZGdlTGVuZ3RoKTsgXG5cbiAgICAgICAgbGV0IG5vZGVQb3NpdGlvbiA9IHtcbiAgICAgICAgICB4OiB4UG9zT2ZSZWd1bGF0b3IsXG4gICAgICAgICAgeTogeVBvc09mUmVndWxhdG9yXG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9yaWVudGF0aW9uID09PSBcInZlcnRpY2FsXCIpIHtcbiAgICAgICAgICBub2RlUG9zaXRpb24gPSByb3RhdGU5MChub2RlUG9zaXRpb24sIHByb2Nlc3NQb3NpdGlvbik7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgcmVndWxhdG9yTm9kZSA9IGVsZW1lbnRVdGlsaXRpZXMuYWRkTm9kZShub2RlUG9zaXRpb24ueCwgbm9kZVBvc2l0aW9uLnksIHtjbGFzczogcmVndWxhdG9yVHlwZSwgbGFuZ3VhZ2U6ICdQRCd9KTtcbiAgICAgICAgcmVndWxhdG9yTm9kZS5kYXRhKCdqdXN0QWRkZWQnLCB0cnVlKTtcbiAgICAgICAgcmVndWxhdG9yTm9kZS5kYXRhKCdsYWJlbCcsIHJlZ3VsYXRvck5hbWUpO1xuXG4gICAgICAgIGlmIChyZWd1bGF0b3JNdWx0aW1lci5lbmFibGVkKSB7XG4gICAgICAgICAgZWxlbWVudFV0aWxpdGllcy5zZXRNdWx0aW1lclN0YXR1cyhyZWd1bGF0b3JOb2RlLCB0cnVlKTtcblxuICAgICAgICAgIGNvbnN0IGNhcmRpbmFsaXR5ID0gcmVndWxhdG9yTXVsdGltZXIuY2FyZGluYWxpdHk7XG4gICAgICAgICAgaWYgKGNhcmRpbmFsaXR5ICE9ICcnKSB7XG4gICAgICAgICAgICBjb25zdCBpbmZvYm94TGFiZWwgPSBcIk46XCIgKyBjYXJkaW5hbGl0eTtcbiAgICAgICAgICAgIGluZm9ib3hPYmplY3QgPSB7XG4gICAgICAgICAgICAgIGNsYXp6OiBcInVuaXQgb2YgaW5mb3JtYXRpb25cIixcbiAgICAgICAgICAgICAgbGFiZWw6IHtcbiAgICAgICAgICAgICAgICB0ZXh0OiBpbmZvYm94TGFiZWxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgYmJveDoge1xuICAgICAgICAgICAgICAgIHc6IGluZm9ib3hMYWJlbC5sZW5ndGggKiA2LFxuICAgICAgICAgICAgICAgIGg6IDE1XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGVsZW1lbnRVdGlsaXRpZXMuYWRkU3RhdGVPckluZm9Cb3gocmVndWxhdG9yTm9kZSwgaW5mb2JveE9iamVjdCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHJlZ3VsYXRvckVkZ2UgPSBlbGVtZW50VXRpbGl0aWVzLmFkZEVkZ2UocmVndWxhdG9yTm9kZS5pZCgpLCBwcm9jZXNzTm9kZS5pZCgpLCB7Y2xhc3M6ICdjYXRhbHlzaXMnLCBsYW5ndWFnZTogJ1BEJ30pO1xuICAgICAgICByZWd1bGF0b3JFZGdlLmRhdGEoJ2p1c3RBZGRlZCcsIHRydWUpO1xuICAgICAgfVxuXG4gICAgICBjeS5lbmRCYXRjaCgpO1xuXG4gICAgICBjb25zdCBlbGVzID0gY3kuZWxlbWVudHMoJ1tqdXN0QWRkZWRdJyk7XG4gICAgICBlbGVzLnJlbW92ZURhdGEoJ2p1c3RBZGRlZCcpO1xuXG4gICAgICBjeS5lbGVtZW50cygpLnVuc2VsZWN0KCk7XG4gICAgICBlbGVzLnNlbGVjdCgpO1xuXG4gICAgICByZXR1cm4gZWxlcztcbiAgICB9O1xuXG4gICAgZWxlbWVudFV0aWxpdGllcy5jcmVhdGVNZXRhYm9saWNDYXRhbHl0aWNBY3Rpdml0eSA9IGZ1bmN0aW9uKGlucHV0Tm9kZUxpc3QsIG91dHB1dE5vZGVMaXN0LCBjYXRhbHlzdE5hbWUsIGNhdGFseXN0VHlwZSwgcHJvY2Vzc1Bvc2l0aW9uLCB0aWxpbmdQYWRkaW5nVmVydGljYWwsIHRpbGluZ1BhZGRpbmdIb3Jpem9udGFsLCBlZGdlTGVuZ3RoKSB7XG4gICAgICB2YXIgZGVmYXVsdE1hY3JvbW9sZWN1bFByb3BlcnRpZXMgPSBlbGVtZW50VXRpbGl0aWVzLmdldERlZmF1bHRQcm9wZXJ0aWVzKCBcIm1hY3JvbW9sZWN1bGVcIiApO1xuICAgICAgdmFyIGRlZmF1bHRTaW1wbGVDaGVtaWNhbFByb3BlcnRpZXMgPSBlbGVtZW50VXRpbGl0aWVzLmdldERlZmF1bHRQcm9wZXJ0aWVzKCBcInNpbXBsZSBjaGVtaWNhbFwiICk7XG4gICAgICB2YXIgZGVmYXVsdENhdGFseXN0VHlwZVByb3BlcnRpZXMgPSBlbGVtZW50VXRpbGl0aWVzLmdldERlZmF1bHRQcm9wZXJ0aWVzKGNhdGFseXN0VHlwZSk7XG4gICAgICB2YXIgZGVmYXVsdFByb2Nlc3NQcm9wZXJ0aWVzID0gZWxlbWVudFV0aWxpdGllcy5nZXREZWZhdWx0UHJvcGVydGllcyhcImNhdGFseXRpY1wiKTtcbiAgICAgIHZhciBwcm9jZXNzV2lkdGggPSBkZWZhdWx0UHJvY2Vzc1Byb3BlcnRpZXMud2lkdGggfHwgNTA7XG4gICAgICB2YXIgcHJvY2Vzc0hlaWdodCA9IGRlZmF1bHRQcm9jZXNzUHJvcGVydGllcy5oZWlnaHQgfHwgNTA7XG4gICAgICB2YXIgc2ltcGxlQ2hlbWljYWxIZWlnaHQgPSBkZWZhdWx0U2ltcGxlQ2hlbWljYWxQcm9wZXJ0aWVzLmhlaWdodCB8fCAzNTtcbiAgICAgIHZhciBtYWNyb21vbGVjdWxlV2lkdGggPSBkZWZhdWx0TWFjcm9tb2xlY3VsUHJvcGVydGllcy53aWR0aCB8fCA1MDtcbiAgICAgIHZhciBtYWNyb21vbGVjdWxlSGVpZ2h0ID0gZGVmYXVsdE1hY3JvbW9sZWN1bFByb3BlcnRpZXMuaGVpZ2h0IHx8IDUwO1xuICAgICAgdmFyIGNhdGFseXN0SGVpZ2h0ID0gZGVmYXVsdENhdGFseXN0VHlwZVByb3BlcnRpZXMuaGVpZ2h0IHx8IDUwO1xuICAgICAgdmFyIHByb2Nlc3NQb3NpdGlvbiA9IHByb2Nlc3NQb3NpdGlvbiB8fCBlbGVtZW50VXRpbGl0aWVzLmNvbnZlcnRUb01vZGVsUG9zaXRpb24oe3g6IGN5LndpZHRoKCkgLyAyLCB5OiBjeS5oZWlnaHQoKSAvIDJ9KTtcbiAgICAgIHZhciB0aWxpbmdQYWRkaW5nVmVydGljYWwgPSB0aWxpbmdQYWRkaW5nVmVydGljYWwgfHwgMTU7XG4gICAgICB2YXIgdGlsaW5nUGFkZGluZ0hvcml6b250YWwgPSB0aWxpbmdQYWRkaW5nSG9yaXpvbnRhbCB8fCAxNTtcbiAgICAgIHZhciBlZGdlTGVuZ3RoID0gZWRnZUxlbmd0aCB8fCA2MDtcblxuICAgICAgY3kuc3RhcnRCYXRjaCgpO1xuICAgICAgaWYgKCFlbGVtZW50VXRpbGl0aWVzLmdldE1hcFR5cGUoKSkge1xuICAgICAgICBlbGVtZW50VXRpbGl0aWVzLnNldE1hcFR5cGUoXCJQRFwiKTtcbiAgICAgIH1cblxuICAgICAgdmFyIHhQb3NPZklucHV0ID0gcHJvY2Vzc1Bvc2l0aW9uLnggLSBlZGdlTGVuZ3RoIC0gcHJvY2Vzc1dpZHRoIC8gMiAtIG1hY3JvbW9sZWN1bGVXaWR0aCAvIDI7XG4gICAgICB2YXIgeFBvc09mT3V0cHV0ID0gcHJvY2Vzc1Bvc2l0aW9uLnggKyBlZGdlTGVuZ3RoICsgcHJvY2Vzc1dpZHRoIC8gMiArIG1hY3JvbW9sZWN1bGVXaWR0aCAvIDI7XG5cbiAgICAgIHZhciBwcm9jZXNzTm9kZSA9IGVsZW1lbnRVdGlsaXRpZXMuYWRkTm9kZShwcm9jZXNzUG9zaXRpb24ueCwgcHJvY2Vzc1Bvc2l0aW9uLnksIHtjbGFzczogXCJwcm9jZXNzXCIsIGxhbmd1YWdlOiBcIlBEXCJ9KTtcbiAgICAgIGVsZW1lbnRVdGlsaXRpZXMuc2V0UG9ydHNPcmRlcmluZyhwcm9jZXNzTm9kZSwgXCJMLXRvLVJcIik7XG4gICAgICBwcm9jZXNzTm9kZS5kYXRhKCdqdXN0QWRkZWQnLCB0cnVlKTtcblxuICAgICAgY29uc3QgbnVtT2ZJbnB1dE5vZGVzID0gaW5wdXROb2RlTGlzdC5sZW5ndGg7XG4gICAgICBjb25zdCBudW1PZk91dHB1dE5vZGVzID0gb3V0cHV0Tm9kZUxpc3QubGVuZ3RoO1xuICAgICAgdmFyIHlQb3NPZklucHV0ID0gcHJvY2Vzc1Bvc2l0aW9uLnkgLSAoKG51bU9mSW5wdXROb2RlcyAtIDEpIC8gMikgKiAobWFjcm9tb2xlY3VsZUhlaWdodCArIHRpbGluZ1BhZGRpbmdWZXJ0aWNhbCk7XG5cbiAgICAgIC8vIGFkZCBpbnB1dCBzaWRlIG5vZGVzXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG51bU9mSW5wdXROb2RlczsgaSsrKSB7XG4gICAgICAgIGlmKGlucHV0Tm9kZUxpc3RbaV0udHlwZSA9PSBcIlNpbXBsZSBDaGVtaWNhbFwiKXtcbiAgICAgICAgICB2YXIgbmV3Tm9kZSA9IGVsZW1lbnRVdGlsaXRpZXMuYWRkTm9kZSh4UG9zT2ZJbnB1dCwgeVBvc09mSW5wdXQsIHtjbGFzcyA6ICdzaW1wbGUgY2hlbWljYWwnLCBsYW5ndWFnZSA6ICdQRCd9KTtcbiAgICAgICAgICB5UG9zT2ZJbnB1dCArPSBzaW1wbGVDaGVtaWNhbEhlaWdodCArIHRpbGluZ1BhZGRpbmdWZXJ0aWNhbDtcbiAgICAgICAgfVxuICAgICAgICBlbHNle1xuICAgICAgICAgIHZhciBuZXdOb2RlID0gZWxlbWVudFV0aWxpdGllcy5hZGROb2RlKHhQb3NPZklucHV0LCB5UG9zT2ZJbnB1dCwge2NsYXNzIDogJ21hY3JvbW9sZWN1bGUnLCBsYW5ndWFnZSA6ICdQRCd9KTtcbiAgICAgICAgICAvL3VwZGF0ZSB0aGUgeSBwb3NpdGlvblxuICAgICAgICAgIHlQb3NPZklucHV0ICs9IG1hY3JvbW9sZWN1bGVIZWlnaHQgKyB0aWxpbmdQYWRkaW5nVmVydGljYWw7XG4gICAgICAgIH1cbiAgICAgICAgbmV3Tm9kZS5kYXRhKCdqdXN0QWRkZWQnLCB0cnVlKTtcbiAgICAgICAgbmV3Tm9kZS5kYXRhKCdsYWJlbCcsIGlucHV0Tm9kZUxpc3RbaV0ubmFtZSk7XG5cbiAgICAgICAgdmFyIG5ld0VkZ2UgPSBlbGVtZW50VXRpbGl0aWVzLmFkZEVkZ2UobmV3Tm9kZS5pZCgpLCBwcm9jZXNzTm9kZS5pZCgpLCB7Y2xhc3MgOiAnY29uc3VtcHRpb24nLCBsYW5ndWFnZSA6ICdQRCd9KTtcbiAgICAgICAgbmV3RWRnZS5kYXRhKCdqdXN0QWRkZWQnLCB0cnVlKTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgdmFyIHlQb3NPZk91dHB1dCA9IHByb2Nlc3NQb3NpdGlvbi55IC0gKChudW1PZk91dHB1dE5vZGVzIC0gMSkgLyAyKSAqIChtYWNyb21vbGVjdWxlSGVpZ2h0ICsgdGlsaW5nUGFkZGluZ1ZlcnRpY2FsKTtcblxuICAgICAgLy8gYWRkIG91dHB1dCBzaWRlIG5vZGVzXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG51bU9mT3V0cHV0Tm9kZXM7IGkrKykge1xuICAgICAgICBpZihvdXRwdXROb2RlTGlzdFtpXS50eXBlID09IFwiU2ltcGxlIENoZW1pY2FsXCIpe1xuICAgICAgICAgIHZhciBuZXdOb2RlID0gZWxlbWVudFV0aWxpdGllcy5hZGROb2RlKHhQb3NPZk91dHB1dCwgeVBvc09mT3V0cHV0LCB7Y2xhc3MgOiAnc2ltcGxlIGNoZW1pY2FsJywgbGFuZ3VhZ2UgOiAnUEQnfSk7XG4gICAgICAgICAgeVBvc09mT3V0cHV0ICs9IHNpbXBsZUNoZW1pY2FsSGVpZ2h0ICsgdGlsaW5nUGFkZGluZ1ZlcnRpY2FsO1xuICAgICAgICB9XG4gICAgICAgIGVsc2V7XG4gICAgICAgICAgdmFyIG5ld05vZGUgPSBlbGVtZW50VXRpbGl0aWVzLmFkZE5vZGUoeFBvc09mT3V0cHV0LCB5UG9zT2ZPdXRwdXQsIHtjbGFzcyA6ICdtYWNyb21vbGVjdWxlJywgbGFuZ3VhZ2UgOiAnUEQnfSk7XG4gICAgICAgICAgLy91cGRhdGUgdGhlIHkgcG9zaXRpb25cbiAgICAgICAgICB5UG9zT2ZPdXRwdXQgKz0gbWFjcm9tb2xlY3VsZUhlaWdodCArIHRpbGluZ1BhZGRpbmdWZXJ0aWNhbDtcbiAgICAgICAgfVxuICAgICAgICBuZXdOb2RlLmRhdGEoJ2p1c3RBZGRlZCcsIHRydWUpO1xuICAgICAgICBuZXdOb2RlLmRhdGEoJ2xhYmVsJywgb3V0cHV0Tm9kZUxpc3RbaV0ubmFtZSk7XG5cbiAgICAgICAgdmFyIG5ld0VkZ2UgPSBlbGVtZW50VXRpbGl0aWVzLmFkZEVkZ2UocHJvY2Vzc05vZGUuaWQoKSwgbmV3Tm9kZS5pZCgpLCB7Y2xhc3MgOiAncHJvZHVjdGlvbicsIGxhbmd1YWdlIDogJ1BEJ30pO1xuICAgICAgICBuZXdFZGdlLmRhdGEoJ2p1c3RBZGRlZCcsIHRydWUpO1xuICAgICAgfVxuXG4gICAgICAvLyBhZGQgY2F0YWx5c3Qgbm9kZVxuICAgICAgdmFyIHhQb3NPZkNhdGFseXN0ID0gcHJvY2Vzc1Bvc2l0aW9uLng7XG4gICAgICB2YXIgeVBvc09mQ2F0YWx5c3QgPSBwcm9jZXNzUG9zaXRpb24ueSAtIChwcm9jZXNzSGVpZ2h0ICsgY2F0YWx5c3RIZWlnaHQgKyB0aWxpbmdQYWRkaW5nVmVydGljYWwpOyBcbiAgICAgIHZhciBjYXRhbHlzdE5vZGUgPSBlbGVtZW50VXRpbGl0aWVzLmFkZE5vZGUoeFBvc09mQ2F0YWx5c3QsIHlQb3NPZkNhdGFseXN0LCB7Y2xhc3M6IGNhdGFseXN0VHlwZSwgbGFuZ3VhZ2U6ICdQRCd9KTtcbiAgICAgIGNhdGFseXN0Tm9kZS5kYXRhKCdqdXN0QWRkZWQnLCB0cnVlKTtcbiAgICAgIGNhdGFseXN0Tm9kZS5kYXRhKCdsYWJlbCcsIGNhdGFseXN0TmFtZSk7XG5cbiAgICAgIHZhciBjYXRhbHlzdEVkZ2UgPSBlbGVtZW50VXRpbGl0aWVzLmFkZEVkZ2UoY2F0YWx5c3ROb2RlLmlkKCksIHByb2Nlc3NOb2RlLmlkKCksIHtjbGFzczogJ2NhdGFseXNpcycsIGxhbmd1YWdlOiAnUEQnfSk7XG4gICAgICBjYXRhbHlzdEVkZ2UuZGF0YSgnanVzdEFkZGVkJywgdHJ1ZSk7XG5cbiAgICAgIGN5LmVuZEJhdGNoKCk7XG5cbiAgICAgIC8vZmlsdGVyIHRoZSBqdXN0IGFkZGVkIGVsZW1lbXRzIHRvIHJldHVybiB0aGVtIGFuZCByZW1vdmUganVzdCBhZGRlZCBtYXJrXG4gICAgICB2YXIgZWxlcyA9IGN5LmVsZW1lbnRzKCdbanVzdEFkZGVkXScpO1xuICAgICAgZWxlcy5yZW1vdmVEYXRhKCdqdXN0QWRkZWQnKTtcblxuICAgICAgY3kuZWxlbWVudHMoKS51bnNlbGVjdCgpO1xuICAgICAgZWxlcy5zZWxlY3QoKTtcblxuICAgICAgcmV0dXJuIGVsZXM7IC8vIFJldHVybiB0aGUganVzdCBhZGRlZCBlbGVtZW50c1xuICAgIH1cblxuICAgIGVsZW1lbnRVdGlsaXRpZXMuY3JlYXRlQWN0aXZhdGlvblJlYWN0aW9uID0gZnVuY3Rpb24gKHByb3RlaW5OYW1lLCBwcm9jZXNzUG9zaXRpb24sIGVkZ2VMZW5ndGgsIHJldmVyc2UpIHtcbiAgICAgIHZhciBkZWZhdWx0TWFjcm9tb2xlY3VsUHJvcGVydGllcyA9IGVsZW1lbnRVdGlsaXRpZXMuZ2V0RGVmYXVsdFByb3BlcnRpZXMoIFwibWFjcm9tb2xlY3VsZVwiICk7XG4gICAgICB2YXIgZGVmYXVsdFByb2Nlc3NQcm9wZXJ0aWVzID0gZWxlbWVudFV0aWxpdGllcy5nZXREZWZhdWx0UHJvcGVydGllcyhcImFjdGl2YXRpb25cIik7XG4gICAgICB2YXIgcHJvY2Vzc1dpZHRoID0gZGVmYXVsdFByb2Nlc3NQcm9wZXJ0aWVzLndpZHRoIHx8IDUwO1xuICAgICAgdmFyIG1hY3JvbW9sZWN1bGVXaWR0aCA9IGRlZmF1bHRNYWNyb21vbGVjdWxQcm9wZXJ0aWVzLndpZHRoIHx8IDUwO1xuICAgICAgdmFyIHByb2Nlc3NQb3NpdGlvbiA9IHByb2Nlc3NQb3NpdGlvbiB8fCBlbGVtZW50VXRpbGl0aWVzLmNvbnZlcnRUb01vZGVsUG9zaXRpb24oe3g6IGN5LndpZHRoKCkgLyAyLCB5OiBjeS5oZWlnaHQoKSAvIDJ9KTtcbiAgICAgIHZhciBlZGdlTGVuZ3RoID0gZWRnZUxlbmd0aCB8fCA2MDtcblxuICAgICAgY3kuc3RhcnRCYXRjaCgpO1xuICAgICAgaWYgKCFlbGVtZW50VXRpbGl0aWVzLmdldE1hcFR5cGUoKSkge1xuICAgICAgICBlbGVtZW50VXRpbGl0aWVzLnNldE1hcFR5cGUoXCJQRFwiKTtcbiAgICAgIH1cblxuICAgICAgdmFyIHhQb3NPZklucHV0ID0gcHJvY2Vzc1Bvc2l0aW9uLnggLSBlZGdlTGVuZ3RoIC0gcHJvY2Vzc1dpZHRoIC8gMiAtIG1hY3JvbW9sZWN1bGVXaWR0aCAvIDI7XG4gICAgICB2YXIgeFBvc09mT3V0cHV0ID0gcHJvY2Vzc1Bvc2l0aW9uLnggKyBlZGdlTGVuZ3RoICsgcHJvY2Vzc1dpZHRoIC8gMiArIG1hY3JvbW9sZWN1bGVXaWR0aCAvIDI7XG5cbiAgICAgIHZhciBwcm9jZXNzTm9kZSA9IGVsZW1lbnRVdGlsaXRpZXMuYWRkTm9kZShwcm9jZXNzUG9zaXRpb24ueCwgcHJvY2Vzc1Bvc2l0aW9uLnksIHtjbGFzczogXCJwcm9jZXNzXCIsIGxhbmd1YWdlOiBcIlBEXCJ9KTtcbiAgICAgIGVsZW1lbnRVdGlsaXRpZXMuc2V0UG9ydHNPcmRlcmluZyhwcm9jZXNzTm9kZSwgXCJMLXRvLVJcIik7XG4gICAgICBwcm9jZXNzTm9kZS5kYXRhKCdqdXN0QWRkZWQnLCB0cnVlKTtcblxuICAgICAgdmFyIHlQb3NpdGlvbiA9IHByb2Nlc3NQb3NpdGlvbi55O1xuXG4gICAgICB2YXIgaW5wdXROb2RlID0gZWxlbWVudFV0aWxpdGllcy5hZGROb2RlKHhQb3NPZklucHV0LCB5UG9zaXRpb24sIHtjbGFzczogXCJtYWNyb21vbGVjdWxlXCIsIGxhbmd1YWdlOiBcIlBEXCJ9KTtcbiAgICAgIGlucHV0Tm9kZS5kYXRhKFwianVzdEFkZGVkXCIsIHRydWUpO1xuICAgICAgaW5wdXROb2RlLmRhdGEoXCJsYWJlbFwiLCBwcm90ZWluTmFtZSk7XG4gICAgICB2YXIgaW5mb2JveE9iamVjdCA9IHtcbiAgICAgICAgY2xheno6IFwidW5pdCBvZiBpbmZvcm1hdGlvblwiLFxuICAgICAgICBsYWJlbDoge1xuICAgICAgICAgIHRleHQ6IHJldmVyc2UgPyBcImFjdGl2ZVwiIDogXCJpbmFjdGl2ZVwiXG4gICAgICAgIH0sXG4gICAgICAgIHN0eWxlOiB7XG4gICAgICAgICAgXCJzaGFwZS1uYW1lXCI6IFwiZWxsaXBzZVwiXG4gICAgICAgIH0sXG4gICAgICAgIGJib3g6IHtcbiAgICAgICAgICB3OiAzNixcbiAgICAgICAgICBoOiAxNVxuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgZWxlbWVudFV0aWxpdGllcy5hZGRTdGF0ZU9ySW5mb0JveChpbnB1dE5vZGUsIGluZm9ib3hPYmplY3QpO1xuXG4gICAgICB2YXIgb3V0cHV0Tm9kZSA9IGVsZW1lbnRVdGlsaXRpZXMuYWRkTm9kZSh4UG9zT2ZPdXRwdXQsIHlQb3NpdGlvbiwge2NsYXNzOiBcIm1hY3JvbW9sZWN1bGVcIiwgbGFuZ3VhZ2U6IFwiUERcIn0pO1xuICAgICAgb3V0cHV0Tm9kZS5kYXRhKFwianVzdEFkZGVkXCIsIHRydWUpO1xuICAgICAgb3V0cHV0Tm9kZS5kYXRhKFwibGFiZWxcIiwgcHJvdGVpbk5hbWUpO1xuICAgICAgaW5mb2JveE9iamVjdCA9IHtcbiAgICAgICAgY2xheno6IFwidW5pdCBvZiBpbmZvcm1hdGlvblwiLFxuICAgICAgICBsYWJlbDoge1xuICAgICAgICAgIHRleHQ6IHJldmVyc2UgPyBcImluYWN0aXZlXCIgOiBcImFjdGl2ZVwiXG4gICAgICAgIH0sXG4gICAgICAgIHN0eWxlOiB7XG4gICAgICAgICAgXCJzaGFwZS1uYW1lXCI6IFwiZWxsaXBzZVwiXG4gICAgICAgIH0sXG4gICAgICAgIGJib3g6IHtcbiAgICAgICAgICB3OiAzNixcbiAgICAgICAgICBoOiAxNVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBlbGVtZW50VXRpbGl0aWVzLmFkZFN0YXRlT3JJbmZvQm94KG91dHB1dE5vZGUsIGluZm9ib3hPYmplY3QpO1xuXG4gICAgICB2YXIgaW5wdXRTaWRlRWRnZSA9IGVsZW1lbnRVdGlsaXRpZXMuYWRkRWRnZShpbnB1dE5vZGUuaWQoKSwgcHJvY2Vzc05vZGUuaWQoKSwge2NsYXNzOiBcImNvbnN1bXB0aW9uXCIsIGxhbmd1YWdlOiBcIlBEXCJ9KTtcbiAgICAgIGlucHV0U2lkZUVkZ2UuZGF0YShcImp1c3RBZGRlZFwiLCB0cnVlKTtcbiAgICAgIHZhciBvdXRwdXRTaWRlRWRnZSA9IGVsZW1lbnRVdGlsaXRpZXMuYWRkRWRnZShwcm9jZXNzTm9kZS5pZCgpLCBvdXRwdXROb2RlLmlkKCksIHtjbGFzczogXCJwcm9kdWN0aW9uXCIsIGxhbmd1YWdlOiBcIlBEXCJ9KTtcbiAgICAgIG91dHB1dFNpZGVFZGdlLmRhdGEoXCJqdXN0QWRkZWRcIiwgdHJ1ZSk7XG4gICAgICBjeS5lbmRCYXRjaCgpO1xuXG4gICAgICAvL2ZpbHRlciB0aGUganVzdCBhZGRlZCBlbGVtZW10cyB0byByZXR1cm4gdGhlbSBhbmQgcmVtb3ZlIGp1c3QgYWRkZWQgbWFya1xuICAgICAgdmFyIGVsZXMgPSBjeS5lbGVtZW50cygnW2p1c3RBZGRlZF0nKTtcbiAgICAgIGVsZXMucmVtb3ZlRGF0YSgnanVzdEFkZGVkJyk7XG5cbiAgICAgIGN5LmVsZW1lbnRzKCkudW5zZWxlY3QoKTtcbiAgICAgIGVsZXMuc2VsZWN0KCk7XG5cbiAgICAgIHJldHVybiBlbGVzOyAvLyBSZXR1cm4gdGhlIGp1c3QgYWRkZWQgZWxlbWVudHNcbiAgICB9XG5cbiAgICAvKlxuICAgICAqIENyZWF0ZXMgYSB0ZW1wbGF0ZSByZWFjdGlvbiB3aXRoIGdpdmVuIHBhcmFtZXRlcnMuIFJlcXVpcmVzIGNvc2UtYmlsa2VudCBsYXlvdXQgdG8gdGlsZSB0aGUgZnJlZSBtYWNyb21vbGVjdWxlcyBpbmNsdWRlZFxuICAgICAqIGluIHRoZSBjb21wbGV4LiBQYXJhbWV0ZXJzIGFyZSBleHBsYWluZWQgYmVsb3cuXG4gICAgICogdGVtcGxhdGVUeXBlOiBUaGUgdHlwZSBvZiB0aGUgdGVtcGxhdGUgcmVhY3Rpb24uIEl0IG1heSBiZSAnYXNzb2NpYXRpb24nLCAnZGlzc29jaWF0aW9uJywgJ3JldmVyc2libGUnIG9yICdpcnJldmVyc2libGUnLlxuICAgICAqIG5vZGVMaXN0OiBUaGUgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHR5cGVzIG9mIG1vbGVjdWxlcyB3aGljaCB3aWxsIGludm9sdmUgaW4gdGhlIHJlYWN0aW9uLlxuICAgICAqIGNvbXBsZXhOYW1lOiBUaGUgbmFtZSBvZiB0aGUgY29tcGxleCBpbiB0aGUgcmVhY3Rpb24uXG4gICAgICogcHJvY2Vzc1Bvc2l0aW9uOiBUaGUgbW9kYWwgcG9zaXRpb24gb2YgdGhlIHByb2Nlc3MgaW4gdGhlIHJlYWN0aW9uLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyB0aGUgY2VudGVyIG9mIHRoZSBjYW52YXMuXG4gICAgICogdGlsaW5nUGFkZGluZ1ZlcnRpY2FsOiBUaGlzIG9wdGlvbiB3aWxsIGJlIHBhc3NlZCB0byB0aGUgY29zZS1iaWxrZW50IGxheW91dCB3aXRoIHRoZSBzYW1lIG5hbWUuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDE1LlxuICAgICAqIHRpbGluZ1BhZGRpbmdIb3Jpem9udGFsOiBUaGlzIG9wdGlvbiB3aWxsIGJlIHBhc3NlZCB0byB0aGUgY29zZS1iaWxrZW50IGxheW91dCB3aXRoIHRoZSBzYW1lIG5hbWUuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDE1LlxuICAgICAqIGVkZ2VMZW5ndGg6IFRoZSBkaXN0YW5jZSBiZXR3ZWVuIHRoZSBwcm9jZXNzIGFuZCB0aGUgbWFjcm9tb2xlY3VsZXMgYXQgdGhlIGJvdGggc2lkZXMuXG4gICAgICovXG4gICAgZWxlbWVudFV0aWxpdGllcy5jcmVhdGVUZW1wbGF0ZVJlYWN0aW9uID0gZnVuY3Rpb24gKHRlbXBsYXRlVHlwZSwgbm9kZUxpc3QsIGNvbXBsZXhOYW1lLCBwcm9jZXNzUG9zaXRpb24sIHRpbGluZ1BhZGRpbmdWZXJ0aWNhbCwgdGlsaW5nUGFkZGluZ0hvcml6b250YWwsIGVkZ2VMZW5ndGgsIGxheW91dFBhcmFtKSB7XG5cbiAgICAgIHZhciBkZWZhdWx0TWFjcm9tb2xlY3VsUHJvcGVydGllcyA9IGVsZW1lbnRVdGlsaXRpZXMuZ2V0RGVmYXVsdFByb3BlcnRpZXMoIFwibWFjcm9tb2xlY3VsZVwiICk7XG4gICAgICB2YXIgZGVmYXVsdFNpbXBsZUNoZW1pY2FsUHJvcGVydGllcyA9IGVsZW1lbnRVdGlsaXRpZXMuZ2V0RGVmYXVsdFByb3BlcnRpZXMoIFwic2ltcGxlIGNoZW1pY2FsXCIgKTtcbiAgICAgIHZhciBkZWZhdWx0UHJvY2Vzc1Byb3BlcnRpZXMgPSBlbGVtZW50VXRpbGl0aWVzLmdldERlZmF1bHRQcm9wZXJ0aWVzKCB0ZW1wbGF0ZVR5cGUgKTtcbiAgICAgIHZhciBwcm9jZXNzV2lkdGggPSBkZWZhdWx0UHJvY2Vzc1Byb3BlcnRpZXMud2lkdGggfHwgNTA7XG4gICAgICB2YXIgbWFjcm9tb2xlY3VsZVdpZHRoID0gZGVmYXVsdE1hY3JvbW9sZWN1bFByb3BlcnRpZXMud2lkdGggfHwgNTA7XG4gICAgICB2YXIgbWFjcm9tb2xlY3VsZUhlaWdodCA9IGRlZmF1bHRNYWNyb21vbGVjdWxQcm9wZXJ0aWVzLmhlaWdodCB8fCA1MDtcbiAgICAgIHZhciBzaW1wbGVDaGVtaWNhbFdpZHRoID0gZGVmYXVsdFNpbXBsZUNoZW1pY2FsUHJvcGVydGllcy53aWR0aCB8fCAzNTtcbiAgICAgIHZhciBzaW1wbGVDaGVtaWNhbEhlaWdodCA9IGRlZmF1bHRTaW1wbGVDaGVtaWNhbFByb3BlcnRpZXMuaGVpZ2h0IHx8IDM1O1xuICAgICAgdmFyIHByb2Nlc3NQb3NpdGlvbiA9IHByb2Nlc3NQb3NpdGlvbiB8fCBlbGVtZW50VXRpbGl0aWVzLmNvbnZlcnRUb01vZGVsUG9zaXRpb24oe3g6IGN5LndpZHRoKCkgLyAyLCB5OiBjeS5oZWlnaHQoKSAvIDJ9KTtcbiAgICAgIHZhciBub2RlTGlzdCA9IG5vZGVMaXN0O1xuICAgICAgdmFyIGNvbXBsZXhOYW1lID0gY29tcGxleE5hbWU7XG4gICAgICB2YXIgbnVtT2ZNb2xlY3VsZXMgPSBub2RlTGlzdC5sZW5ndGg7XG4gICAgICB2YXIgdGlsaW5nUGFkZGluZ1ZlcnRpY2FsID0gdGlsaW5nUGFkZGluZ1ZlcnRpY2FsIHx8IDE1O1xuICAgICAgdmFyIHRpbGluZ1BhZGRpbmdIb3Jpem9udGFsID0gdGlsaW5nUGFkZGluZ0hvcml6b250YWwgfHwgMTU7XG4gICAgICB2YXIgZWRnZUxlbmd0aCA9IGVkZ2VMZW5ndGggfHwgNjA7XG5cbiAgICAgIGN5LnN0YXJ0QmF0Y2goKTtcblxuICAgICAgXG4gICAgICBpZiAoIWVsZW1lbnRVdGlsaXRpZXMuZ2V0TWFwVHlwZSgpKSB7XG4gICAgICAgIGVsZW1lbnRVdGlsaXRpZXMuc2V0TWFwVHlwZShcIlBEXCIpO1xuICAgICAgfVxuXG4gICAgICB2YXIgeFBvc2l0aW9uT2ZGcmVlTWFjcm9tb2xlY3VsZXM7XG4gICAgICB2YXIgeFBvc2l0aW9uT2ZJbnB1dE1hY3JvbW9sZWN1bGVzO1xuICAgICAgaWYgKHRlbXBsYXRlVHlwZSA9PT0gJ2Fzc29jaWF0aW9uJykge1xuICAgICAgICB4UG9zaXRpb25PZkZyZWVNYWNyb21vbGVjdWxlcyA9IHByb2Nlc3NQb3NpdGlvbi54IC0gZWRnZUxlbmd0aCAtIHByb2Nlc3NXaWR0aCAvIDIgLSBtYWNyb21vbGVjdWxlV2lkdGggLyAyO1xuICAgICAgIFxuICAgICAgfVxuICAgICAgZWxzZSBpZih0ZW1wbGF0ZVR5cGUgPT09ICdkaXNzb2NpYXRpb24nKXtcbiAgICAgICAgeFBvc2l0aW9uT2ZGcmVlTWFjcm9tb2xlY3VsZXMgPSBwcm9jZXNzUG9zaXRpb24ueCArIGVkZ2VMZW5ndGggKyBwcm9jZXNzV2lkdGggLyAyICsgbWFjcm9tb2xlY3VsZVdpZHRoIC8gMjtcbiAgICAgICBcbiAgICAgIH1cbiAgICAgIGVsc2V7XG4gICAgICAgIFxuICAgICAgICB4UG9zaXRpb25PZkZyZWVNYWNyb21vbGVjdWxlcyA9IHByb2Nlc3NQb3NpdGlvbi54IC0gZWRnZUxlbmd0aCAtIHByb2Nlc3NXaWR0aCAvIDIgLSBtYWNyb21vbGVjdWxlV2lkdGggLyAyO1xuICAgICAgICB4UG9zaXRpb25PZklucHV0TWFjcm9tb2xlY3VsZXMgPSBwcm9jZXNzUG9zaXRpb24ueCArIGVkZ2VMZW5ndGggKyBwcm9jZXNzV2lkdGggLyAyICsgbWFjcm9tb2xlY3VsZVdpZHRoIC8gMjtcbiAgICAgIH1cblxuICAgICAgLy9DcmVhdGUgdGhlIHByb2Nlc3MgaW4gdGVtcGxhdGUgdHlwZVxuICAgICAgdmFyIHByb2Nlc3M7XG4gICAgICBpZiAodGVtcGxhdGVUeXBlID09PSAncmV2ZXJzaWJsZScgfHwgdGVtcGxhdGVUeXBlID09PSAnaXJyZXZlcnNpYmxlJykge1xuICAgICAgICBwcm9jZXNzID0gZWxlbWVudFV0aWxpdGllcy5hZGROb2RlKHByb2Nlc3NQb3NpdGlvbi54LCBwcm9jZXNzUG9zaXRpb24ueSwge2NsYXNzIDogJ3Byb2Nlc3MnLCBsYW5ndWFnZSA6ICdQRCd9KTtcbiAgICAgICAgZWxlbWVudFV0aWxpdGllcy5zZXRQb3J0c09yZGVyaW5nKHByb2Nlc3MsICdMLXRvLVInKTtcbiAgICAgIH1cbiAgICAgIGVsc2V7XG4gICAgICAgIHByb2Nlc3MgPSBlbGVtZW50VXRpbGl0aWVzLmFkZE5vZGUocHJvY2Vzc1Bvc2l0aW9uLngsIHByb2Nlc3NQb3NpdGlvbi55LCB7Y2xhc3MgOiB0ZW1wbGF0ZVR5cGUsIGxhbmd1YWdlIDogJ1BEJ30pO1xuICAgICAgICBlbGVtZW50VXRpbGl0aWVzLnNldFBvcnRzT3JkZXJpbmcocHJvY2VzcywgJ0wtdG8tUicpO1xuICAgICAgfVxuICAgICAgcHJvY2Vzcy5kYXRhKCdqdXN0QWRkZWQnLCB0cnVlKTtcblxuICAgICAgLy9EZWZpbmUgdGhlIHN0YXJ0aW5nIHkgcG9zaXRpb25cbiAgICAgIHZhciB5UG9zaXRpb24gPSBwcm9jZXNzUG9zaXRpb24ueSAtICgobnVtT2ZNb2xlY3VsZXMgLSAxKSAvIDIpICogKG1hY3JvbW9sZWN1bGVIZWlnaHQgKyB0aWxpbmdQYWRkaW5nVmVydGljYWwpO1xuXG4gICAgICAvL0NyZWF0ZSB0aGUgZnJlZSBtb2xlY3VsZXNcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtT2ZNb2xlY3VsZXM7IGkrKykge1xuICAgICAgICAvLyBub2RlIGFkZGl0aW9uIG9wZXJhdGlvbiBpcyBkZXRlcm1pbmVkIGJ5IG1vbGVjdWxlIHR5cGVcbiAgICAgICAgaWYobm9kZUxpc3RbaV0udHlwZSA9PSBcIlNpbXBsZSBDaGVtaWNhbFwiKXtcbiAgICAgICAgICB2YXIgbmV3Tm9kZSA9IGVsZW1lbnRVdGlsaXRpZXMuYWRkTm9kZSh4UG9zaXRpb25PZkZyZWVNYWNyb21vbGVjdWxlcywgeVBvc2l0aW9uLCB7Y2xhc3MgOiAnc2ltcGxlIGNoZW1pY2FsJywgbGFuZ3VhZ2UgOiAnUEQnfSk7XG4gICAgICAgICAgLy91cGRhdGUgdGhlIHkgcG9zaXRpb25cbiAgICAgICAgICB5UG9zaXRpb24gKz0gc2ltcGxlQ2hlbWljYWxIZWlnaHQgKyB0aWxpbmdQYWRkaW5nVmVydGljYWw7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZXtcbiAgICAgICAgICB2YXIgbmV3Tm9kZSA9IGVsZW1lbnRVdGlsaXRpZXMuYWRkTm9kZSh4UG9zaXRpb25PZkZyZWVNYWNyb21vbGVjdWxlcywgeVBvc2l0aW9uLCB7Y2xhc3MgOiAnbWFjcm9tb2xlY3VsZScsIGxhbmd1YWdlIDogJ1BEJ30pO1xuICAgICAgICAgIC8vdXBkYXRlIHRoZSB5IHBvc2l0aW9uXG4gICAgICAgICAgeVBvc2l0aW9uICs9IG1hY3JvbW9sZWN1bGVIZWlnaHQgKyB0aWxpbmdQYWRkaW5nVmVydGljYWw7XG4gICAgICAgIH1cbiAgICAgICAgbmV3Tm9kZS5kYXRhKCdqdXN0QWRkZWQnLCB0cnVlKTtcbiAgICAgICAgbmV3Tm9kZS5kYXRhKCdsYWJlbCcsIG5vZGVMaXN0W2ldLm5hbWUpO1xuXG4gICAgICAgIC8vY3JlYXRlIHRoZSBlZGdlIGNvbm5lY3RlZCB0byB0aGUgbmV3IG1vbGVjdWxlXG4gICAgICAgIHZhciBuZXdFZGdlO1xuICAgICAgICBpZiAodGVtcGxhdGVUeXBlID09PSAnYXNzb2NpYXRpb24nKSB7XG4gICAgICAgICAgbmV3RWRnZSA9IGVsZW1lbnRVdGlsaXRpZXMuYWRkRWRnZShuZXdOb2RlLmlkKCksIHByb2Nlc3MuaWQoKSwge2NsYXNzIDogJ2NvbnN1bXB0aW9uJywgbGFuZ3VhZ2UgOiAnUEQnfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZih0ZW1wbGF0ZVR5cGUgPT09ICdkaXNzb2NpYXRpb24nKXtcbiAgICAgICAgICBuZXdFZGdlID0gZWxlbWVudFV0aWxpdGllcy5hZGRFZGdlKHByb2Nlc3MuaWQoKSwgbmV3Tm9kZS5pZCgpLCB7Y2xhc3MgOiAncHJvZHVjdGlvbicsIGxhbmd1YWdlIDogJ1BEJ30pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2V7XG4gICAgICAgICAgLy9Hcm91cCByaWdodCBvciB0b3AgZWxlbWVudHMgaW4gZ3JvdXAgaWQgMVxuICAgICAgICAgIGlmICh0ZW1wbGF0ZVR5cGUgPT09IFwiaXJyZXZlcnNpYmxlXCIpIHtcbiAgICAgICAgICAgIG5ld0VkZ2UgPSBlbGVtZW50VXRpbGl0aWVzLmFkZEVkZ2UobmV3Tm9kZS5pZCgpLCBwcm9jZXNzLmlkKCksIHtjbGFzczogXCJjb25zdW1wdGlvblwiLCBsYW5ndWFnZTogJ1BEJ30pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIG5ld0VkZ2UgPSBlbGVtZW50VXRpbGl0aWVzLmFkZEVkZ2UocHJvY2Vzcy5pZCgpLCBuZXdOb2RlLmlkKCksIHtjbGFzcyA6IFwicHJvZHVjdGlvblwiLCBsYW5ndWFnZSA6ICdQRCd9LCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgMSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgbmV3RWRnZS5kYXRhKCdqdXN0QWRkZWQnLCB0cnVlKTtcbiAgICAgIH1cblxuICAgICAgaWYodGVtcGxhdGVUeXBlID09PSAnYXNzb2NpYXRpb24nIHx8IHRlbXBsYXRlVHlwZSA9PSAnZGlzc29jaWF0aW9uJyl7XG4gICAgICAgIC8vQ3JlYXRlIHRoZSBjb21wbGV4IGluY2x1ZGluZyBtYWNyb21vbGVjdWxlcyBpbnNpZGUgb2YgaXRcbiAgICAgICAgLy9UZW1wcm9yYXJpbHkgYWRkIGl0IHRvIHRoZSBwcm9jZXNzIHBvc2l0aW9uIHdlIHdpbGwgbW92ZSBpdCBhY2NvcmRpbmcgdG8gdGhlIGxhc3Qgc2l6ZSBvZiBpdFxuICAgICAgICB2YXIgY29tcGxleCA9IGVsZW1lbnRVdGlsaXRpZXMuYWRkTm9kZShwcm9jZXNzUG9zaXRpb24ueCwgcHJvY2Vzc1Bvc2l0aW9uLnksIHtjbGFzcyA6ICdjb21wbGV4JywgbGFuZ3VhZ2UgOiAnUEQnfSk7XG4gICAgICAgIGNvbXBsZXguZGF0YSgnanVzdEFkZGVkJywgdHJ1ZSk7XG4gICAgICAgIGNvbXBsZXguZGF0YSgnanVzdEFkZGVkTGF5b3V0Tm9kZScsIHRydWUpO1xuXG4gICAgICAgIC8vSWYgYSBuYW1lIGlzIHNwZWNpZmllZCBmb3IgdGhlIGNvbXBsZXggc2V0IGl0cyBsYWJlbCBhY2NvcmRpbmdseVxuICAgICAgICBpZiAoY29tcGxleE5hbWUpIHtcbiAgICAgICAgICBjb21wbGV4LmRhdGEoJ2xhYmVsJywgY29tcGxleE5hbWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy9jcmVhdGUgdGhlIGVkZ2UgY29ubm5lY3RlZCB0byB0aGUgY29tcGxleFxuICAgICAgICB2YXIgZWRnZU9mQ29tcGxleDtcblxuICAgICAgICBpZiAodGVtcGxhdGVUeXBlID09PSAnYXNzb2NpYXRpb24nKSB7XG4gICAgICAgICAgZWRnZU9mQ29tcGxleCA9IGVsZW1lbnRVdGlsaXRpZXMuYWRkRWRnZShwcm9jZXNzLmlkKCksIGNvbXBsZXguaWQoKSwge2NsYXNzIDogJ3Byb2R1Y3Rpb24nLCBsYW5ndWFnZSA6ICdQRCd9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBlZGdlT2ZDb21wbGV4ID0gZWxlbWVudFV0aWxpdGllcy5hZGRFZGdlKGNvbXBsZXguaWQoKSwgcHJvY2Vzcy5pZCgpLCB7Y2xhc3MgOiAnY29uc3VtcHRpb24nLCBsYW5ndWFnZSA6ICdQRCd9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGVkZ2VPZkNvbXBsZXguZGF0YSgnanVzdEFkZGVkJywgdHJ1ZSk7XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1PZk1vbGVjdWxlczsgaSsrKSB7XG5cbiAgICAgICAgICAvLyBBZGQgYSBtb2xlY3VsZShkZXBlbmRlbnQgb24gaXQncyB0eXBlKSBub3QgaGF2aW5nIGEgcHJldmlvdXNseSBkZWZpbmVkIGlkIGFuZCBoYXZpbmcgdGhlIGNvbXBsZXggY3JlYXRlZCBpbiB0aGlzIHJlYWN0aW9uIGFzIHBhcmVudFxuICAgICAgICAgIGlmKG5vZGVMaXN0W2ldLnR5cGUgPT0gJ1NpbXBsZSBDaGVtaWNhbCcpe1xuICAgICAgICAgICAgdmFyIG5ld05vZGUgPSBlbGVtZW50VXRpbGl0aWVzLmFkZE5vZGUoY29tcGxleC5wb3NpdGlvbigneCcpLCBjb21wbGV4LnBvc2l0aW9uKCd5JyksIHtjbGFzcyA6ICdzaW1wbGUgY2hlbWljYWwnLCBsYW5ndWFnZSA6ICdQRCd9LCB1bmRlZmluZWQsIGNvbXBsZXguaWQoKSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGVsc2V7XG4gICAgICAgICAgICB2YXIgbmV3Tm9kZSA9IGVsZW1lbnRVdGlsaXRpZXMuYWRkTm9kZShjb21wbGV4LnBvc2l0aW9uKCd4JyksIGNvbXBsZXgucG9zaXRpb24oJ3knKSwge2NsYXNzIDogJ21hY3JvbW9sZWN1bGUnLCBsYW5ndWFnZSA6ICdQRCd9LCB1bmRlZmluZWQsIGNvbXBsZXguaWQoKSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbmV3Tm9kZS5kYXRhKCdqdXN0QWRkZWQnLCB0cnVlKTtcbiAgICAgICAgICBuZXdOb2RlLmRhdGEoJ2xhYmVsJywgbm9kZUxpc3RbaV0ubmFtZSk7XG4gICAgICAgICAgbmV3Tm9kZS5kYXRhKCdqdXN0QWRkZWRMYXlvdXROb2RlJywgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGVsc2V7XG5cbiAgICAgICAgLy9DcmVhdGUgdGhlIGlucHV0IG1hY3JvbW9sZWN1bGVzXG4gICAgICAgIHZhciBudW1PZklucHV0TWFjcm9tb2xlY3VsZXMgPSBjb21wbGV4TmFtZS5sZW5ndGg7XG4gICAgICAgIHlQb3NpdGlvbiA9IHByb2Nlc3NQb3NpdGlvbi55IC0gKChudW1PZklucHV0TWFjcm9tb2xlY3VsZXMgLSAxKSAvIDIpICogKG1hY3JvbW9sZWN1bGVIZWlnaHQgKyB0aWxpbmdQYWRkaW5nVmVydGljYWwpO1xuXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtT2ZJbnB1dE1hY3JvbW9sZWN1bGVzOyBpKyspIHtcblxuICAgICAgICAgIGlmKGNvbXBsZXhOYW1lW2ldLnR5cGUgPT0gJ1NpbXBsZSBDaGVtaWNhbCcpe1xuICAgICAgICAgICAgdmFyIG5ld05vZGUgPSBlbGVtZW50VXRpbGl0aWVzLmFkZE5vZGUoeFBvc2l0aW9uT2ZJbnB1dE1hY3JvbW9sZWN1bGVzLCB5UG9zaXRpb24sIHtjbGFzcyA6ICdzaW1wbGUgY2hlbWljYWwnLCBsYW5ndWFnZSA6ICdQRCd9KTtcbiAgICAgICAgICAgIHlQb3NpdGlvbiArPSBzaW1wbGVDaGVtaWNhbEhlaWdodCArIHRpbGluZ1BhZGRpbmdWZXJ0aWNhbDtcbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZXtcbiAgICAgICAgICAgIHZhciBuZXdOb2RlID0gZWxlbWVudFV0aWxpdGllcy5hZGROb2RlKHhQb3NpdGlvbk9mSW5wdXRNYWNyb21vbGVjdWxlcywgeVBvc2l0aW9uLCB7Y2xhc3MgOiAnbWFjcm9tb2xlY3VsZScsIGxhbmd1YWdlIDogJ1BEJ30pO1xuICAgICAgICAgICAgeVBvc2l0aW9uICs9IG1hY3JvbW9sZWN1bGVIZWlnaHQgKyB0aWxpbmdQYWRkaW5nVmVydGljYWw7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbmV3Tm9kZS5kYXRhKCdqdXN0QWRkZWQnLCB0cnVlKTtcbiAgICAgICAgICBuZXdOb2RlLmRhdGEoJ2xhYmVsJywgY29tcGxleE5hbWVbaV0ubmFtZSk7XG5cbiAgICAgICAgICAvL2NyZWF0ZSB0aGUgZWRnZSBjb25uZWN0ZWQgdG8gdGhlIG5ldyBtYWNyb21vbGVjdWxlXG4gICAgICAgICAgdmFyIG5ld0VkZ2U7XG5cbiAgICAgICAgICAvL0dyb3VwIHRoZSBsZWZ0IG9yIGJvdHRvbSBlbGVtZW50cyBpbiBncm91cCBpZCAwIGlmIHJldmVyc2libGVcbiAgICAgICAgICBpZiAodGVtcGxhdGVUeXBlID09PSBcImlycmV2ZXJzaWJsZVwiKSB7XG4gICAgICAgICAgICBuZXdFZGdlID0gZWxlbWVudFV0aWxpdGllcy5hZGRFZGdlKHByb2Nlc3MuaWQoKSwgbmV3Tm9kZS5pZCgpLCB7Y2xhc3M6IFwicHJvZHVjdGlvblwiLCBsYW5ndWFnZTogJ1BEJ30pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIG5ld0VkZ2UgPSBlbGVtZW50VXRpbGl0aWVzLmFkZEVkZ2UocHJvY2Vzcy5pZCgpLCBuZXdOb2RlLmlkKCksIHtjbGFzcyA6IFwicHJvZHVjdGlvblwiLCBsYW5ndWFnZSA6ICdQRCd9LCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgMCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIG5ld0VkZ2UuZGF0YSgnanVzdEFkZGVkJywgdHJ1ZSk7XG5cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjeS5lbmRCYXRjaCgpO1xuXG4gICAgICB2YXIgbGF5b3V0Tm9kZXMgPSBjeS5ub2RlcygnW2p1c3RBZGRlZExheW91dE5vZGVdJyk7XG4gICAgICBsYXlvdXROb2Rlcy5yZW1vdmVEYXRhKCdqdXN0QWRkZWRMYXlvdXROb2RlJyk7XG4gICAgICB2YXIgbGF5b3V0ID0gbGF5b3V0Tm9kZXMubGF5b3V0KHtcbiAgICAgICAgbmFtZTogbGF5b3V0UGFyYW0ubmFtZSxcbiAgICAgICAgcmFuZG9taXplOiBmYWxzZSxcbiAgICAgICAgZml0OiBmYWxzZSxcbiAgICAgICAgYW5pbWF0ZTogZmFsc2UsXG4gICAgICAgIHRpbGluZ1BhZGRpbmdWZXJ0aWNhbDogdGlsaW5nUGFkZGluZ1ZlcnRpY2FsLFxuICAgICAgICB0aWxpbmdQYWRkaW5nSG9yaXpvbnRhbDogdGlsaW5nUGFkZGluZ0hvcml6b250YWwsXG4gICAgICAgIHN0b3A6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAvL0lmIGl0IGlzIGEgcmV2ZXJzaWJsZSByZWFjdGlvbiBubyBuZWVkIHRvIHJlLXBvc2l0aW9uIGNvbXBsZXhlc1xuICAgICAgICAgIGlmKHRlbXBsYXRlVHlwZSA9PT0gJ3JldmVyc2libGUnKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIC8vcmUtcG9zaXRpb24gdGhlIG5vZGVzIGluc2lkZSB0aGUgY29tcGxleFxuICAgICAgICAgIHZhciBzdXBwb3NlZFhQb3NpdGlvbjtcbiAgICAgICAgICB2YXIgc3VwcG9zZWRZUG9zaXRpb24gPSBwcm9jZXNzUG9zaXRpb24ueTtcblxuICAgICAgICAgIGlmICh0ZW1wbGF0ZVR5cGUgPT09ICdhc3NvY2lhdGlvbicpIHtcbiAgICAgICAgICAgIHN1cHBvc2VkWFBvc2l0aW9uID0gcHJvY2Vzc1Bvc2l0aW9uLnggKyBlZGdlTGVuZ3RoICsgcHJvY2Vzc1dpZHRoIC8gMiArIGNvbXBsZXgub3V0ZXJXaWR0aCgpIC8gMjtcbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBzdXBwb3NlZFhQb3NpdGlvbiA9IHByb2Nlc3NQb3NpdGlvbi54IC0gZWRnZUxlbmd0aCAtIHByb2Nlc3NXaWR0aCAvIDIgLSBjb21wbGV4Lm91dGVyV2lkdGgoKSAvIDI7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIHBvc2l0aW9uRGlmZlggPSAoc3VwcG9zZWRYUG9zaXRpb24gLSBjb21wbGV4LnBvc2l0aW9uKCd4JykpIC8gMjtcbiAgICAgICAgICB2YXIgcG9zaXRpb25EaWZmWSA9IChzdXBwb3NlZFlQb3NpdGlvbiAtIGNvbXBsZXgucG9zaXRpb24oJ3knKSkgLyAyO1xuICAgICAgICAgIGVsZW1lbnRVdGlsaXRpZXMubW92ZU5vZGVzKHt4OiBwb3NpdGlvbkRpZmZYLCB5OiBwb3NpdGlvbkRpZmZZfSwgY29tcGxleCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICAvLyBEbyB0aGlzIGNoZWNrIGZvciBjeXRvc2NhcGUuanMgYmFja3dhcmQgY29tcGF0aWJpbGl0eVxuICAgICAgaWYgKGxheW91dCAmJiBsYXlvdXQucnVuICYmIHRlbXBsYXRlVHlwZSAhPT0gJ3JldmVyc2libGUnICYmIHRlbXBsYXRlVHlwZSAhPT0gJ2lycmV2ZXJzaWJsZScpIHtcbiAgICAgICAgbGF5b3V0LnJ1bigpO1xuICAgICAgfVxuXG4gICAgICAvL2ZpbHRlciB0aGUganVzdCBhZGRlZCBlbGVtZW10cyB0byByZXR1cm4gdGhlbSBhbmQgcmVtb3ZlIGp1c3QgYWRkZWQgbWFya1xuICAgICAgdmFyIGVsZXMgPSBjeS5lbGVtZW50cygnW2p1c3RBZGRlZF0nKTtcbiAgICAgIGVsZXMucmVtb3ZlRGF0YSgnanVzdEFkZGVkJyk7XG5cbiAgICAgIGN5LmVsZW1lbnRzKCkudW5zZWxlY3QoKTtcbiAgICAgIGVsZXMuc2VsZWN0KCk7XG5cbiAgICAgIHJldHVybiBlbGVzOyAvLyBSZXR1cm4gdGhlIGp1c3QgYWRkZWQgZWxlbWVudHNcbiAgICB9O1xuXG4gICAgLypcbiAgICAgKiBNb3ZlIHRoZSBub2RlcyB0byBhIG5ldyBwYXJlbnQgYW5kIGNoYW5nZSB0aGVpciBwb3NpdGlvbiBpZiBwb3NzRGlmZiBwYXJhbXMgYXJlIHNldC5cbiAgICAgKi9cbiAgICBlbGVtZW50VXRpbGl0aWVzLmNoYW5nZVBhcmVudCA9IGZ1bmN0aW9uKG5vZGVzLCBuZXdQYXJlbnQsIHBvc0RpZmZYLCBwb3NEaWZmWSkge1xuICAgICAgdmFyIG5ld1BhcmVudElkID0gbmV3UGFyZW50ID09IHVuZGVmaW5lZCB8fCB0eXBlb2YgbmV3UGFyZW50ID09PSAnc3RyaW5nJyA/IG5ld1BhcmVudCA6IG5ld1BhcmVudC5pZCgpO1xuICAgICAgdmFyIG1vdmVkRWxlcyA9IG5vZGVzLm1vdmUoe1wicGFyZW50XCI6IG5ld1BhcmVudElkfSk7XG4gICAgICBpZih0eXBlb2YgcG9zRGlmZlggIT0gJ3VuZGVmaW5lZCcgfHwgdHlwZW9mIHBvc0RpZmZZICE9ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIGVsZW1lbnRVdGlsaXRpZXMubW92ZU5vZGVzKHt4OiBwb3NEaWZmWCwgeTogcG9zRGlmZll9LCBub2Rlcyk7XG4gICAgICB9XG4gICAgICBlbGVtZW50VXRpbGl0aWVzLm1haW50YWluUG9pbnRlcihtb3ZlZEVsZXMpO1xuICAgICAgcmV0dXJuIG1vdmVkRWxlcztcbiAgICB9O1xuXG4gICAgZWxlbWVudFV0aWxpdGllcy51cGRhdGVJbmZvYm94U3R5bGUgPSBmdW5jdGlvbiggbm9kZSwgaW5kZXgsIG5ld1Byb3BzICkge1xuICAgICAgdmFyIGluZm9ib3hPYmogPSBub2RlLmRhdGEoJ3N0YXRlc2FuZGluZm9zJylbaW5kZXhdO1xuICAgICAgJC5leHRlbmQoIGluZm9ib3hPYmouc3R5bGUsIG5ld1Byb3BzICk7XG4gICAgICBjeS5zdHlsZSgpLnVwZGF0ZSgpO1xuICAgIH07XG5cbiAgICBlbGVtZW50VXRpbGl0aWVzLnVwZGF0ZUluZm9ib3hPYmogPSBmdW5jdGlvbiggbm9kZSwgaW5kZXgsIG5ld1Byb3BzICkge1xuICAgICAgdmFyIGluZm9ib3hPYmogPSBub2RlLmRhdGEoJ3N0YXRlc2FuZGluZm9zJylbaW5kZXhdO1xuICAgICAgJC5leHRlbmQoIGluZm9ib3hPYmosIG5ld1Byb3BzICk7XG4gICAgfTtcblxuICAgIC8vIFJlc2l6ZSBnaXZlbiBub2RlcyBpZiB1c2VBc3BlY3RSYXRpbyBpcyB0cnV0aHkgb25lIG9mIHdpZHRoIG9yIGhlaWdodCBzaG91bGQgbm90IGJlIHNldC5cbiAgICBlbGVtZW50VXRpbGl0aWVzLnJlc2l6ZU5vZGVzID0gZnVuY3Rpb24gKG5vZGVzLCB3aWR0aCwgaGVpZ2h0LCB1c2VBc3BlY3RSYXRpbywgcHJlc2VydmVSZWxhdGl2ZVBvcykge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2Rlcy5sZW5ndGg7IGkrKykge1xuXG4gICAgICAgIHZhciBub2RlID0gbm9kZXNbaV07XG4gICAgICAgIHZhciByYXRpbyA9IHVuZGVmaW5lZDtcbiAgICAgICAgdmFyIGVsZU11c3RCZVNxdWFyZSA9IGVsZW1lbnRVdGlsaXRpZXMubXVzdEJlU3F1YXJlKG5vZGUuZGF0YSgnY2xhc3MnKSk7XG5cbiAgICAgICAgaWYgKHByZXNlcnZlUmVsYXRpdmVQb3MgPT09IHRydWUpIHtcbiAgICAgICAgICB2YXIgb2xkV2lkdGggPSBub2RlLmRhdGEoXCJiYm94XCIpLnc7XG4gICAgICAgICAgdmFyIG9sZEhlaWdodCA9IG5vZGUuZGF0YShcImJib3hcIikuaDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE5vdGUgdGhhdCBib3RoIHdpZHRoIGFuZCBoZWlnaHQgc2hvdWxkIG5vdCBiZSBzZXQgaWYgdXNlQXNwZWN0UmF0aW8gaXMgdHJ1dGh5XG4gICAgICAgIGlmKCFub2RlLmlzUGFyZW50KCkpe1xuICAgICAgICAgIGlmICh3aWR0aCkge1xuICAgICAgICAgICAgaWYgKHVzZUFzcGVjdFJhdGlvIHx8IGVsZU11c3RCZVNxdWFyZSkge1xuICAgICAgICAgICAgICByYXRpbyA9IHdpZHRoIC8gbm9kZS53aWR0aCgpO1xuICAgICAgICAgICAgfVxuICBcbiAgICAgICAgICAgIG5vZGUuZGF0YShcImJib3hcIikudyA9IHdpZHRoO1xuICAgICAgICAgIH1cbiAgXG4gICAgICAgICAgaWYgKGhlaWdodCkge1xuICAgICAgICAgICAgaWYgKHVzZUFzcGVjdFJhdGlvIHx8IGVsZU11c3RCZVNxdWFyZSkge1xuICAgICAgICAgICAgICByYXRpbyA9IGhlaWdodCAvIG5vZGUuaGVpZ2h0KCk7XG4gICAgICAgICAgICB9XG4gIFxuICAgICAgICAgICAgbm9kZS5kYXRhKFwiYmJveFwiKS5oID0gaGVpZ2h0O1xuICAgICAgICAgIH1cbiAgXG4gICAgICAgICAgaWYgKHJhdGlvICYmICFoZWlnaHQpIHtcbiAgICAgICAgICAgIG5vZGUuZGF0YShcImJib3hcIikuaCA9IG5vZGUuaGVpZ2h0KCkgKiByYXRpbztcbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSBpZiAocmF0aW8gJiYgIXdpZHRoKSB7XG4gICAgICAgICAgICBub2RlLmRhdGEoXCJiYm94XCIpLncgPSBub2RlLndpZHRoKCkgKiByYXRpbztcbiAgICAgICAgICB9XG4gICAgICAgIH1lbHNle1xuICAgICAgICAgIG5vZGUuZGF0YShcIm1pbkhlaWdodFwiICwgXCJcIisgaGVpZ2h0KTtcbiAgICAgICAgICBub2RlLmRhdGEoXCJtaW5XaWR0aFwiICwgXCJcIisgd2lkdGgpO1xuICAgICAgICAgIG5vZGUuZGF0YShcIm1pbldpZHRoQmlhc0xlZnRcIiwgXCI1MCVcIik7XG4gICAgICAgICAgbm9kZS5kYXRhKFwibWluV2lkdGhCaWFzUmlnaHRcIiwgXCI1MCVcIik7XG4gICAgICAgICAgbm9kZS5kYXRhKFwibWluSGVpZ2h0Qmlhc1RvcFwiLCBcIjUwJVwiICk7XG4gICAgICAgICAgbm9kZS5kYXRhKFwibWluSGVpZ2h0Qmlhc0JvdHRvbVwiLCBcIjUwJVwiKTtcbiAgICAgICAgfVxuICAgICAgICBcblxuICAgICAvKiAgICBpZiAocHJlc2VydmVSZWxhdGl2ZVBvcyA9PT0gdHJ1ZSkge1xuICAgICAgICAgIHZhciBzdGF0ZXNhbmRpbmZvcyA9IG5vZGUuZGF0YSgnc3RhdGVzYW5kaW5mb3MnKTtcbiAgICAgICAgICB2YXIgdG9wQm90dG9tID0gc3RhdGVzYW5kaW5mb3MuZmlsdGVyKGJveCA9PiAoYm94LmFuY2hvclNpZGUgPT09IFwidG9wXCIgfHwgYm94LmFuY2hvclNpZGUgPT09IFwiYm90dG9tXCIpKTtcbiAgICAgICAgICB2YXIgcmlnaHRMZWZ0ID0gc3RhdGVzYW5kaW5mb3MuZmlsdGVyKGJveCA9PiAoYm94LmFuY2hvclNpZGUgPT09IFwicmlnaHRcIiB8fCBib3guYW5jaG9yU2lkZSA9PT0gXCJsZWZ0XCIpKTtcblxuICAgICAgICAgIHRvcEJvdHRvbS5mb3JFYWNoKGZ1bmN0aW9uKGJveCl7XG4gICAgICAgICAgICBpZiAoYm94LmJib3gueCA8IDApIHtcbiAgICAgICAgICAgICAgYm94LmJib3gueCA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChib3guYmJveC54ID4gb2xkV2lkdGgpIHtcbiAgICAgICAgICAgICAgYm94LmJib3gueCA9IG9sZFdpZHRoO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYm94LmJib3gueCA9IG5vZGUuZGF0YShcImJib3hcIikudyAqIGJveC5iYm94LnggLyBvbGRXaWR0aDtcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIHJpZ2h0TGVmdC5mb3JFYWNoKGZ1bmN0aW9uKGJveCl7XG4gICAgICAgICAgICBpZiAoYm94LmJib3gueSA8IDApIHtcbiAgICAgICAgICAgICAgYm94LmJib3gueSA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChib3guYmJveC55ID4gb2xkSGVpZ2h0KSB7XG4gICAgICAgICAgICAgIGJveC5iYm94LnkgPSBvbGRIZWlnaHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBib3guYmJveC55ID0gbm9kZS5kYXRhKFwiYmJveFwiKS5oICogYm94LmJib3gueSAvIG9sZEhlaWdodDtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSAqL1xuICAgICAgfVxuICAgIH07XG5cbiAgICBlbGVtZW50VXRpbGl0aWVzLmNhbGN1bGF0ZU1pbldpZHRoID0gZnVuY3Rpb24obm9kZSkge1xuXG4gICAgICAgIHZhciBkZWZhdWx0V2lkdGggPSB0aGlzLmdldERlZmF1bHRQcm9wZXJ0aWVzKG5vZGUuZGF0YSgnY2xhc3MnKSkud2lkdGg7XG5cbiAgICAgICAgLy8gTGFiZWwgd2lkdGggY2FsY3VsYXRpb25cbiAgICAgICAgdmFyIHN0eWxlID0gbm9kZS5zdHlsZSgpO1xuXG4gICAgICAgIHZhciBmb250RmFtaWxpeSA9IHN0eWxlWydmb250LWZhbWlseSddO1xuICAgICAgICB2YXIgZm9udFNpemUgPSBzdHlsZVsnZm9udC1zaXplJ107XG4gICAgICAgIHZhciBsYWJlbFRleHQgPSBzdHlsZVsnbGFiZWwnXTtcblxuICAgICAgICBpZiAobGFiZWxUZXh0ID09PSBcIlwiICYmIG5vZGUuZGF0YSgnbGFiZWwnKSAmJiBub2RlLmRhdGEoJ2xhYmVsJykgIT09IFwiXCIpIHtcbiAgICAgICAgICBsYWJlbFRleHQgPSBub2RlLmRhdGEoJ2xhYmVsJyk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgbGFiZWxXaWR0aCA9IGVsZW1lbnRVdGlsaXRpZXMuZ2V0V2lkdGhCeUNvbnRlbnQoIGxhYmVsVGV4dCwgZm9udEZhbWlsaXksIGZvbnRTaXplICk7XG5cbiAgICAgICAgdmFyIHN0YXRlc2FuZGluZm9zID0gbm9kZS5kYXRhKCdzdGF0ZXNhbmRpbmZvcycpO1xuICAgICAgICAvL1RvcCBhbmQgYm90dG9tIGluZm9Cb3hlc1xuICAgICAgICAvL3ZhciB0b3BJbmZvQm94ZXMgPSBzdGF0ZXNhbmRpbmZvcy5maWx0ZXIoYm94ID0+IChib3guYW5jaG9yU2lkZSA9PT0gXCJ0b3BcIiB8fCAoKGJveC5hbmNob3JTaWRlID09PSBcInJpZ2h0XCIgfHwgYm94LmFuY2hvclNpZGUgPT09IFwibGVmdFwiKSAmJiAoYm94LmJib3gueSA8PSAxMikpKSk7XG4gICAgICAgIC8vdmFyIGJvdHRvbUluZm9Cb3hlcyA9IHN0YXRlc2FuZGluZm9zLmZpbHRlcihib3ggPT4gKGJveC5hbmNob3JTaWRlID09PSBcImJvdHRvbVwiIHx8ICgoYm94LmFuY2hvclNpZGUgPT09IFwicmlnaHRcIiB8fCBib3guYW5jaG9yU2lkZSA9PT0gXCJsZWZ0XCIpICYmIChib3guYmJveC55ID49IG5vZGUuZGF0YSgnYmJveCcpLmggLSAxMikpKSk7XG4gICAgICAgIHZhciB1bml0R2FwID0gNTtcbiAgICAgICAgdmFyIHRvcElkZWFsV2lkdGggPSB1bml0R2FwO1xuICAgICAgICB2YXIgYm90dG9tSWRlYWxXaWR0aCA9IHVuaXRHYXA7ICAgICAgICBcbiAgICAgICAgdmFyIHJpZ2h0TWF4V2lkdGggPSAwO1xuICAgICAgICB2YXIgbGVmdE1heFdpZHRoID0wO1xuICAgICAgICBzdGF0ZXNhbmRpbmZvcy5mb3JFYWNoKGZ1bmN0aW9uKGJveCl7XG4gICAgICAgICAgaWYoYm94LmFuY2hvclNpZGUgPT09IFwidG9wXCIpe1xuICAgICAgICAgICAgdG9wSWRlYWxXaWR0aCArPSBib3guYmJveC53ICsgdW5pdEdhcDtcblxuICAgICAgICAgIH1lbHNlIGlmKGJveC5hbmNob3JTaWRlID09PSBcImJvdHRvbVwiKXtcbiAgICAgICAgICAgIGJvdHRvbUlkZWFsV2lkdGggKz0gYm94LmJib3gudyArIHVuaXRHYXA7XG5cbiAgICAgICAgICB9ZWxzZSBpZihib3guYW5jaG9yU2lkZSA9PT0gXCJyaWdodFwiKVxuICAgICAgICAgIHsgICAgICAgICAgIFxuICAgICAgICAgICAgcmlnaHRNYXhXaWR0aCA9IChib3guYmJveC53ID4gcmlnaHRNYXhXaWR0aCkgPyBib3guYmJveC53IDogcmlnaHRNYXhXaWR0aDtcbiAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgbGVmdE1heFdpZHRoID0gKGJveC5iYm94LncgPiBsZWZ0TWF4V2lkdGgpID8gYm94LmJib3gudyA6IGxlZnRNYXhXaWR0aDtcbiAgICAgICAgICB9XG4gICAgICAgIH0pOyAgICAgIFxuXG4gICAgICAgIHZhciBtaWRkbGVXaWR0aCA9IGxhYmVsV2lkdGggKyAyICogTWF0aC5tYXgocmlnaHRNYXhXaWR0aC8yLCBsZWZ0TWF4V2lkdGgvMik7XG5cbiAgICAgICAgdmFyIGNvbXBvdW5kV2lkdGggPSAwO1xuICAgICAgICBpZihub2RlLmlzUGFyZW50KCkpe1xuICAgICAgICAgIGNvbXBvdW5kV2lkdGggPSBub2RlLmNoaWxkcmVuKCkuYm91bmRpbmdCb3goKS53O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBNYXRoLm1heChtaWRkbGVXaWR0aCwgZGVmYXVsdFdpZHRoLzIsIHRvcElkZWFsV2lkdGgsIGJvdHRvbUlkZWFsV2lkdGgsIGNvbXBvdW5kV2lkdGgpO1xuICAgIH1cblxuICAgIGVsZW1lbnRVdGlsaXRpZXMuY2FsY3VsYXRlTWluSGVpZ2h0ID0gZnVuY3Rpb24obm9kZSkge1xuICAgICAgICB2YXIgc3RhdGVzYW5kaW5mb3MgPSBub2RlLmRhdGEoJ3N0YXRlc2FuZGluZm9zJyk7XG4gICAgICAgIHZhciBtYXJnaW4gPSA3O1xuICAgICAgICB2YXIgdW5pdEdhcCA9IDU7XG4gICAgICAgIHZhciBkZWZhdWx0SGVpZ2h0ID0gdGhpcy5nZXREZWZhdWx0UHJvcGVydGllcyhub2RlLmRhdGEoJ2NsYXNzJykpLmhlaWdodDtcbiAgICAgICAgdmFyIGxlZnRJbmZvQm94ZXMgPSBzdGF0ZXNhbmRpbmZvcy5maWx0ZXIoYm94ID0+IGJveC5hbmNob3JTaWRlID09PSBcImxlZnRcIik7ICAgICAgICBcbiAgICAgICAgdmFyIGxlZnRIZWlnaHQgPSB1bml0R2FwOyBcbiAgICAgICAgbGVmdEluZm9Cb3hlcy5mb3JFYWNoKGZ1bmN0aW9uKGJveCl7XG4gICAgICAgICAgICBsZWZ0SGVpZ2h0ICs9IGJveC5iYm94LmggKyB1bml0R2FwO1xuICAgICAgICAgICBcbiAgICAgICAgfSk7ICAgICAgXG4gICAgICAgIHZhciByaWdodEluZm9Cb3hlcyA9IHN0YXRlc2FuZGluZm9zLmZpbHRlcihib3ggPT4gYm94LmFuY2hvclNpZGUgPT09IFwicmlnaHRcIik7XG4gICAgICAgIHZhciByaWdodEhlaWdodCA9IHVuaXRHYXA7ICAgICAgICBcbiAgICAgICAgcmlnaHRJbmZvQm94ZXMuZm9yRWFjaChmdW5jdGlvbihib3gpe1xuICAgICAgICAgICAgcmlnaHRIZWlnaHQgKz0gYm94LmJib3guaCArIHVuaXRHYXA7ICAgICAgICAgICBcbiAgICAgICAgfSk7ICAgICAgIFxuICAgICAgICB2YXIgc3R5bGUgPSBub2RlLnN0eWxlKCk7XG4gICAgICAgIHZhciBsYWJlbFRleHQgPSAoKHN0eWxlWydsYWJlbCddKS5zcGxpdChcIlxcblwiKSkuZmlsdGVyKCB0ZXh0ID0+IHRleHQgIT09ICcnKTtcbiAgICAgICAgdmFyIGZvbnRTaXplID0gcGFyc2VGbG9hdChzdHlsZVsnZm9udC1zaXplJ10uc3Vic3RyaW5nKDAsIHN0eWxlWydmb250LXNpemUnXS5sZW5ndGggLSAyKSk7XG4gICAgICAgIHZhciB0b3RhbEhlaWdodCA9IGxhYmVsVGV4dC5sZW5ndGggKiBmb250U2l6ZSArIDIgKiBtYXJnaW47XG5cbiAgICAgICAgXG5cbiAgICAgICAgdmFyIGNvbXBvdW5kSGVpZ2h0ID0gMDtcbiAgICAgICAgaWYobm9kZS5pc1BhcmVudCgpKXtcbiAgICAgICAgICBjb21wb3VuZEhlaWdodCA9IG5vZGUuY2hpbGRyZW4oKS5ib3VuZGluZ0JveCgpLmg7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIE1hdGgubWF4KHRvdGFsSGVpZ2h0LCBkZWZhdWx0SGVpZ2h0LzIsIGxlZnRIZWlnaHQsIHJpZ2h0SGVpZ2h0LCBjb21wb3VuZEhlaWdodCk7XG4gICAgfVxuXG4gICAgZWxlbWVudFV0aWxpdGllcy5pc1Jlc2l6ZWRUb0NvbnRlbnQgPSBmdW5jdGlvbiAobm9kZSkge1xuICAgICAgaWYoIW5vZGUgfHwgIW5vZGUuaXNOb2RlKCkgfHwgIW5vZGUuZGF0YSgnYmJveCcpKXtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICAvL3ZhciB3ID0gbm9kZS5kYXRhKCdiYm94JykudztcbiAgICAgIC8vdmFyIGggPSBub2RlLmRhdGEoJ2Jib3gnKS5oO1xuICAgICAgdmFyIHcgPSBub2RlLndpZHRoKCk7XG4gICAgICB2YXIgaCA9IG5vZGUuaGVpZ2h0KCk7XG5cbiAgICAgIHZhciBtaW5XID0gZWxlbWVudFV0aWxpdGllcy5jYWxjdWxhdGVNaW5XaWR0aChub2RlKTtcbiAgICAgIHZhciBtaW5IID0gZWxlbWVudFV0aWxpdGllcy5jYWxjdWxhdGVNaW5IZWlnaHQobm9kZSk7XG5cbiAgICAgIGlmKHcgPT09IG1pblcgJiYgaCA9PT0gbWluSClcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICBlbHNlXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBTZWN0aW9uIEVuZFxuICAgIC8vIEFkZCByZW1vdmUgdXRpbGl0aWVzXG5cbiAgICAvLyBSZWxvY2F0ZXMgc3RhdGUgYW5kIGluZm8gYm94ZXMuIFRoaXMgZnVuY3Rpb24gaXMgZXhwZWN0ZWQgdG8gYmUgY2FsbGVkIGFmdGVyIGFkZC9yZW1vdmUgc3RhdGUgYW5kIGluZm8gYm94ZXNcbiAgICBlbGVtZW50VXRpbGl0aWVzLnJlbG9jYXRlU3RhdGVBbmRJbmZvcyA9IGZ1bmN0aW9uIChlbGUpIHtcbiAgICAgIHZhciBzdGF0ZUFuZEluZm9zID0gKGVsZS5pc05vZGUgJiYgZWxlLmlzTm9kZSgpKSA/IGVsZS5kYXRhKCdzdGF0ZXNhbmRpbmZvcycpIDogZWxlO1xuICAgICAgdmFyIGxlbmd0aCA9IHN0YXRlQW5kSW5mb3MubGVuZ3RoO1xuICAgICAgaWYgKGxlbmd0aCA9PSAwKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKGxlbmd0aCA9PSAxKSB7XG4gICAgICAgIHN0YXRlQW5kSW5mb3NbMF0uYmJveC54ID0gMDtcbiAgICAgICAgc3RhdGVBbmRJbmZvc1swXS5iYm94LnkgPSAtNTA7XG4gICAgICB9XG4gICAgICBlbHNlIGlmIChsZW5ndGggPT0gMikge1xuICAgICAgICBzdGF0ZUFuZEluZm9zWzBdLmJib3gueCA9IDA7XG4gICAgICAgIHN0YXRlQW5kSW5mb3NbMF0uYmJveC55ID0gLTUwO1xuXG4gICAgICAgIHN0YXRlQW5kSW5mb3NbMV0uYmJveC54ID0gMDtcbiAgICAgICAgc3RhdGVBbmRJbmZvc1sxXS5iYm94LnkgPSA1MDtcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKGxlbmd0aCA9PSAzKSB7XG4gICAgICAgIHN0YXRlQW5kSW5mb3NbMF0uYmJveC54ID0gLTI1O1xuICAgICAgICBzdGF0ZUFuZEluZm9zWzBdLmJib3gueSA9IC01MDtcblxuICAgICAgICBzdGF0ZUFuZEluZm9zWzFdLmJib3gueCA9IDI1O1xuICAgICAgICBzdGF0ZUFuZEluZm9zWzFdLmJib3gueSA9IC01MDtcblxuICAgICAgICBzdGF0ZUFuZEluZm9zWzJdLmJib3gueCA9IDA7XG4gICAgICAgIHN0YXRlQW5kSW5mb3NbMl0uYmJveC55ID0gNTA7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgc3RhdGVBbmRJbmZvc1swXS5iYm94LnggPSAtMjU7XG4gICAgICAgIHN0YXRlQW5kSW5mb3NbMF0uYmJveC55ID0gLTUwO1xuXG4gICAgICAgIHN0YXRlQW5kSW5mb3NbMV0uYmJveC54ID0gMjU7XG4gICAgICAgIHN0YXRlQW5kSW5mb3NbMV0uYmJveC55ID0gLTUwO1xuXG4gICAgICAgIHN0YXRlQW5kSW5mb3NbMl0uYmJveC54ID0gLTI1O1xuICAgICAgICBzdGF0ZUFuZEluZm9zWzJdLmJib3gueSA9IDUwO1xuXG4gICAgICAgIHN0YXRlQW5kSW5mb3NbM10uYmJveC54ID0gMjU7XG4gICAgICAgIHN0YXRlQW5kSW5mb3NbM10uYmJveC55ID0gNTA7XG4gICAgICB9XG4gICAgfTtcblxuICAgIC8vIENoYW5nZSBzdGF0ZSB2YWx1ZSBvciB1bml0IG9mIGluZm9ybWF0aW9uIGJveCBvZiBnaXZlbiBub2RlcyB3aXRoIGdpdmVuIGluZGV4LlxuICAgIC8vIFR5cGUgcGFyYW1ldGVyIGluZGljYXRlcyB3aGV0aGVyIHRvIGNoYW5nZSB2YWx1ZSBvciB2YXJpYWJsZSwgaXQgaXMgdmFsaWQgaWYgdGhlIGJveCBhdCB0aGUgZ2l2ZW4gaW5kZXggaXMgYSBzdGF0ZSB2YXJpYWJsZS5cbiAgICAvLyBWYWx1ZSBwYXJhbWV0ZXIgaXMgdGhlIG5ldyB2YWx1ZSB0byBzZXQuXG4gICAgLy8gVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgb2xkIHZhbHVlIG9mIHRoZSBjaGFuZ2VkIGRhdGEgKFdlIGFzc3VtZSB0aGF0IHRoZSBvbGQgdmFsdWUgb2YgdGhlIGNoYW5nZWQgZGF0YSB3YXMgdGhlIHNhbWUgZm9yIGFsbCBub2RlcykuXG4gICAgLy8gRWFjaCBjaGFyYWN0ZXIgYXNzdW1lZCB0byBvY2N1cHkgOCB1bml0XG4gICAgLy8gRWFjaCBpbmZvYm94IGNhbiBoYXZlIGF0IG1vc3QgMzIgdW5pdHMgb2Ygd2lkdGhcbiAgICBlbGVtZW50VXRpbGl0aWVzLmNoYW5nZVN0YXRlT3JJbmZvQm94ID0gZnVuY3Rpb24gKG5vZGVzLCBpbmRleCwgdmFsdWUsIHR5cGUpIHtcbiAgICAgIHZhciByZXN1bHQ7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBub2RlID0gbm9kZXNbaV07XG4gICAgICAgIHZhciBzYmduY2xhc3MgPSBub2RlLmRhdGEoJ2NsYXNzJyk7XG4gICAgICAgIHZhciBzdGF0ZUFuZEluZm9zID0gbm9kZS5kYXRhKCdzdGF0ZXNhbmRpbmZvcycpO1xuICAgICAgICB2YXIgYm94ID0gc3RhdGVBbmRJbmZvc1tpbmRleF07XG4gICAgICAgIHZhciBvbGRMZW5ndGggPSBib3guYmJveC53O1xuICAgICAgICB2YXIgbmV3TGVuZ3RoID0gMDtcblxuICAgICAgICB2YXIgY29udGVudCA9ICcnO1xuICAgICAgICBpZiAoYm94LmNsYXp6ID09IFwic3RhdGUgdmFyaWFibGVcIikge1xuICAgICAgICAgIGlmICghcmVzdWx0KSB7XG4gICAgICAgICAgICByZXN1bHQgPSBib3guc3RhdGVbdHlwZV07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYm94LnN0YXRlW3R5cGVdID0gdmFsdWU7XG4gICAgICAgICAgaWYgKGJveC5zdGF0ZVtcInZhbHVlXCJdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGNvbnRlbnQgKz0gYm94LnN0YXRlW1widmFsdWVcIl07XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChib3guc3RhdGVbXCJ2YXJpYWJsZVwiXSAhPT0gdW5kZWZpbmVkICYmIGJveC5zdGF0ZVtcInZhcmlhYmxlXCJdLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNvbnRlbnQgKz0gYm94LnN0YXRlW1widmFyaWFibGVcIl0gKyBcIkBcIjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChib3guY2xhenogPT0gXCJ1bml0IG9mIGluZm9ybWF0aW9uXCIpIHtcbiAgICAgICAgICBpZiAoIXJlc3VsdCkge1xuICAgICAgICAgICAgcmVzdWx0ID0gYm94LmxhYmVsLnRleHQ7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnRlbnQgKz0gdmFsdWU7XG4gICAgICAgICAgYm94LmxhYmVsLnRleHQgPSB2YWx1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBtaW4gPSAoIHNiZ25jbGFzcyA9PT0gJ1NJRiBtYWNyb21vbGVjdWxlJyB8fCBzYmduY2xhc3MgPT09ICdTSUYgc2ltcGxlIGNoZW1pY2FsJyApID8gMTUgOiAxMjtcbiAgICAgICAgdmFyIGZvbnRGYW1pbHkgPSBib3guc3R5bGVbICdmb250LWZhbWlseScgXTtcbiAgICAgICAgdmFyIGZvbnRTaXplID0gYm94LnN0eWxlWyAnZm9udC1zaXplJyBdO1xuICAgICAgICB2YXIgYm9yZGVyV2lkdGggPSBib3guc3R5bGVbICdib3JkZXItd2lkdGgnIF07XG4gICAgICAgIHZhciBvcHRzID0ge1xuICAgICAgICAgIG1pbixcbiAgICAgICAgICBtYXg6IDQ4LFxuICAgICAgICAgIG1hcmdpbjogYm9yZGVyV2lkdGggLyAyICsgMC41XG4gICAgICAgIH07XG4gICAgICAgIHZhciBwcmV2aW91c1dpZHRoID0gYm94LmJib3gudztcbiAgICAgICAgYm94LmJib3gudyA9IGVsZW1lbnRVdGlsaXRpZXMuZ2V0V2lkdGhCeUNvbnRlbnQoIGNvbnRlbnQsIGZvbnRGYW1pbHksIGZvbnRTaXplLCBvcHRzICk7XG5cbiAgICAgICAgaWYoYm94LmFuY2hvclNpZGUgPT0gXCJ0b3BcIiB8fCBib3guYW5jaG9yU2lkZSA9PSBcImJvdHRvbVwiKXtcbiAgICAgICAgICB2YXIgdW5pdExheW91dCA9IG5vZGUuZGF0YSgpW1wiYXV4dW5pdGxheW91dHNcIl1bYm94LmFuY2hvclNpZGVdO1xuICAgICAgICAgIGlmKHVuaXRMYXlvdXQudW5pdHNbdW5pdExheW91dC51bml0cy5sZW5ndGgtMV0uaWQgPT0gYm94LmlkKXtcbiAgICAgICAgICAgICBcbiAgICAgICAgICAgIHZhciBib3JkZXJXaWR0aCA9IG5vZGUuZGF0YSgpWydib3JkZXItd2lkdGgnXTtcbiAgICAgICAgICAgIHZhciBzaGlmdEFtb3VudCA9ICgoKGJveC5iYm94LncgLSBwcmV2aW91c1dpZHRoKSAvIDIpICogMTAwICkvIChub2RlLm91dGVyV2lkdGgoKSAtIGJvcmRlcldpZHRoKTtcbiAgICAgICAgICAgXG4gICAgICAgICAgICBpZihzaGlmdEFtb3VudCA+PSAwKXtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgICBpZihib3guYmJveC54ICsgc2hpZnRBbW91bnQgPD0gMTAwKXtcbiAgICAgICAgICAgICAgICBib3guYmJveC54ID0gYm94LmJib3gueCArIHNoaWZ0QW1vdW50O1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgIC8qICBlbHNle1xuICAgICAgICAgICAgICB2YXIgcHJldmlvdXNJbmZvQmJveCA9IHt4IDogMCwgdzowfTtcbiAgICAgICAgICAgICAgaWYodW5pdExheW91dC51bml0cy5sZW5ndGggPiAxKXtcbiAgICAgICAgICAgICAgICBwcmV2aW91c0luZm9CYm94PSB1bml0TGF5b3V0LnVuaXRzW3VuaXRMYXlvdXQudW5pdHMubGVuZ3RoLTJdLmJib3g7ICAgICAgXG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgIHNiZ252aXpJbnN0YW5jZS5jbGFzc2VzLkF1eFVuaXRMYXlvdXQuc2V0SWRlYWxHYXAobm9kZSwgYm94LmFuY2hvclNpZGUpO1xuICAgICAgICAgICAgICB2YXIgaWRlYWxHYXAgPSBzYmdudml6SW5zdGFuY2UuY2xhc3Nlcy5BdXhVbml0TGF5b3V0LmdldEN1cnJlbnRHYXAoYm94LmFuY2hvclNpZGUpO1xuICAgICAgICAgICAgICB2YXIgbmV3UG9zaXRpb24gPSBwcmV2aW91c0luZm9CYm94LnggKyAocHJldmlvdXNJbmZvQmJveC53LzIgKyBpZGVhbEdhcCArIGJveC5iYm94LncvMikqMTAwIC8gKG5vZGUub3V0ZXJXaWR0aCgpIC0gYm9yZGVyV2lkdGgpO1xuICAgICAgICAgICAgICBib3guYmJveC54ID0gbmV3UG9zaXRpb247XG4gICAgICAgICAgICAgIFxuICAgICAgICAgICAgfSAqL1xuICAgICAgICAgICBcbiAgICAgICAgICAgXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICBcbiAgICAgICAgLyogaWYgKGJveC5hbmNob3JTaWRlID09PSBcInRvcFwiIHx8IGJveC5hbmNob3JTaWRlID09PSBcImJvdHRvbVwiKSB7XG4gICAgICAgICAgYm94LmJib3gueCArPSAoYm94LmJib3gudyAtIG9sZExlbmd0aCkgLyAyO1xuICAgICAgICAgIHZhciB1bml0cyA9IChub2RlLmRhdGEoJ2F1eHVuaXRsYXlvdXRzJylbYm94LmFuY2hvclNpZGVdKS51bml0cztcbiAgICAgICAgICB2YXIgc2hpZnRJbmRleCA9IDA7XG4gICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB1bml0cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYodW5pdHNbaV0gPT09IGJveCl7XG4gICAgICAgICAgICAgIHNoaWZ0SW5kZXggPSBpO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgZm9yICh2YXIgaiA9IHNoaWZ0SW5kZXgrMTsgaiA8IHVuaXRzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICAgIHVuaXRzW2pdLmJib3gueCArPSAoYm94LmJib3gudyAtIG9sZExlbmd0aCk7XG4gICAgICAgICAgfVxuICAgICAgICB9ICovXG5cbiAgICAgIH1cblxuICAgICAgLy9UT0RPIGZpbmQgYSB3YXkgdG8gZWxpbWF0ZSB0aGlzIHJlZHVuZGFuY3kgdG8gdXBkYXRlIGluZm8tYm94IHBvc2l0aW9uc1xuICAgICAgbm9kZS5kYXRhKCdib3JkZXItd2lkdGgnLCBub2RlLmRhdGEoJ2JvcmRlci13aWR0aCcpKTtcblxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuXG4gICAgLy8gQWRkIGEgbmV3IHN0YXRlIG9yIGluZm8gYm94IHRvIGdpdmVuIG5vZGVzLlxuICAgIC8vIFRoZSBib3ggaXMgcmVwcmVzZW50ZWQgYnkgdGhlIHBhcmFtZXRlciBvYmouXG4gICAgLy8gVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIGp1c3QgYWRkZWQgYm94LlxuICAgIGVsZW1lbnRVdGlsaXRpZXMuYWRkU3RhdGVPckluZm9Cb3ggPSBmdW5jdGlvbiAobm9kZXMsIG9iaikge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2Rlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgbm9kZSA9IG5vZGVzW2ldO1xuICAgICAgICB2YXIgbG9jYXRpb25PYmo7XG5cbiAgICAgICAgdmFyIGRlZmF1bHRQcm9wcyA9IGVsZW1lbnRVdGlsaXRpZXMuZ2V0RGVmYXVsdFByb3BlcnRpZXMoIG5vZGUuZGF0YSgnY2xhc3MnKSApO1xuICAgICAgICB2YXIgaW5mb2JveFByb3BzID0gZGVmYXVsdFByb3BzWyBvYmouY2xhenogXTtcbiAgICAgICAgdmFyIGJib3ggPSBvYmouYmJveCB8fCB7IHc6IGluZm9ib3hQcm9wcy53aWR0aCwgaDogaW5mb2JveFByb3BzLmhlaWdodCB9OyAgICAgICAgXG4gICAgICAgIHZhciBzdHlsZSA9IGVsZW1lbnRVdGlsaXRpZXMuZ2V0RGVmYXVsdEluZm9ib3hTdHlsZSggbm9kZS5kYXRhKCdjbGFzcycpLCBvYmouY2xhenogKTtcbiAgICAgICAgaWYob2JqLnN0eWxlKXtcbiAgICAgICAgICAkLmV4dGVuZCggc3R5bGUsIG9iai5zdHlsZSApO1xuICAgICAgICB9XG4gICAgICAgXG4gICAgICAgIGlmKG9iai5jbGF6eiA9PSBcInVuaXQgb2YgaW5mb3JtYXRpb25cIikge1xuICAgICAgICAgIGxvY2F0aW9uT2JqID0gc2JnbnZpekluc3RhbmNlLmNsYXNzZXMuVW5pdE9mSW5mb3JtYXRpb24uY3JlYXRlKG5vZGUsIGN5LCBvYmoubGFiZWwudGV4dCwgYmJveCwgb2JqLmxvY2F0aW9uLCBvYmoucG9zaXRpb24sIHN0eWxlLCBvYmouaW5kZXgsIG9iai5pZCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAob2JqLmNsYXp6ID09IFwic3RhdGUgdmFyaWFibGVcIikge1xuICAgICAgICAgIGxvY2F0aW9uT2JqID0gc2JnbnZpekluc3RhbmNlLmNsYXNzZXMuU3RhdGVWYXJpYWJsZS5jcmVhdGUobm9kZSwgY3ksIG9iai5zdGF0ZS52YWx1ZSwgb2JqLnN0YXRlLnZhcmlhYmxlLCBiYm94LCBvYmoubG9jYXRpb24sIG9iai5wb3NpdGlvbiwgc3R5bGUsIG9iai5pbmRleCwgb2JqLmlkKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGxvY2F0aW9uT2JqO1xuICAgIH07XG5cbiAgICAvLyBSZW1vdmUgdGhlIHN0YXRlIG9yIGluZm8gYm94ZXMgb2YgdGhlIGdpdmVuIG5vZGVzIGF0IGdpdmVuIGluZGV4LlxuICAgIC8vIFJldHVybnMgdGhlIHJlbW92ZWQgYm94LlxuICAgIGVsZW1lbnRVdGlsaXRpZXMucmVtb3ZlU3RhdGVPckluZm9Cb3ggPSBmdW5jdGlvbiAobm9kZXMsIGxvY2F0aW9uT2JqKSB7XG4gICAgICB2YXIgb2JqO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2Rlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgbm9kZSA9IG5vZGVzW2ldO1xuICAgICAgICB2YXIgc3RhdGVBbmRJbmZvcyA9IG5vZGUuZGF0YSgnc3RhdGVzYW5kaW5mb3MnKTtcbiAgICAgICAgdmFyIHVuaXQgPSBzdGF0ZUFuZEluZm9zW2xvY2F0aW9uT2JqLmluZGV4XTtcblxuICAgICAgICB2YXIgdW5pdENsYXNzID0gc2JnbnZpekluc3RhbmNlLmNsYXNzZXMuZ2V0QXV4VW5pdENsYXNzKHVuaXQpO1xuXG4gICAgICAgIG9iaiA9IHVuaXRDbGFzcy5yZW1vdmUodW5pdCwgY3kpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gb2JqO1xuICAgIH07XG5cblxuICAgIC8vVGlsZXMgaW5mb3JtYXRpb25zIGJveGVzIGZvciBnaXZlbiBhbmNob3JTaWRlc1xuICAgIGVsZW1lbnRVdGlsaXRpZXMuZml0VW5pdHMgPSBmdW5jdGlvbiAobm9kZSwgbG9jYXRpb25zKSB7XG4gICAgICB2YXIgb2JqID0gW107XG4gICAgICBub2RlLmRhdGEoJ3N0YXRlc2FuZGluZm9zJykuZm9yRWFjaCggZnVuY3Rpb24gKGVsZSkge1xuICAgICAgICBvYmoucHVzaCh7XG4gICAgICAgICAgeDogZWxlLmJib3gueCxcbiAgICAgICAgICB5OiBlbGUuYmJveC55LFxuICAgICAgICAgIGFuY2hvclNpZGU6IGVsZS5hbmNob3JTaWRlXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgICBzYmdudml6SW5zdGFuY2UuY2xhc3Nlcy5BdXhVbml0TGF5b3V0LmZpdFVuaXRzKG5vZGUsIGN5LCBsb2NhdGlvbnMpO1xuICAgICAgcmV0dXJuIG9iajtcbiAgICB9O1xuXG4gICAgLy9DaGVjayB3aGljaCBhbmNob3JzaWRlcyBmaXRzXG4gICAgZWxlbWVudFV0aWxpdGllcy5jaGVja0ZpdCA9IGZ1bmN0aW9uIChub2RlLCBsb2NhdGlvbikgeyAvL2lmIG5vIGxvY2F0aW9uIGdpdmVuLCBpdCBjaGVja3MgYWxsIHBvc3NpYmxlIGxvY2F0aW9uc1xuICAgICAgcmV0dXJuIHNiZ252aXpJbnN0YW5jZS5jbGFzc2VzLkF1eFVuaXRMYXlvdXQuY2hlY2tGaXQobm9kZSwgY3ksIGxvY2F0aW9uKTtcbiAgICB9O1xuXG4gICAgLy9Nb2RpZnkgYXJyYXkgb2YgYXV4IGxheW91dCB1bml0c1xuICAgIGVsZW1lbnRVdGlsaXRpZXMubW9kaWZ5VW5pdHMgPSBmdW5jdGlvbiAobm9kZSwgdW5pdCwgYW5jaG9yU2lkZSkge1xuICAgICAgc2JnbnZpekluc3RhbmNlLmNsYXNzZXMuQXV4VW5pdExheW91dC5tb2RpZnlVbml0cyhub2RlLCB1bml0LCBhbmNob3JTaWRlLCBjeSk7XG4gICAgfTtcblxuICAgIC8vIFNldCBtdWx0aW1lciBzdGF0dXMgb2YgdGhlIGdpdmVuIG5vZGVzIHRvIHRoZSBnaXZlbiBzdGF0dXMuXG4gICAgZWxlbWVudFV0aWxpdGllcy5zZXRNdWx0aW1lclN0YXR1cyA9IGZ1bmN0aW9uIChub2Rlcywgc3RhdHVzKSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBub2RlID0gbm9kZXNbaV07XG4gICAgICAgIHZhciBzYmduY2xhc3MgPSBub2RlLmRhdGEoJ2NsYXNzJyk7XG4gICAgICAgIHZhciBpc011bHRpbWVyID0gbm9kZS5kYXRhKCdjbGFzcycpLmVuZHNXaXRoKCcgbXVsdGltZXInKTtcblxuICAgICAgICBpZiAoc3RhdHVzKSB7IC8vIE1ha2UgbXVsdGltZXIgc3RhdHVzIHRydWVcbiAgICAgICAgICBpZiAoIWlzTXVsdGltZXIpIHtcbiAgICAgICAgICAgIG5vZGUuZGF0YSgnY2xhc3MnLCBzYmduY2xhc3MgKyAnIG11bHRpbWVyJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgeyAvLyBNYWtlIG11bHRpbWVyIHN0YXR1cyBmYWxzZVxuICAgICAgICAgIGlmIChpc011bHRpbWVyKSB7XG4gICAgICAgICAgICBub2RlLmRhdGEoJ2NsYXNzJywgc2JnbmNsYXNzLnJlcGxhY2UoJyBtdWx0aW1lcicsICcnKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcblxuICAgIC8vIENoYW5nZSBmb250IHByb3BlcnRpZXMgb2YgdGhlIGdpdmVuIGVsZW1lbnRzIHdpdGggZ2l2ZW4gZm9udCBkYXRhXG4gICAgZWxlbWVudFV0aWxpdGllcy5jaGFuZ2VGb250UHJvcGVydGllcyA9IGZ1bmN0aW9uIChlbGVzLCBkYXRhKSB7XG4gICAgICBmb3IgKHZhciBwcm9wIGluIGRhdGEpIHtcbiAgICAgICAgZWxlcy5kYXRhKHByb3AsIGRhdGFbcHJvcF0pO1xuICAgICAgfVxuICAgIH07XG5cbiAgICAvLyBUaGlzIGZ1bmN0aW9uIGdldHMgYW4gZWRnZSwgYW5kIGVuZHMgb2YgdGhhdCBlZGdlIChPcHRpb25hbGx5IGl0IG1heSB0YWtlIGp1c3QgdGhlIGNsYXNzZXMgb2YgdGhlIGVkZ2UgYXMgd2VsbCkgYXMgcGFyYW1ldGVycy5cbiAgICAvLyBJdCBtYXkgcmV0dXJuICd2YWxpZCcgKHRoYXQgZW5kcyBpcyB2YWxpZCBmb3IgdGhhdCBlZGdlKSwgJ3JldmVyc2UnICh0aGF0IGVuZHMgaXMgbm90IHZhbGlkIGZvciB0aGF0IGVkZ2UgYnV0IHRoZXkgd291bGQgYmUgdmFsaWRcbiAgICAvLyBpZiB5b3UgcmV2ZXJzZSB0aGUgc291cmNlIGFuZCB0YXJnZXQpLCAnaW52YWxpZCcgKHRoYXQgZW5kcyBhcmUgdG90YWxseSBpbnZhbGlkIGZvciB0aGF0IGVkZ2UpLlxuICAgIGVsZW1lbnRVdGlsaXRpZXMudmFsaWRhdGVBcnJvd0VuZHMgPSBmdW5jdGlvbiAoZWRnZSwgc291cmNlLCB0YXJnZXQsIGlzUmVwbGFjZW1lbnQpIHtcbiAgICAgIC8vIGlmIG1hcCB0eXBlIGlzIFVua25vd24gLS0gbm8gcnVsZXMgYXBwbGllZFxuICAgICAgaWYgKGVsZW1lbnRVdGlsaXRpZXMuZ2V0TWFwVHlwZSgpID09IFwiSHlicmlkQW55XCIgfHwgZWxlbWVudFV0aWxpdGllcy5nZXRNYXBUeXBlKCkgPT0gXCJIeWJyaWRTYmduXCIgfHwgIWVsZW1lbnRVdGlsaXRpZXMuZ2V0TWFwVHlwZSgpKVxuICAgICAgICByZXR1cm4gXCJ2YWxpZFwiO1xuXG4gICAgICB2YXIgZWRnZWNsYXNzID0gdHlwZW9mIGVkZ2UgPT09ICdzdHJpbmcnID8gZWRnZSA6IGVkZ2UuZGF0YSgnY2xhc3MnKTtcbiAgICAgIHZhciBzb3VyY2VjbGFzcyA9IHNvdXJjZS5kYXRhKCdjbGFzcycpO1xuICAgICAgdmFyIHRhcmdldGNsYXNzID0gdGFyZ2V0LmRhdGEoJ2NsYXNzJyk7XG4gICAgICB2YXIgbWFwVHlwZSA9IGVsZW1lbnRVdGlsaXRpZXMuZ2V0TWFwVHlwZSgpO1xuICAgICAgdmFyIGVkZ2VDb25zdHJhaW50cyA9IGVsZW1lbnRVdGlsaXRpZXNbbWFwVHlwZV0uY29ubmVjdGl2aXR5Q29uc3RyYWludHNbZWRnZWNsYXNzXTtcblxuICAgICAgaWYgKG1hcFR5cGUgPT0gXCJBRlwiKXtcbiAgICAgICAgaWYgKHNvdXJjZWNsYXNzLnN0YXJ0c1dpdGgoXCJCQVwiKSkgLy8gd2UgaGF2ZSBzZXBhcmF0ZSBjbGFzc2VzIGZvciBlYWNoIGJpb2xvZ2ljYWwgYWN0aXZpdHlcbiAgICAgICAgICBzb3VyY2VjbGFzcyA9IFwiYmlvbG9naWNhbCBhY3Rpdml0eVwiOyAvLyBidXQgc2FtZSBydWxlIGFwcGxpZXMgdG8gYWxsIG9mIHRoZW1cblxuICAgICAgICBpZiAodGFyZ2V0Y2xhc3Muc3RhcnRzV2l0aChcIkJBXCIpKSAvLyB3ZSBoYXZlIHNlcGFyYXRlIGNsYXNzZXMgZm9yIGVhY2ggYmlvbG9naWNhbCBhY3Rpdml0eVxuICAgICAgICAgIHRhcmdldGNsYXNzID0gXCJiaW9sb2dpY2FsIGFjdGl2aXR5XCI7IC8vIGJ1dCBzYW1lIHJ1bGUgYXBwbGllcyB0byBhbGwgb2YgdGhlbVxuICAgICAgfVxuICAgICAgZWxzZSBpZiAobWFwVHlwZSA9PSBcIlBEXCIpe1xuICAgICAgICBzb3VyY2VjbGFzcyA9IHNvdXJjZWNsYXNzLnJlcGxhY2UoL1xccyptdWx0aW1lciQvLCAnJyk7XG4gICAgICAgIHRhcmdldGNsYXNzID0gdGFyZ2V0Y2xhc3MucmVwbGFjZSgvXFxzKm11bHRpbWVyJC8sICcnKTtcbiAgICAgIH1cblxuICAgICAgLy8gZ2l2ZW4gYSBub2RlLCBhY3RpbmcgYXMgc291cmNlIG9yIHRhcmdldCwgcmV0dXJucyBib29sZWFuIHdldGhlciBvciBub3QgaXQgaGFzIHRvbyBtYW55IGVkZ2VzIGFscmVhZHlcbiAgICAgIGZ1bmN0aW9uIGhhc1Rvb01hbnlFZGdlcyhub2RlLCBzb3VyY2VPclRhcmdldCkge1xuICAgICAgICB2YXIgbm9kZWNsYXNzID0gbm9kZS5kYXRhKCdjbGFzcycpO1xuICAgICAgICBub2RlY2xhc3MgPSBub2RlY2xhc3MucmVwbGFjZSgvXFxzKm11bHRpbWVyJC8sICcnKTtcbiAgICAgICAgaWYgKG5vZGVjbGFzcy5zdGFydHNXaXRoKFwiQkFcIikpXG4gICAgICAgICAgbm9kZWNsYXNzID0gXCJiaW9sb2dpY2FsIGFjdGl2aXR5XCI7XG5cbiAgICAgICAgLypcbiAgICAgICAgICBPbiB0aGUgbG9naWMgYmVsb3c6XG5cbiAgICAgICAgICBDdXJyZW50IGVkZ2UgY291bnQgKGluY29taW5nIG9yIG91dGdvaW5nKSBvZiBub2RlcyBzaG91bGQgYmUgc3RyaWN0bHkgbGVzcyBcbiAgICAgICAgICB0aGFuIHRoZSBtYXhpbXVtIGFsbG93ZWQgaWYgd2UgYXJlIGFkZGluZyBhbiBlZGdlIHRvIHRoZSBub2RlLiBUaGlzIHdheVxuICAgICAgICAgIGl0IHdpbGwgbmV2ZXIgZXhjZWVkIHRoZSBtYXggY291bnQuXG4gICAgICAgICAgXG4gICAgICAgICAgRWRnZXMgY2FuIGJlIGFkZGVkIGluIHR3byBkaWZmZXJlbnQgd2F5cy4gRWl0aGVyIHRoZXkgYXJlIGFkZGVkIGRpcmVjdGx5IG9yXG4gICAgICAgICAgdGhleSBhcmUgYWRkZWQgYnkgYmVpbmcgcmVwbGFjZWQgZnJvbSBhbm90aGVyIG5vZGUsIGkuZSBkaXNjb25uZWN0ZWQgZnJvbVxuICAgICAgICAgIG9uZSBhbmQgY29ubmVjdGVkIHRvIGFub3RoZXIuXG5cbiAgICAgICAgICBXZSBjYW4gZGV0ZWN0IGlmIHRoZSBlZGdlIGJlaW5nIGFkZGVkIGlzIGFkZGVkIGZyb20gYSByZXBsYWNlbWVudCBieSBjaGVja2luZ1xuICAgICAgICAgIHdoZXRoZXIgdGhlIHNvdXJjZSBzdGF5ZWQgdGhlIHNhbWUgd2hlbiBjaGVja2luZyBlZGdlIGNvdW50cyBvZiB0aGUgc291cmNlIG5vZGUsXG4gICAgICAgICAgYW5kIHdoZXRoZXIgdGhlIHRhcmdldCBzdGF5ZWQgdGhlIHNhbWUgd2hlbiBjaGVja2luZyBlZGdlIGNvdW50cyBvZiB0aGVcbiAgICAgICAgICB0YXJnZXQgbm9kZS5cblxuICAgICAgICAgIEN1cnJlbnQgZWRnZSBjb3VudCBvZiBub2RlcyBjYW4gYmUgYWxsb3dlZCB0byBiZSBlcXVhbCB0byB0aGUgbWF4aW11bSBpbiBcbiAgICAgICAgICBjYXNlcyB3aGVyZSBhIHJlcGxhY2VtZW50IGlzIG1hZGUuIEJ1dCB3ZSBzaG91bGQgYmUgY2FyZWZ1bCB0aGF0IHRoaXNcbiAgICAgICAgICByZXBsYWNlbWVudCBvcGVyYXRpb24gaXMgbm90IGFsc28gYW4gYWRkaXRpb24gb3BlcmF0aW9uIGFzIGRlc2NyaWJlZCBhYm92ZS5cbiAgICAgICAgKi9cblxuICAgICAgICB2YXIgdG90YWxUb29NYW55ID0gdHJ1ZTtcbiAgICAgICAgdmFyIGVkZ2VUb29NYW55ID0gdHJ1ZTtcbiAgICAgICAgaWYgKHNvdXJjZU9yVGFyZ2V0ID09IFwic291cmNlXCIpIHtcbiAgICAgICAgICAgIHZhciBzYW1lRWRnZUNvdW50T3V0ID0gbm9kZS5vdXRnb2VycygnZWRnZVtjbGFzcz1cIicrZWRnZWNsYXNzKydcIl0nKS5zaXplKCk7XG4gICAgICAgICAgICB2YXIgdG90YWxFZGdlQ291bnRPdXQgPSBub2RlLm91dGdvZXJzKCdlZGdlJykuc2l6ZSgpO1xuICAgICAgICAgICAgdmFyIG1heFRvdGFsID0gZWRnZUNvbnN0cmFpbnRzW25vZGVjbGFzc10uYXNTb3VyY2UubWF4VG90YWw7IFxuICAgICAgICAgICAgdmFyIG1heEVkZ2UgPSBlZGdlQ29uc3RyYWludHNbbm9kZWNsYXNzXS5hc1NvdXJjZS5tYXhFZGdlO1xuXG4gICAgICAgICAgICB2YXIgY29tcGFyZVN0cmljdCA9ICEoaXNSZXBsYWNlbWVudCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChlZGdlLnNvdXJjZSgpID09PSBzb3VyY2UpKTtcblxuICAgICAgICAgICAgdmFyIHdpdGhpbkxpbWl0cyA9ICFtYXhUb3RhbCB8fCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb21wYXJlU3RyaWN0ICYmICh0b3RhbEVkZ2VDb3VudE91dCA8IG1heFRvdGFsKSkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICghY29tcGFyZVN0cmljdCAmJiAodG90YWxFZGdlQ291bnRPdXQgPD0gbWF4VG90YWwpKTtcblxuICAgICAgICAgICAgaWYgKHdpdGhpbkxpbWl0cykge1xuICAgICAgICAgICAgICAgIHRvdGFsVG9vTWFueSA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gdGhlbiBjaGVjayBsaW1pdHMgZm9yIHRoaXMgc3BlY2lmaWMgZWRnZSBjbGFzc1xuXG4gICAgICAgICAgICB3aXRoaW5MaW1pdHMgPSAhbWF4RWRnZSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb21wYXJlU3RyaWN0ICYmIChzYW1lRWRnZUNvdW50T3V0IDwgbWF4RWRnZSkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIWNvbXBhcmVTdHJpY3QgJiYgKHNhbWVFZGdlQ291bnRPdXQgPD0gbWF4RWRnZSkpKTsgXG5cbiAgICAgICAgICAgIGlmICh3aXRoaW5MaW1pdHMpIHtcbiAgICAgICAgICAgICAgICBlZGdlVG9vTWFueSA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBpZiBvbmx5IG9uZSBvZiB0aGUgbGltaXRzIGlzIHJlYWNoZWQgdGhlbiBlZGdlIGlzIGludmFsaWRcbiAgICAgICAgICAgIHJldHVybiB0b3RhbFRvb01hbnkgfHwgZWRnZVRvb01hbnk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7IC8vIG5vZGUgaXMgdXNlZCBhcyB0YXJnZXRcbiAgICAgICAgICAgIHZhciBzYW1lRWRnZUNvdW50SW4gPSBub2RlLmluY29tZXJzKCdlZGdlW2NsYXNzPVwiJytlZGdlY2xhc3MrJ1wiXScpLnNpemUoKTtcbiAgICAgICAgICAgIHZhciB0b3RhbEVkZ2VDb3VudEluID0gbm9kZS5pbmNvbWVycygnZWRnZScpLnNpemUoKTtcbiAgICAgICAgICAgIHZhciBtYXhUb3RhbCA9IGVkZ2VDb25zdHJhaW50c1tub2RlY2xhc3NdLmFzVGFyZ2V0Lm1heFRvdGFsOyBcbiAgICAgICAgICAgIHZhciBtYXhFZGdlID0gZWRnZUNvbnN0cmFpbnRzW25vZGVjbGFzc10uYXNUYXJnZXQubWF4RWRnZTtcblxuICAgICAgICAgICAgdmFyIGNvbXBhcmVTdHJpY3QgPSAhKGlzUmVwbGFjZW1lbnQgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGVkZ2UudGFyZ2V0KCkgPT09IHRhcmdldCkpO1xuXG4gICAgICAgICAgICB2YXIgd2l0aGluTGltaXRzID0gIW1heFRvdGFsIHx8IFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbXBhcmVTdHJpY3QgJiYgKHRvdGFsRWRnZUNvdW50SW4gPCBtYXhUb3RhbCkpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIWNvbXBhcmVTdHJpY3QgJiYgKHRvdGFsRWRnZUNvdW50SW4gPD0gbWF4VG90YWwpKTtcblxuICAgICAgICAgICAgaWYgKHdpdGhpbkxpbWl0cykge1xuICAgICAgICAgICAgICAgIHRvdGFsVG9vTWFueSA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB3aXRoaW5MaW1pdHMgPSAhbWF4RWRnZSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAoY29tcGFyZVN0cmljdCAmJiAoc2FtZUVkZ2VDb3VudEluIDwgbWF4RWRnZSkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKCFjb21wYXJlU3RyaWN0ICYmIChzYW1lRWRnZUNvdW50SW4gPD0gbWF4RWRnZSkpKTsgXG5cbiAgICAgICAgICAgIGlmICh3aXRoaW5MaW1pdHMpIHtcbiAgICAgICAgICAgICAgICBlZGdlVG9vTWFueSA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRvdGFsVG9vTWFueSB8fCBlZGdlVG9vTWFueTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBmdW5jdGlvbiBpc0luQ29tcGxleChub2RlKSB7XG4gICAgICAgIHZhciBwYXJlbnRDbGFzcyA9IG5vZGUucGFyZW50KCkuZGF0YSgnY2xhc3MnKTtcbiAgICAgICAgcmV0dXJuIHBhcmVudENsYXNzICYmIHBhcmVudENsYXNzLnN0YXJ0c1dpdGgoJ2NvbXBsZXgnKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGlzSW5Db21wbGV4KHNvdXJjZSkgfHwgaXNJbkNvbXBsZXgodGFyZ2V0KSkgeyAvLyBzdWJ1bml0cyBvZiBhIGNvbXBsZXggYXJlIG5vIGxvbmdlciBFUE5zLCBubyBjb25uZWN0aW9uIGFsbG93ZWRcbiAgICAgICAgcmV0dXJuICdpbnZhbGlkJztcbiAgICAgIH1cblxuICAgICAgLy8gY2hlY2sgbmF0dXJlIG9mIGNvbm5lY3Rpb25cbiAgICAgIGlmIChlZGdlQ29uc3RyYWludHNbc291cmNlY2xhc3NdLmFzU291cmNlLmlzQWxsb3dlZCAmJiBlZGdlQ29uc3RyYWludHNbdGFyZ2V0Y2xhc3NdLmFzVGFyZ2V0LmlzQWxsb3dlZCkge1xuICAgICAgICAvLyBjaGVjayBhbW91bnQgb2YgY29ubmVjdGlvbnNcbiAgICAgICAgaWYgKCFoYXNUb29NYW55RWRnZXMoc291cmNlLCBcInNvdXJjZVwiKSAmJiAhaGFzVG9vTWFueUVkZ2VzKHRhcmdldCwgXCJ0YXJnZXRcIikgKSB7XG4gICAgICAgICAgcmV0dXJuICd2YWxpZCc7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIHRyeSB0byByZXZlcnNlXG4gICAgICBpZiAoZWRnZUNvbnN0cmFpbnRzW3RhcmdldGNsYXNzXS5hc1NvdXJjZS5pc0FsbG93ZWQgJiYgZWRnZUNvbnN0cmFpbnRzW3NvdXJjZWNsYXNzXS5hc1RhcmdldC5pc0FsbG93ZWQpIHtcbiAgICAgICAgaWYgKCFoYXNUb29NYW55RWRnZXModGFyZ2V0LCBcInNvdXJjZVwiKSAmJiAhaGFzVG9vTWFueUVkZ2VzKHNvdXJjZSwgXCJ0YXJnZXRcIikgKSB7XG4gICAgICAgICAgcmV0dXJuICdyZXZlcnNlJztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuICdpbnZhbGlkJztcbiAgICB9O1xuXG4gICAgZWxlbWVudFV0aWxpdGllcy5kZWxldGVBbmRQZXJmb3JtTGF5b3V0ID0gZnVuY3Rpb24oZWxlcywgbGF5b3V0cGFyYW0pIHtcbiAgICAgIHZhciByZXN1bHQgPSBlbGVzLnJlbW92ZSgpO1xuICAgICAgaWYgKHR5cGVvZiBsYXlvdXRwYXJhbSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBsYXlvdXRwYXJhbSgpOyAvLyBJZiBsYXlvdXRwYXJhbSBpcyBhIGZ1bmN0aW9uIGV4ZWN1dGUgaXRcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICAgIHZhciBsYXlvdXQgPSBjeS5sYXlvdXQobGF5b3V0cGFyYW0pOyAvLyBJZiBsYXlvdXRwYXJhbSBpcyBsYXlvdXQgb3B0aW9ucyBjYWxsIGxheW91dCB3aXRoIHRoYXQgb3B0aW9ucy5cblxuICAgICAgICAgIC8vIERvIHRoaXMgY2hlY2sgZm9yIGN5dG9zY2FwZS5qcyBiYWNrd2FyZCBjb21wYXRpYmlsaXR5XG4gICAgICAgICAgaWYgKGxheW91dCAmJiBsYXlvdXQucnVuKSB7XG4gICAgICAgICAgICAgIGxheW91dC5ydW4oKTtcbiAgICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfTtcblxuICAgIC8qXG4gICAgICogSGlkZSBnaXZlbiBlbGVzIGFuZCBwZXJmb3JtIGdpdmVuIGxheW91dCBhZnRlcndhcmQuIExheW91dCBwYXJhbWV0ZXIgbWF5IGJlIGxheW91dCBvcHRpb25zXG4gICAgICogb3IgYSBmdW5jdGlvbiB0byBjYWxsLlxuICAgICAqL1xuICAgIGVsZW1lbnRVdGlsaXRpZXMuaGlkZUFuZFBlcmZvcm1MYXlvdXQgPSBmdW5jdGlvbihlbGVzLCBsYXlvdXRwYXJhbSkge1xuICAgICAgICB2YXIgcmVzdWx0ID0gY3kudmlld1V0aWxpdGllcygpLmhpZGUoZWxlcyk7IC8vIEhpZGUgZ2l2ZW4gZWxlc1xuICAgICAgICBpZiAodHlwZW9mIGxheW91dHBhcmFtID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBsYXlvdXRwYXJhbSgpOyAvLyBJZiBsYXlvdXRwYXJhbSBpcyBhIGZ1bmN0aW9uIGV4ZWN1dGUgaXRcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHZhciBsYXlvdXQgPSBjeS5sYXlvdXQobGF5b3V0cGFyYW0pOyAvLyBJZiBsYXlvdXRwYXJhbSBpcyBsYXlvdXQgb3B0aW9ucyBjYWxsIGxheW91dCB3aXRoIHRoYXQgb3B0aW9ucy5cblxuICAgICAgICAgICAgLy8gRG8gdGhpcyBjaGVjayBmb3IgY3l0b3NjYXBlLmpzIGJhY2t3YXJkIGNvbXBhdGliaWxpdHlcbiAgICAgICAgICAgIGlmIChsYXlvdXQgJiYgbGF5b3V0LnJ1bikge1xuICAgICAgICAgICAgICAgIGxheW91dC5ydW4oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfTtcblxuICAgIC8qXG4gICAgICogVW5oaWRlIGdpdmVuIGVsZXMgYW5kIHBlcmZvcm0gZ2l2ZW4gbGF5b3V0IGFmdGVyd2FyZC4gTGF5b3V0IHBhcmFtZXRlciBtYXkgYmUgbGF5b3V0IG9wdGlvbnNcbiAgICAgKiBvciBhIGZ1bmN0aW9uIHRvIGNhbGwuXG4gICAgICovXG4gICAgZWxlbWVudFV0aWxpdGllcy5zaG93QW5kUGVyZm9ybUxheW91dCA9IGZ1bmN0aW9uKGVsZXMsIGxheW91dHBhcmFtKSB7XG4gICAgICB2YXIgcmVzdWx0ID0gY3kudmlld1V0aWxpdGllcygpLnNob3coZWxlcyk7IC8vIFNob3cgZ2l2ZW4gZWxlc1xuICAgICAgaWYgKHR5cGVvZiBsYXlvdXRwYXJhbSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBsYXlvdXRwYXJhbSgpOyAvLyBJZiBsYXlvdXRwYXJhbSBpcyBhIGZ1bmN0aW9uIGV4ZWN1dGUgaXRcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICB2YXIgbGF5b3V0ID0gY3kubGF5b3V0KGxheW91dHBhcmFtKTsgLy8gSWYgbGF5b3V0cGFyYW0gaXMgbGF5b3V0IG9wdGlvbnMgY2FsbCBsYXlvdXQgd2l0aCB0aGF0IG9wdGlvbnMuXG5cbiAgICAgICAgLy8gRG8gdGhpcyBjaGVjayBmb3IgY3l0b3NjYXBlLmpzIGJhY2t3YXJkIGNvbXBhdGliaWxpdHlcbiAgICAgICAgaWYgKGxheW91dCAmJiBsYXlvdXQucnVuKSB7XG4gICAgICAgICAgbGF5b3V0LnJ1bigpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfTtcblxuICAgIC8qXG4gICAgICogQ2hhbmdlIHN0eWxlL2NzcyBvZiBnaXZlbiBlbGVzIGJ5IHNldHRpbmcgZ2V0dGluZyBwcm9wZXJ0eSBuYW1lIHRvIHRoZSBnaXZlbiB2YWx1ZS92YWx1ZXMgKE5vdGUgdGhhdCB2YWx1ZU1hcCBwYXJhbWV0ZXIgbWF5IGJlXG4gICAgICogYSBzaW5nbGUgc3RyaW5nIG9yIGFuIGlkIHRvIHZhbHVlIG1hcCkuXG4gICAgICovXG4gICAgZWxlbWVudFV0aWxpdGllcy5jaGFuZ2VDc3MgPSBmdW5jdGlvbihlbGVzLCBuYW1lLCB2YWx1ZU1hcCkge1xuICAgICAgaWYgKCB0eXBlb2YgdmFsdWVNYXAgPT09ICdvYmplY3QnICkge1xuICAgICAgICBjeS5zdGFydEJhdGNoKCk7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZWxlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIHZhciBlbGUgPSBjeS5nZXRFbGVtZW50QnlJZChlbGVzW2ldLmlkKCkpO1xuICAgICAgICAgIGVsZS5jc3MobmFtZSwgdmFsdWVNYXBbZWxlLmlkKCldKTsgLy8gdmFsdWVNYXAgaXMgYW4gaWQgdG8gdmFsdWUgbWFwIHVzZSBpdCBpbiB0aGlzIHdheVxuICAgICAgICB9XG4gICAgICAgIGN5LmVuZEJhdGNoKCk7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgZWxlcy5jc3MobmFtZSwgdmFsdWVNYXApOyAvLyB2YWx1ZU1hcCBpcyBqdXN0IGEgc3RyaW5nIHNldCBjc3MoJ25hbWUnKSBmb3IgYWxsIGVsZXMgdG8gdGhpcyB2YWx1ZVxuICAgICAgfVxuICAgIH07XG5cbiAgICAvKlxuICAgICAqIENoYW5nZSBkYXRhIG9mIGdpdmVuIGVsZXMgYnkgc2V0dGluZyBnZXR0aW5nIHByb3BlcnR5IG5hbWUgdG8gdGhlIGdpdmVuIHZhbHVlL3ZhbHVlcyAoTm90ZSB0aGF0IHZhbHVlTWFwIHBhcmFtZXRlciBtYXkgYmVcbiAgICAgKiBhIHNpbmdsZSBzdHJpbmcgb3IgYW4gaWQgdG8gdmFsdWUgbWFwKS5cbiAgICAgKi9cbiAgICBlbGVtZW50VXRpbGl0aWVzLmNoYW5nZURhdGEgPSBmdW5jdGlvbihlbGVzLCBuYW1lLCB2YWx1ZU1hcCkge1xuICAgICAgaWYgKCB0eXBlb2YgdmFsdWVNYXAgPT09ICdvYmplY3QnICkge1xuICAgICAgICBjeS5zdGFydEJhdGNoKCk7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZWxlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIHZhciBlbGUgPSBjeS5nZXRFbGVtZW50QnlJZChlbGVzW2ldLmlkKCkpO1xuICAgICAgICAgIGVsZS5kYXRhKG5hbWUsIHZhbHVlTWFwW2VsZS5pZCgpXSk7IC8vIHZhbHVlTWFwIGlzIGFuIGlkIHRvIHZhbHVlIG1hcCB1c2UgaXQgaW4gdGhpcyB3YXlcbiAgICAgICAgfVxuICAgICAgICBjeS5lbmRCYXRjaCgpO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIGVsZXMuZGF0YShuYW1lLCB2YWx1ZU1hcCk7IC8vIHZhbHVlTWFwIGlzIGp1c3QgYSBzdHJpbmcgc2V0IGNzcygnbmFtZScpIGZvciBhbGwgZWxlcyB0byB0aGlzIHZhbHVlXG4gICAgICB9XG4gICAgfTtcblxuICAgIGVsZW1lbnRVdGlsaXRpZXMudXBkYXRlU2V0RmllbGQgPSBmdW5jdGlvbihlbGUsIGZpZWxkTmFtZSwgdG9EZWxldGUsIHRvQWRkLCBjYWxsYmFjaykge1xuICAgICAgdmFyIHNldCA9IGVsZS5kYXRhKCBmaWVsZE5hbWUgKTtcbiAgICAgIGlmICggIXNldCApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdmFyIHVwZGF0ZXMgPSB7fTtcblxuICAgICAgaWYgKCB0b0RlbGV0ZSAhPSBudWxsICYmIHNldFsgdG9EZWxldGUgXSApIHtcbiAgICAgICAgZGVsZXRlIHNldFsgdG9EZWxldGUgXTtcbiAgICAgICAgdXBkYXRlcy5kZWxldGVkID0gdG9EZWxldGU7XG4gICAgICB9XG5cbiAgICAgIGlmICggdG9BZGQgIT0gbnVsbCApIHtcbiAgICAgICAgc2V0WyB0b0FkZCBdID0gdHJ1ZTtcbiAgICAgICAgdXBkYXRlcy5hZGRlZCA9IHRvQWRkO1xuICAgICAgfVxuXG4gICAgICBpZiAoIGNhbGxiYWNrICYmICggdXBkYXRlc1sgJ2RlbGV0ZWQnIF0gIT0gbnVsbCB8fCB1cGRhdGVzWyAnYWRkZWQnIF0gIT0gbnVsbCApICkge1xuICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdXBkYXRlcztcbiAgICB9O1xuXG4gICAgLypcbiAgICAgKiBSZXR1cm4gdGhlIHNldCBvZiBhbGwgbm9kZXMgcHJlc2VudCB1bmRlciB0aGUgZ2l2ZW4gcG9zaXRpb25cbiAgICAgKiByZW5kZXJlZFBvcyBtdXN0IGJlIGEgcG9pbnQgZGVmaW5lZCByZWxhdGl2ZWx5IHRvIGN5dG9zY2FwZSBjb250YWluZXJcbiAgICAgKiAobGlrZSByZW5kZXJlZFBvc2l0aW9uIGZpZWxkIG9mIGEgbm9kZSlcbiAgICAgKi9cbiAgICBlbGVtZW50VXRpbGl0aWVzLmdldE5vZGVzQXQgPSBmdW5jdGlvbihyZW5kZXJlZFBvcykge1xuICAgICAgdmFyIG5vZGVzID0gY3kubm9kZXMoKTtcbiAgICAgIHZhciB4ID0gcmVuZGVyZWRQb3MueDtcbiAgICAgIHZhciB5ID0gcmVuZGVyZWRQb3MueTtcbiAgICAgIHZhciByZXN1bHROb2RlcyA9IFtdO1xuICAgICAgZm9yKHZhciBpID0gMDsgaSA8IG5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBub2RlID0gbm9kZXNbaV07XG4gICAgICAgIHZhciByZW5kZXJlZEJib3ggPSBub2RlLnJlbmRlcmVkQm91bmRpbmdCb3goe1xuICAgICAgICAgIGluY2x1ZGVOb2RlczogdHJ1ZSxcbiAgICAgICAgICBpbmNsdWRlRWRnZXM6IGZhbHNlLFxuICAgICAgICAgIGluY2x1ZGVMYWJlbHM6IGZhbHNlLFxuICAgICAgICAgIGluY2x1ZGVTaGFkb3dzOiBmYWxzZVxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKHggPj0gcmVuZGVyZWRCYm94LngxICYmIHggPD0gcmVuZGVyZWRCYm94LngyKSB7XG4gICAgICAgICAgaWYgKHkgPj0gcmVuZGVyZWRCYm94LnkxICYmIHkgPD0gcmVuZGVyZWRCYm94LnkyKSB7XG4gICAgICAgICAgICByZXN1bHROb2Rlcy5wdXNoKG5vZGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdE5vZGVzO1xuICAgIH07XG5cbiAgICBlbGVtZW50VXRpbGl0aWVzLmRlbXVsdGltZXJpemVDbGFzcyA9IGZ1bmN0aW9uKHNiZ25jbGFzcykge1xuICAgICAgcmV0dXJuIHNiZ25jbGFzcy5yZXBsYWNlKFwiIG11bHRpbWVyXCIsIFwiXCIpO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0gbWFwVHlwZSAtIHR5cGUgb2YgdGhlIGN1cnJlbnQgbWFwIChQRCwgQUYgb3IgVW5rbm93bilcbiAgICAgKi9cbiAgICBlbGVtZW50VXRpbGl0aWVzLnNldE1hcFR5cGUgPSBmdW5jdGlvbihtYXBUeXBlKXtcbiAgICAgIGVsZW1lbnRVdGlsaXRpZXMubWFwVHlwZSA9IG1hcFR5cGU7XG4gICAgICByZXR1cm4gbWFwVHlwZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiByZXR1cm4gLSBtYXAgdHlwZVxuICAgICAqL1xuICAgIGVsZW1lbnRVdGlsaXRpZXMuZ2V0TWFwVHlwZSA9IGZ1bmN0aW9uKCl7XG4gICAgICAgIHJldHVybiBlbGVtZW50VXRpbGl0aWVzLm1hcFR5cGU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJlc2V0cyBtYXAgdHlwZVxuICAgICAqL1xuICAgIGVsZW1lbnRVdGlsaXRpZXMucmVzZXRNYXBUeXBlID0gZnVuY3Rpb24oKXtcbiAgICAgICAgZWxlbWVudFV0aWxpdGllcy5tYXBUeXBlID0gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEtlZXAgY29uc2lzdGVuY3kgb2YgbGlua3MgdG8gc2VsZiBpbnNpZGUgdGhlIGRhdGEoKSBzdHJ1Y3R1cmUuXG4gICAgICogVGhpcyBpcyBuZWVkZWQgd2hlbmV2ZXIgYSBub2RlIGNoYW5nZXMgcGFyZW50cywgZm9yIGV4YW1wbGUsXG4gICAgICogYXMgaXQgaXMgZGVzdHJveWVkIGFuZCByZWNyZWF0ZWQuIEJ1dCB0aGUgZGF0YSgpIHN0YXlzIGlkZW50aWNhbC5cbiAgICAgKiBUaGlzIGNyZWF0ZXMgaW5jb25zaXN0ZW5jaWVzIGZvciB0aGUgcG9pbnRlcnMgc3RvcmVkIGluIGRhdGEoKSxcbiAgICAgKiBhcyB0aGV5IG5vdyBwb2ludCB0byBhIGRlbGV0ZWQgbm9kZS5cbiAgICAgKi9cbiAgICBlbGVtZW50VXRpbGl0aWVzLm1haW50YWluUG9pbnRlciA9IGZ1bmN0aW9uIChlbGVzKSB7XG4gICAgICBlbGVzLm5vZGVzKCkuZm9yRWFjaChmdW5jdGlvbihlbGUpe1xuICAgICAgICAvLyByZXN0b3JlIGJhY2tncm91bmQgaW1hZ2VzXG4gICAgICAgIGVsZS5lbWl0KCdkYXRhJyk7XG5cbiAgICAgICAgLy8gc2tpcCBub2RlcyB3aXRob3V0IGFueSBhdXhpbGlhcnkgdW5pdHNcbiAgICAgICAgaWYoIWVsZS5kYXRhKCdzdGF0ZXNhbmRpbmZvcycpIHx8IGVsZS5kYXRhKCdzdGF0ZXNhbmRpbmZvcycpLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGZvcih2YXIgc2lkZSBpbiBlbGUuZGF0YSgnYXV4dW5pdGxheW91dHMnKSkge1xuICAgICAgICAgIGVsZS5kYXRhKCdhdXh1bml0bGF5b3V0cycpW3NpZGVdLnBhcmVudE5vZGUgPSBlbGUuaWQoKTtcbiAgICAgICAgfVxuICAgICAgICBmb3IodmFyIGk9MDsgaSA8IGVsZS5kYXRhKCdzdGF0ZXNhbmRpbmZvcycpLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgZWxlLmRhdGEoJ3N0YXRlc2FuZGluZm9zJylbaV0ucGFyZW50ID0gZWxlLmlkKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGVsZW1lbnRVdGlsaXRpZXMuYW55SGFzQmFja2dyb3VuZEltYWdlID0gZnVuY3Rpb24gKGVsZXMpIHtcbiAgICAgIHZhciBvYmogPSBlbGVtZW50VXRpbGl0aWVzLmdldEJhY2tncm91bmRJbWFnZU9ianMoZWxlcyk7XG4gICAgICBpZihvYmogPT09IHVuZGVmaW5lZClcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgZWxzZXtcbiAgICAgICAgZm9yKHZhciBrZXkgaW4gb2JqKXtcbiAgICAgICAgICB2YXIgdmFsdWUgPSBvYmpba2V5XTtcbiAgICAgICAgICBpZih2YWx1ZSAmJiAhJC5pc0VtcHR5T2JqZWN0KHZhbHVlKSlcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBlbGVtZW50VXRpbGl0aWVzLmhhc0JhY2tncm91bmRJbWFnZSA9IGZ1bmN0aW9uIChlbGUpIHtcbiAgICAgIGlmICghZWxlLmlzTm9kZSgpIHx8ICFlbGUuZGF0YSgnYmFja2dyb3VuZC1pbWFnZScpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHZhciBiZztcbiAgICAgIFxuICAgICAgaWYodHlwZW9mIGVsZS5kYXRhKCdiYWNrZ3JvdW5kLWltYWdlJykgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgYmcgPSBlbGUuZGF0YSgnYmFja2dyb3VuZC1pbWFnZScpLnNwbGl0KFwiIFwiKTtcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYoQXJyYXkuaXNBcnJheShvYmpbJ2JhY2tncm91bmQtaW1hZ2UnXSkpIHtcbiAgICAgICAgYmcgPSBlbGUuZGF0YSgnYmFja2dyb3VuZC1pbWFnZScpO1xuICAgICAgfVxuXG4gICAgICBpZiAoIWJnKSByZXR1cm4gZmFsc2U7XG5cbiAgICAgIHZhciBjbG9uZUltZyA9ICdkYXRhOmltYWdlL3N2Zyt4bWw7dXRmOCwlM0NzdmclMjB3aWR0aCUzRCUyMjEwMCUyMiUyMGhlaWdodCUzRCUyMjEwMCUyMiUyMHZpZXdCb3glM0QlMjIwJTIwMCUyMDEwMCUyMDEwMCUyMiUyMHN0eWxlJTNEJTIyZmlsbCUzQW5vbmUlM0JzdHJva2UlM0FibGFjayUzQnN0cm9rZS13aWR0aCUzQTAlM0IlMjIlMjB4bWxucyUzRCUyMmh0dHAlM0EvL3d3dy53My5vcmcvMjAwMC9zdmclMjIlMjAlM0UlM0NyZWN0JTIweCUzRCUyMjAlMjIlMjB5JTNEJTIyMCUyMiUyMHdpZHRoJTNEJTIyMTAwJTIyJTIwaGVpZ2h0JTNEJTIyMTAwJTIyJTIwc3R5bGUlM0QlMjJmaWxsJTNBJTIzODM4MzgzJTIyLyUzRSUyMCUzQy9zdmclM0UnO1xuICAgICAgLy8gSWYgY2xvbmVJbWcgaXMgbm90IHRoZSBvbmx5IGltYWdlIG9yIHRoZXJlIGFyZSBtdWx0aXBsZSBpbWFnZXMgdGhlcmUgaXMgYSBiYWNrZ3JvdW5kIGltYWdlXG4gICAgICB2YXIgb25seUhhc0Nsb25lTWFya2VyQXNCZ0ltYWdlID0gKGJnLmxlbmd0aCA9PT0gMSkgJiYgKGJnLmluZGV4T2YoY2xvbmVJbWcpID09PSAwKTtcblxuICAgICAgaWYoYmcubGVuZ3RoID4gMSB8fCAhKG9ubHlIYXNDbG9uZU1hcmtlckFzQmdJbWFnZSkpXG4gICAgICAgIHJldHVybiB0cnVlO1xuXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgZWxlbWVudFV0aWxpdGllcy5nZXRCYWNrZ3JvdW5kSW1hZ2VVUkwgPSBmdW5jdGlvbiAoZWxlcykge1xuICAgICAgaWYoIWVsZXMgfHwgZWxlcy5sZW5ndGggPCAxKVxuICAgICAgICByZXR1cm47XG5cbiAgICAgIHZhciBjb21tb25VUkwgPSBcIlwiO1xuICAgICAgZm9yKHZhciBpID0gMDsgaSA8IGVsZXMubGVuZ3RoOyBpKyspe1xuICAgICAgICB2YXIgZWxlID0gZWxlc1tpXTtcblxuICAgICAgICBpZighZWxlLmlzTm9kZSgpIHx8ICFlbGVtZW50VXRpbGl0aWVzLmhhc0JhY2tncm91bmRJbWFnZShlbGUpKVxuICAgICAgICAgIHJldHVybjtcblxuICAgICAgICB2YXIgdXJsID0gZWxlLmRhdGEoJ2JhY2tncm91bmQtaW1hZ2UnKS5zcGxpdChcIiBcIikucG9wKCk7XG4gICAgICAgIGlmKCF1cmwgfHwgdXJsLmluZGV4T2YoJ2h0dHAnKSAhPT0gMCB8fCAoY29tbW9uVVJMICE9PSBcIlwiICYmIGNvbW1vblVSTCAhPT0gdXJsKSlcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIGVsc2UgaWYoY29tbW9uVVJMID09PSBcIlwiKVxuICAgICAgICAgIGNvbW1vblVSTCA9IHVybDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNvbW1vblVSTDtcbiAgICB9XG5cbiAgICBlbGVtZW50VXRpbGl0aWVzLmdldEJhY2tncm91bmRJbWFnZU9ianMgPSBmdW5jdGlvbiAoZWxlcykge1xuICAgICAgaWYoIWVsZXMgfHwgZWxlcy5sZW5ndGggPCAxKVxuICAgICAgICByZXR1cm47XG5cbiAgICAgIHZhciBsaXN0ID0ge307XG4gICAgICBmb3IodmFyIGkgPSAwOyBpIDwgZWxlcy5sZW5ndGg7IGkrKyl7XG4gICAgICAgIHZhciBlbGUgPSBlbGVzW2ldO1xuICAgICAgICB2YXIgb2JqID0gZ2V0QmdPYmooZWxlKTtcbiAgICAgICAgaWYoT2JqZWN0LmtleXMob2JqKS5sZW5ndGggPCAxKVxuICAgICAgICAgIHJldHVybjtcblxuICAgICAgICBsaXN0W2VsZS5kYXRhKCdpZCcpXSA9IG9iajtcbiAgICAgIH1cbiAgICAgIHJldHVybiBsaXN0O1xuXG4gICAgICBmdW5jdGlvbiBnZXRCZ09iaiAoZWxlKSB7XG4gICAgICAgIGlmKGVsZS5pc05vZGUoKSAmJiBlbGVtZW50VXRpbGl0aWVzLmhhc0JhY2tncm91bmRJbWFnZShlbGUpKXtcbiAgICAgICAgICB2YXIga2V5cyA9IFsnYmFja2dyb3VuZC1pbWFnZScsICdiYWNrZ3JvdW5kLWZpdCcsICdiYWNrZ3JvdW5kLWltYWdlLW9wYWNpdHknLFxuICAgICAgICAgICdiYWNrZ3JvdW5kLXBvc2l0aW9uLXgnLCAnYmFja2dyb3VuZC1wb3NpdGlvbi15JywgJ2JhY2tncm91bmQtaGVpZ2h0JywgJ2JhY2tncm91bmQtd2lkdGgnXTtcblxuICAgICAgICAgIHZhciBvYmogPSB7fTtcbiAgICAgICAgICBrZXlzLmZvckVhY2goZnVuY3Rpb24oa2V5KSB7XG4gICAgICAgICAgICB2YXIgdmFsdWU7XG4gICAgICAgICAgICBpZiAoZWxlLmRhdGEoa2V5KSAmJiAodHlwZW9mIGVsZS5kYXRhKGtleSkgPT09IFwic3RyaW5nXCIpKSB7XG4gICAgICAgICAgICAgIHZhbHVlID0gZWxlLmRhdGEoa2V5KS5zcGxpdChcIiBcIilbMF07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgdmFsdWUgPSBlbGUuZGF0YShrZXkpO1xuICAgICAgICAgICAgfSAgICAgICAgICAgXG4gICAgICAgICAgICBvYmpba2V5XSA9IHZhbHVlO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgcmV0dXJuIG9iajtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmKGVsZS5pc05vZGUoKSlcbiAgICAgICAgICByZXR1cm4ge307XG4gICAgICB9XG4gICAgfVxuXG4gICAgZWxlbWVudFV0aWxpdGllcy5nZXRCYWNrZ3JvdW5kRml0T3B0aW9ucyA9IGZ1bmN0aW9uIChlbGVzKSB7XG4gICAgICBpZighZWxlcyB8fCBlbGVzLmxlbmd0aCA8IDEpXG4gICAgICAgIHJldHVybjtcblxuICAgICAgdmFyIGNvbW1vbkZpdCA9IFwiXCI7XG4gICAgICBmb3IodmFyIGkgPSAwOyBpIDwgZWxlcy5sZW5ndGg7IGkrKyl7XG4gICAgICAgIHZhciBub2RlID0gZWxlc1tpXTtcbiAgICAgICAgaWYoIW5vZGUuaXNOb2RlKCkpXG4gICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgIHZhciBmaXQgPSBnZXRGaXRPcHRpb24obm9kZSk7XG4gICAgICAgIGlmKCFmaXQgfHwgKGNvbW1vbkZpdCAhPT0gXCJcIiAmJiBmaXQgIT09IGNvbW1vbkZpdCkpXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICBlbHNlIGlmKGNvbW1vbkZpdCA9PT0gXCJcIilcbiAgICAgICAgICBjb21tb25GaXQgPSBmaXQ7XG4gICAgICB9XG5cbiAgICAgIHZhciBvcHRpb25zID0gJzxvcHRpb24gdmFsdWU9XCJub25lXCI+Tm9uZTwvb3B0aW9uPidcbiAgICAgICAgICAgICAgICAgICsgJzxvcHRpb24gdmFsdWU9XCJmaXRcIj5GaXQ8L29wdGlvbj4nXG4gICAgICAgICAgICAgICAgICArICc8b3B0aW9uIHZhbHVlPVwiY292ZXJcIj5Db3Zlcjwvb3B0aW9uPidcbiAgICAgICAgICAgICAgICAgICsgJzxvcHRpb24gdmFsdWU9XCJjb250YWluXCI+Q29udGFpbjwvb3B0aW9uPic7XG4gICAgICB2YXIgc2VhcmNoS2V5ID0gJ3ZhbHVlPVwiJyArIGNvbW1vbkZpdCArICdcIic7XG4gICAgICB2YXIgaW5kZXggPSBvcHRpb25zLmluZGV4T2Yoc2VhcmNoS2V5KSArIHNlYXJjaEtleS5sZW5ndGg7XG4gICAgICByZXR1cm4gb3B0aW9ucy5zdWJzdHIoMCwgaW5kZXgpICsgJyBzZWxlY3RlZCcgKyBvcHRpb25zLnN1YnN0cihpbmRleCk7XG5cbiAgICAgIGZ1bmN0aW9uIGdldEZpdE9wdGlvbihub2RlKSB7XG4gICAgICAgIGlmKCFlbGVtZW50VXRpbGl0aWVzLmhhc0JhY2tncm91bmRJbWFnZShub2RlKSlcbiAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgdmFyIGYgPSBub2RlLmRhdGEoJ2JhY2tncm91bmQtZml0Jyk7XG4gICAgICAgIHZhciBoID0gbm9kZS5kYXRhKCdiYWNrZ3JvdW5kLWhlaWdodCcpO1xuXG4gICAgICAgIGlmKCFmIHx8ICFoKVxuICAgICAgICAgIHJldHVybjtcblxuICAgICAgICBmID0gZi5zcGxpdChcIiBcIik7XG4gICAgICAgIGggPSBoLnNwbGl0KFwiIFwiKTtcbiAgICAgICAgaWYoZltmLmxlbmd0aC0xXSA9PT0gXCJub25lXCIpXG4gICAgICAgICAgcmV0dXJuIChoW2gubGVuZ3RoLTFdID09PSBcImF1dG9cIiA/IFwibm9uZVwiIDogXCJmaXRcIik7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICByZXR1cm4gZltmLmxlbmd0aC0xXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBlbGVtZW50VXRpbGl0aWVzLnVwZGF0ZUJhY2tncm91bmRJbWFnZSA9IGZ1bmN0aW9uIChub2RlcywgYmdPYmopIHtcbiAgICAgIGlmKCFub2RlcyB8fCBub2Rlcy5sZW5ndGggPT0gMCB8fCAhYmdPYmopXG4gICAgICAgIHJldHVybjtcblxuICAgICAgZm9yKHZhciBpID0gMDsgaSA8IG5vZGVzLmxlbmd0aDsgaSsrKXtcbiAgICAgICAgdmFyIG5vZGUgPSBub2Rlc1tpXTtcbiAgICAgICAgdmFyIG9iaiA9IGJnT2JqW25vZGUuZGF0YSgnaWQnKV07XG4gICAgICAgIGlmKCFvYmogfHwgJC5pc0VtcHR5T2JqZWN0KG9iaikpXG4gICAgICAgICAgY29udGludWU7XG5cbiAgICAgICAgdmFyIGltZ3MgPSBub2RlLmRhdGEoJ2JhY2tncm91bmQtaW1hZ2UnKSA/IG5vZGUuZGF0YSgnYmFja2dyb3VuZC1pbWFnZScpLnNwbGl0KFwiIFwiKSA6IFtdO1xuICAgICAgICB2YXIgeFBvcyA9IG5vZGUuZGF0YSgnYmFja2dyb3VuZC1wb3NpdGlvbi14JykgPyBub2RlLmRhdGEoJ2JhY2tncm91bmQtcG9zaXRpb24teCcpLnNwbGl0KFwiIFwiKSA6IFtdO1xuICAgICAgICB2YXIgeVBvcyA9IG5vZGUuZGF0YSgnYmFja2dyb3VuZC1wb3NpdGlvbi15JykgPyBub2RlLmRhdGEoJ2JhY2tncm91bmQtcG9zaXRpb24teScpLnNwbGl0KFwiIFwiKSA6IFtdO1xuICAgICAgICB2YXIgd2lkdGhzID0gbm9kZS5kYXRhKCdiYWNrZ3JvdW5kLXdpZHRoJykgPyBub2RlLmRhdGEoJ2JhY2tncm91bmQtd2lkdGgnKS5zcGxpdChcIiBcIikgOiBbXTtcbiAgICAgICAgdmFyIGhlaWdodHMgPSBub2RlLmRhdGEoJ2JhY2tncm91bmQtaGVpZ2h0JykgPyBub2RlLmRhdGEoJ2JhY2tncm91bmQtaGVpZ2h0Jykuc3BsaXQoXCIgXCIpIDogW107XG4gICAgICAgIHZhciBmaXRzID0gbm9kZS5kYXRhKCdiYWNrZ3JvdW5kLWZpdCcpID8gbm9kZS5kYXRhKCdiYWNrZ3JvdW5kLWZpdCcpLnNwbGl0KFwiIFwiKSA6IFtdO1xuICAgICAgICB2YXIgb3BhY2l0aWVzID0gbm9kZS5kYXRhKCdiYWNrZ3JvdW5kLWltYWdlLW9wYWNpdHknKSA/IChcIlwiICsgbm9kZS5kYXRhKCdiYWNrZ3JvdW5kLWltYWdlLW9wYWNpdHknKSkuc3BsaXQoXCIgXCIpIDogW107XG5cbiAgICAgICAgdmFyIGluZGV4ID0gLTE7XG4gICAgICAgIGlmKHR5cGVvZiBvYmpbJ2JhY2tncm91bmQtaW1hZ2UnXSA9PT0gXCJzdHJpbmdcIilcbiAgICAgICAgICBpbmRleCA9IGltZ3MuaW5kZXhPZihvYmpbJ2JhY2tncm91bmQtaW1hZ2UnXSk7XG4gICAgICAgIGVsc2UgaWYoQXJyYXkuaXNBcnJheShvYmpbJ2JhY2tncm91bmQtaW1hZ2UnXSkpXG4gICAgICAgICAgaW5kZXggPSBpbWdzLmluZGV4T2Yob2JqWydiYWNrZ3JvdW5kLWltYWdlJ11bMF0pO1xuXG4gICAgICAgIGlmKGluZGV4IDwgMClcbiAgICAgICAgICBjb250aW51ZTtcblxuICAgICAgICBpZihvYmpbJ2JhY2tncm91bmQtaW1hZ2UnXSAmJiBpbWdzLmxlbmd0aCA+IGluZGV4KXtcbiAgICAgICAgICB2YXIgdG1wID0gaW1nc1tpbmRleF07XG4gICAgICAgICAgaW1nc1tpbmRleF0gPSBvYmpbJ2JhY2tncm91bmQtaW1hZ2UnXTtcbiAgICAgICAgICBvYmpbJ2JhY2tncm91bmQtaW1hZ2UnXSA9IHRtcDtcbiAgICAgICAgfVxuICAgICAgICBpZihvYmpbJ2JhY2tncm91bmQtZml0J10gJiYgZml0cy5sZW5ndGggPiBpbmRleCl7XG4gICAgICAgICAgdmFyIHRtcCA9IGZpdHNbaW5kZXhdO1xuICAgICAgICAgIGZpdHNbaW5kZXhdID0gb2JqWydiYWNrZ3JvdW5kLWZpdCddO1xuICAgICAgICAgIG9ialsnYmFja2dyb3VuZC1maXQnXSA9IHRtcDtcbiAgICAgICAgfVxuICAgICAgICBpZihvYmpbJ2JhY2tncm91bmQtd2lkdGgnXSAmJiB3aWR0aHMubGVuZ3RoID4gaW5kZXgpe1xuICAgICAgICAgIHZhciB0bXAgPSB3aWR0aHNbaW5kZXhdO1xuICAgICAgICAgIHdpZHRoc1tpbmRleF0gPSBvYmpbJ2JhY2tncm91bmQtd2lkdGgnXTtcbiAgICAgICAgICBvYmpbJ2JhY2tncm91bmQtd2lkdGgnXSA9IHRtcDtcbiAgICAgICAgfVxuICAgICAgICBpZihvYmpbJ2JhY2tncm91bmQtaGVpZ2h0J10gJiYgaGVpZ2h0cy5sZW5ndGggPiBpbmRleCl7XG4gICAgICAgICAgdmFyIHRtcCA9IGhlaWdodHNbaW5kZXhdO1xuICAgICAgICAgIGhlaWdodHNbaW5kZXhdID0gb2JqWydiYWNrZ3JvdW5kLWhlaWdodCddO1xuICAgICAgICAgIG9ialsnYmFja2dyb3VuZC1oZWlnaHQnXSA9IHRtcDtcbiAgICAgICAgfVxuICAgICAgICBpZihvYmpbJ2JhY2tncm91bmQtcG9zaXRpb24teCddICYmIHhQb3MubGVuZ3RoID4gaW5kZXgpe1xuICAgICAgICAgIHZhciB0bXAgPSB4UG9zW2luZGV4XTtcbiAgICAgICAgICB4UG9zW2luZGV4XSA9IG9ialsnYmFja2dyb3VuZC1wb3NpdGlvbi14J107XG4gICAgICAgICAgb2JqWydiYWNrZ3JvdW5kLXBvc2l0aW9uLXgnXSA9IHRtcDtcbiAgICAgICAgfVxuICAgICAgICBpZihvYmpbJ2JhY2tncm91bmQtcG9zaXRpb24teSddICYmIHlQb3MubGVuZ3RoID4gaW5kZXgpe1xuICAgICAgICAgIHZhciB0bXAgPSB5UG9zW2luZGV4XTtcbiAgICAgICAgICB5UG9zW2luZGV4XSA9IG9ialsnYmFja2dyb3VuZC1wb3NpdGlvbi15J107XG4gICAgICAgICAgb2JqWydiYWNrZ3JvdW5kLXBvc2l0aW9uLXknXSA9IHRtcDtcbiAgICAgICAgfVxuICAgICAgICBpZihvYmpbJ2JhY2tncm91bmQtaW1hZ2Utb3BhY2l0eSddICYmIG9wYWNpdGllcy5sZW5ndGggPiBpbmRleCl7XG4gICAgICAgICAgdmFyIHRtcCA9IG9wYWNpdGllc1tpbmRleF07XG4gICAgICAgICAgb3BhY2l0aWVzW2luZGV4XSA9IG9ialsnYmFja2dyb3VuZC1pbWFnZS1vcGFjaXR5J107XG4gICAgICAgICAgb2JqWydiYWNrZ3JvdW5kLWltYWdlLW9wYWNpdHknXSA9IHRtcDtcbiAgICAgICAgfVxuXG4gICAgICAgIG5vZGUuZGF0YSgnYmFja2dyb3VuZC1pbWFnZScsIGltZ3Muam9pbihcIiBcIikpO1xuICAgICAgICBub2RlLmRhdGEoJ2JhY2tncm91bmQtcG9zaXRpb24teCcsIHhQb3Muam9pbihcIiBcIikpO1xuICAgICAgICBub2RlLmRhdGEoJ2JhY2tncm91bmQtcG9zaXRpb24teScsIHlQb3Muam9pbihcIiBcIikpO1xuICAgICAgICBub2RlLmRhdGEoJ2JhY2tncm91bmQtd2lkdGgnLCB3aWR0aHMuam9pbihcIiBcIikpO1xuICAgICAgICBub2RlLmRhdGEoJ2JhY2tncm91bmQtaGVpZ2h0JywgaGVpZ2h0cy5qb2luKFwiIFwiKSk7XG4gICAgICAgIG5vZGUuZGF0YSgnYmFja2dyb3VuZC1maXQnLCBmaXRzLmpvaW4oXCIgXCIpKTtcbiAgICAgICAgbm9kZS5kYXRhKCdiYWNrZ3JvdW5kLWltYWdlLW9wYWNpdHknLCBvcGFjaXRpZXMuam9pbihcIiBcIikpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYmdPYmo7XG4gICAgfVxuXG4gICAgZWxlbWVudFV0aWxpdGllcy5jaGFuZ2VCYWNrZ3JvdW5kSW1hZ2UgPSBmdW5jdGlvbiAobm9kZXMsIG9sZEltZywgbmV3SW1nLCBmaXJzdFRpbWUsIHVwZGF0ZUluZm8sIHByb21wdEludmFsaWRJbWFnZSwgdmFsaWRhdGVVUkwpIHtcbiAgICAgIGlmKCFub2RlcyB8fCBub2Rlcy5sZW5ndGggPT0gMCB8fCAhb2xkSW1nIHx8ICFuZXdJbWcpXG4gICAgICAgIHJldHVybjtcblxuICAgICAgZWxlbWVudFV0aWxpdGllcy5yZW1vdmVCYWNrZ3JvdW5kSW1hZ2Uobm9kZXMsIG9sZEltZyk7XG4gICAgICBmb3IodmFyIGtleSBpbiBuZXdJbWcpe1xuICAgICAgICBuZXdJbWdba2V5XVsnZmlyc3RUaW1lJ10gPSBmaXJzdFRpbWU7XG4gICAgICB9XG4gICAgICBlbGVtZW50VXRpbGl0aWVzLmFkZEJhY2tncm91bmRJbWFnZShub2RlcywgbmV3SW1nLCB1cGRhdGVJbmZvLCBwcm9tcHRJbnZhbGlkSW1hZ2UsIHZhbGlkYXRlVVJMKTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbm9kZXM6IG5vZGVzLFxuICAgICAgICBvbGRJbWc6IG5ld0ltZyxcbiAgICAgICAgbmV3SW1nOiBvbGRJbWcsXG4gICAgICAgIGZpcnN0VGltZTogZmFsc2UsXG4gICAgICAgIHByb21wdEludmFsaWRJbWFnZTogcHJvbXB0SW52YWxpZEltYWdlLFxuICAgICAgICB2YWxpZGF0ZVVSTDogdmFsaWRhdGVVUkxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gQWRkIGEgYmFja2dyb3VuZCBpbWFnZSB0byBnaXZlbiBub2Rlcy5cbiAgICBlbGVtZW50VXRpbGl0aWVzLmFkZEJhY2tncm91bmRJbWFnZSA9IGZ1bmN0aW9uIChub2RlcywgYmdPYmosIHVwZGF0ZUluZm8sIHByb21wdEludmFsaWRJbWFnZSwgdmFsaWRhdGVVUkwpIHtcbiAgICAgIGlmKCFub2RlcyB8fCBub2Rlcy5sZW5ndGggPT0gMCB8fCAhYmdPYmopXG4gICAgICAgIHJldHVybjtcblxuICAgICAgZm9yKHZhciBpID0gMDsgaSA8IG5vZGVzLmxlbmd0aDsgaSsrKXtcbiAgICAgICAgdmFyIG5vZGUgPSBub2Rlc1tpXTtcbiAgICAgICAgdmFyIG9iaiA9IGJnT2JqW25vZGUuZGF0YSgnaWQnKV07XG4gICAgICAgIGlmKCFvYmogfHwgJC5pc0VtcHR5T2JqZWN0KG9iaikpXG4gICAgICAgICAgY29udGludWU7XG5cbiAgICAgICAgLy8gTG9hZCB0aGUgaW1hZ2UgZnJvbSBsb2NhbCwgZWxzZSBqdXN0IHB1dCB0aGUgVVJMXG4gICAgICAgIGlmKG9ialsnZnJvbUZpbGUnXSlcbiAgICAgICAgbG9hZEJhY2tncm91bmRUaGVuQXBwbHkobm9kZSwgb2JqKTtcbiAgICAgICAgLy8gVmFsaWRpdHkgb2YgZ2l2ZW4gVVJMIHNob3VsZCBiZSBjaGVja2VkIGJlZm9yZSBhcHBseWluZyBpdFxuICAgICAgICBlbHNlIGlmKG9ialsnZmlyc3RUaW1lJ10pe1xuICAgICAgICAgIGlmKHR5cGVvZiB2YWxpZGF0ZVVSTCA9PT0gJ2Z1bmN0aW9uJylcbiAgICAgICAgICAgIHZhbGlkYXRlVVJMKG5vZGUsIG9iaiwgYXBwbHlCYWNrZ3JvdW5kLCBwcm9tcHRJbnZhbGlkSW1hZ2UpO1xuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIGNoZWNrR2l2ZW5VUkwobm9kZSwgb2JqKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgICAgYXBwbHlCYWNrZ3JvdW5kKG5vZGUsIG9iaik7XG4gICAgICB9XG5cbiAgICAgIGZ1bmN0aW9uIGxvYWRCYWNrZ3JvdW5kVGhlbkFwcGx5KG5vZGUsIGJnT2JqKSB7XG4gICAgICAgIHZhciByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xuICAgICAgICB2YXIgaW1nRmlsZSA9IGJnT2JqWydiYWNrZ3JvdW5kLWltYWdlJ107XG5cbiAgICAgICAgLy8gQ2hlY2sgd2hldGhlciBnaXZlbiBmaWxlIGlzIGFuIGltYWdlIGZpbGVcbiAgICAgICAgaWYoaW1nRmlsZS50eXBlLmluZGV4T2YoXCJpbWFnZVwiKSAhPT0gMCl7XG4gICAgICAgICAgaWYocHJvbXB0SW52YWxpZEltYWdlKVxuICAgICAgICAgICAgcHJvbXB0SW52YWxpZEltYWdlKFwiSW52YWxpZCBpbWFnZSBmaWxlIGlzIGdpdmVuIVwiKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICByZWFkZXIucmVhZEFzRGF0YVVSTChpbWdGaWxlKTtcblxuICAgICAgICByZWFkZXIub25sb2FkID0gZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICB2YXIgaW1nID0gcmVhZGVyLnJlc3VsdDtcbiAgICAgICAgICBpZihpbWcpe1xuICAgICAgICAgICAgYmdPYmpbJ2JhY2tncm91bmQtaW1hZ2UnXSA9IGltZztcbiAgICAgICAgICAgIGJnT2JqWydmcm9tRmlsZSddID0gZmFsc2U7XG4gICAgICAgICAgICBhcHBseUJhY2tncm91bmQobm9kZSwgYmdPYmopO1xuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNle1xuICAgICAgICAgICAgaWYocHJvbXB0SW52YWxpZEltYWdlKVxuICAgICAgICAgICAgICBwcm9tcHRJbnZhbGlkSW1hZ2UoXCJHaXZlbiBmaWxlIGNvdWxkIG5vdCBiZSByZWFkIVwiKTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIGZ1bmN0aW9uIGNoZWNrR2l2ZW5VUkwobm9kZSwgYmdPYmope1xuICAgICAgICB2YXIgdXJsID0gYmdPYmpbJ2JhY2tncm91bmQtaW1hZ2UnXTtcbiAgICAgICAgdmFyIGV4dGVuc2lvbiA9ICh1cmwuc3BsaXQoL1s/I10vKVswXSkuc3BsaXQoXCIuXCIpLnBvcCgpO1xuICAgICAgICB2YXIgdmFsaWRFeHRlbnNpb25zID0gW1wicG5nXCIsIFwic3ZnXCIsIFwianBnXCIsIFwianBlZ1wiXTtcblxuICAgICAgICBpZighdmFsaWRFeHRlbnNpb25zLmluY2x1ZGVzKGV4dGVuc2lvbikpe1xuICAgICAgICAgIGlmKHR5cGVvZiBwcm9tcHRJbnZhbGlkSW1hZ2UgPT09ICdmdW5jdGlvbicpXG4gICAgICAgICAgICBwcm9tcHRJbnZhbGlkSW1hZ2UoXCJJbnZhbGlkIFVSTCBpcyBnaXZlbiFcIik7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgJC5hamF4KHtcbiAgICAgICAgICB1cmw6IHVybCxcbiAgICAgICAgICB0eXBlOiAnR0VUJyxcbiAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbihyZXN1bHQsIHN0YXR1cywgeGhyKXtcbiAgICAgICAgICAgIGFwcGx5QmFja2dyb3VuZChub2RlLCBiZ09iaik7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBlcnJvcjogZnVuY3Rpb24oeGhyLCBzdGF0dXMsIGVycm9yKXtcbiAgICAgICAgICAgIGlmKHByb21wdEludmFsaWRJbWFnZSlcbiAgICAgICAgICAgICAgcHJvbXB0SW52YWxpZEltYWdlKFwiSW52YWxpZCBVUkwgaXMgZ2l2ZW4hXCIpO1xuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBmdW5jdGlvbiBhcHBseUJhY2tncm91bmQobm9kZSwgYmdPYmopIHtcblxuICAgICAgICBpZihlbGVtZW50VXRpbGl0aWVzLmhhc0JhY2tncm91bmRJbWFnZShub2RlKSlcbiAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgdmFyIGltZ3MgPSBub2RlLmRhdGEoJ2JhY2tncm91bmQtaW1hZ2UnKSA/IG5vZGUuZGF0YSgnYmFja2dyb3VuZC1pbWFnZScpLnNwbGl0KFwiIFwiKSA6IFtdO1xuICAgICAgICB2YXIgeFBvcyA9IG5vZGUuZGF0YSgnYmFja2dyb3VuZC1wb3NpdGlvbi14JykgPyBub2RlLmRhdGEoJ2JhY2tncm91bmQtcG9zaXRpb24teCcpLnNwbGl0KFwiIFwiKSA6IFtdO1xuICAgICAgICB2YXIgeVBvcyA9IG5vZGUuZGF0YSgnYmFja2dyb3VuZC1wb3NpdGlvbi15JykgPyBub2RlLmRhdGEoJ2JhY2tncm91bmQtcG9zaXRpb24teScpLnNwbGl0KFwiIFwiKSA6IFtdO1xuICAgICAgICB2YXIgd2lkdGhzID0gbm9kZS5kYXRhKCdiYWNrZ3JvdW5kLXdpZHRoJykgPyBub2RlLmRhdGEoJ2JhY2tncm91bmQtd2lkdGgnKS5zcGxpdChcIiBcIikgOiBbXTtcbiAgICAgICAgdmFyIGhlaWdodHMgPSBub2RlLmRhdGEoJ2JhY2tncm91bmQtaGVpZ2h0JykgPyBub2RlLmRhdGEoJ2JhY2tncm91bmQtaGVpZ2h0Jykuc3BsaXQoXCIgXCIpIDogW107XG4gICAgICAgIHZhciBmaXRzID0gbm9kZS5kYXRhKCdiYWNrZ3JvdW5kLWZpdCcpID8gbm9kZS5kYXRhKCdiYWNrZ3JvdW5kLWZpdCcpLnNwbGl0KFwiIFwiKSA6IFtdO1xuICAgICAgICB2YXIgb3BhY2l0aWVzID0gbm9kZS5kYXRhKCdiYWNrZ3JvdW5kLWltYWdlLW9wYWNpdHknKSA/IChcIlwiICsgbm9kZS5kYXRhKCdiYWNrZ3JvdW5kLWltYWdlLW9wYWNpdHknKSkuc3BsaXQoXCIgXCIpIDogW107XG5cbiAgICAgICAgdmFyIGluZGV4VG9JbnNlcnQgPSBpbWdzLmxlbmd0aDtcblxuICAgICAgICAvLyBpbnNlcnQgdG8gbGVuZ3RoLTFcbiAgICAgICAgaWYoZWxlbWVudFV0aWxpdGllcy5oYXNDbG9uZU1hcmtlcihpbWdzKSl7XG4gICAgICAgICAgaW5kZXhUb0luc2VydC0tO1xuICAgICAgICB9XG5cbiAgICAgICAgaW1ncy5zcGxpY2UoaW5kZXhUb0luc2VydCwgMCwgYmdPYmpbJ2JhY2tncm91bmQtaW1hZ2UnXSk7XG4gICAgICAgIGZpdHMuc3BsaWNlKGluZGV4VG9JbnNlcnQsIDAsIGJnT2JqWydiYWNrZ3JvdW5kLWZpdCddKTtcbiAgICAgICAgb3BhY2l0aWVzLnNwbGljZShpbmRleFRvSW5zZXJ0LCAwLCBiZ09ialsnYmFja2dyb3VuZC1pbWFnZS1vcGFjaXR5J10pO1xuICAgICAgICB4UG9zLnNwbGljZShpbmRleFRvSW5zZXJ0LCAwLCBiZ09ialsnYmFja2dyb3VuZC1wb3NpdGlvbi14J10pO1xuICAgICAgICB5UG9zLnNwbGljZShpbmRleFRvSW5zZXJ0LCAwLCBiZ09ialsnYmFja2dyb3VuZC1wb3NpdGlvbi15J10pO1xuICAgICAgICB3aWR0aHMuc3BsaWNlKGluZGV4VG9JbnNlcnQsIDAsIGJnT2JqWydiYWNrZ3JvdW5kLXdpZHRoJ10pO1xuICAgICAgICBoZWlnaHRzLnNwbGljZShpbmRleFRvSW5zZXJ0LCAwLCBiZ09ialsnYmFja2dyb3VuZC1oZWlnaHQnXSk7XG5cbiAgICAgICAgbm9kZS5kYXRhKCdiYWNrZ3JvdW5kLWltYWdlJywgaW1ncy5qb2luKFwiIFwiKSk7XG4gICAgICAgIG5vZGUuZGF0YSgnYmFja2dyb3VuZC1wb3NpdGlvbi14JywgeFBvcy5qb2luKFwiIFwiKSk7XG4gICAgICAgIG5vZGUuZGF0YSgnYmFja2dyb3VuZC1wb3NpdGlvbi15JywgeVBvcy5qb2luKFwiIFwiKSk7XG4gICAgICAgIG5vZGUuZGF0YSgnYmFja2dyb3VuZC13aWR0aCcsIHdpZHRocy5qb2luKFwiIFwiKSk7XG4gICAgICAgIG5vZGUuZGF0YSgnYmFja2dyb3VuZC1oZWlnaHQnLCBoZWlnaHRzLmpvaW4oXCIgXCIpKTtcbiAgICAgICAgbm9kZS5kYXRhKCdiYWNrZ3JvdW5kLWZpdCcsIGZpdHMuam9pbihcIiBcIikpO1xuICAgICAgICBub2RlLmRhdGEoJ2JhY2tncm91bmQtaW1hZ2Utb3BhY2l0eScsIG9wYWNpdGllcy5qb2luKFwiIFwiKSk7XG4gICAgICAgIGJnT2JqWydmaXJzdFRpbWUnXSA9IGZhbHNlO1xuXG4gICAgICAgIGlmKHVwZGF0ZUluZm8pXG4gICAgICAgICAgdXBkYXRlSW5mbygpO1xuXG4gICAgICB9XG4gICAgfTtcblxuICAgIGVsZW1lbnRVdGlsaXRpZXMuaGFzQ2xvbmVNYXJrZXIgPSBmdW5jdGlvbiAoaW1ncykge1xuICAgICAgdmFyIGNsb25lSW1nID0gJ2RhdGE6aW1hZ2Uvc3ZnK3htbDt1dGY4LCUzQ3N2ZyUyMHdpZHRoJTNEJTIyMTAwJTIyJTIwaGVpZ2h0JTNEJTIyMTAwJTIyJTIwdmlld0JveCUzRCUyMjAlMjAwJTIwMTAwJTIwMTAwJTIyJTIwc3R5bGUlM0QlMjJmaWxsJTNBbm9uZSUzQnN0cm9rZSUzQWJsYWNrJTNCc3Ryb2tlLXdpZHRoJTNBMCUzQiUyMiUyMHhtbG5zJTNEJTIyaHR0cCUzQS8vd3d3LnczLm9yZy8yMDAwL3N2ZyUyMiUyMCUzRSUzQ3JlY3QlMjB4JTNEJTIyMCUyMiUyMHklM0QlMjIwJTIyJTIwd2lkdGglM0QlMjIxMDAlMjIlMjBoZWlnaHQlM0QlMjIxMDAlMjIlMjBzdHlsZSUzRCUyMmZpbGwlM0ElMjM4MzgzODMlMjIvJTNFJTIwJTNDL3N2ZyUzRSc7XG4gICAgICByZXR1cm4gKGltZ3MuaW5kZXhPZihjbG9uZUltZykgPiAtMSk7XG4gICAgfTtcblxuICAgIC8vIFJlbW92ZSBhIGJhY2tncm91bmQgaW1hZ2UgZnJvbSBnaXZlbiBub2Rlcy5cbiAgICBlbGVtZW50VXRpbGl0aWVzLnJlbW92ZUJhY2tncm91bmRJbWFnZSA9IGZ1bmN0aW9uIChub2RlcywgYmdPYmopIHtcbiAgICAgIGlmKCFub2RlcyB8fCBub2Rlcy5sZW5ndGggPT0gMCB8fCAhYmdPYmopXG4gICAgICAgIHJldHVybjtcblxuICAgICAgZm9yKHZhciBpID0gMDsgaSA8IG5vZGVzLmxlbmd0aDsgaSsrKXtcbiAgICAgICAgdmFyIG5vZGUgPSBub2Rlc1tpXTtcbiAgICAgICAgdmFyIG9iaiA9IGJnT2JqW25vZGUuZGF0YSgnaWQnKV07XG4gICAgICAgIGlmKCFvYmopXG4gICAgICAgICAgY29udGludWU7XG5cbiAgICAgICAgdmFyIGltZ3MgPSBub2RlLmRhdGEoJ2JhY2tncm91bmQtaW1hZ2UnKSA/IG5vZGUuZGF0YSgnYmFja2dyb3VuZC1pbWFnZScpLnNwbGl0KFwiIFwiKSA6IFtdO1xuICAgICAgICB2YXIgeFBvcyA9IG5vZGUuZGF0YSgnYmFja2dyb3VuZC1wb3NpdGlvbi14JykgPyBub2RlLmRhdGEoJ2JhY2tncm91bmQtcG9zaXRpb24teCcpLnNwbGl0KFwiIFwiKSA6IFtdO1xuICAgICAgICB2YXIgeVBvcyA9IG5vZGUuZGF0YSgnYmFja2dyb3VuZC1wb3NpdGlvbi15JykgPyBub2RlLmRhdGEoJ2JhY2tncm91bmQtcG9zaXRpb24teScpLnNwbGl0KFwiIFwiKSA6IFtdO1xuICAgICAgICB2YXIgd2lkdGhzID0gbm9kZS5kYXRhKCdiYWNrZ3JvdW5kLXdpZHRoJykgPyBub2RlLmRhdGEoJ2JhY2tncm91bmQtd2lkdGgnKS5zcGxpdChcIiBcIikgOiBbXTtcbiAgICAgICAgdmFyIGhlaWdodHMgPSBub2RlLmRhdGEoJ2JhY2tncm91bmQtaGVpZ2h0JykgPyBub2RlLmRhdGEoJ2JhY2tncm91bmQtaGVpZ2h0Jykuc3BsaXQoXCIgXCIpIDogW107XG4gICAgICAgIHZhciBmaXRzID0gbm9kZS5kYXRhKCdiYWNrZ3JvdW5kLWZpdCcpID8gbm9kZS5kYXRhKCdiYWNrZ3JvdW5kLWZpdCcpLnNwbGl0KFwiIFwiKSA6IFtdO1xuICAgICAgICB2YXIgb3BhY2l0aWVzID0gbm9kZS5kYXRhKCdiYWNrZ3JvdW5kLWltYWdlLW9wYWNpdHknKSA/IChcIlwiICsgbm9kZS5kYXRhKCdiYWNrZ3JvdW5kLWltYWdlLW9wYWNpdHknKSkuc3BsaXQoXCIgXCIpIDogW107XG5cbiAgICAgICAgdmFyIGluZGV4ID0gLTE7XG4gICAgICAgIGlmKHR5cGVvZiBvYmpbJ2JhY2tncm91bmQtaW1hZ2UnXSA9PT0gXCJzdHJpbmdcIilcbiAgICAgICAgICBpbmRleCA9IGltZ3MuaW5kZXhPZihvYmpbJ2JhY2tncm91bmQtaW1hZ2UnXS5zcGxpdChcIiBcIilbMF0pO1xuICAgICAgICBlbHNlIGlmKEFycmF5LmlzQXJyYXkob2JqWydiYWNrZ3JvdW5kLWltYWdlJ10pKVxuICAgICAgICAgIGluZGV4ID0gaW1ncy5pbmRleE9mKG9ialsnYmFja2dyb3VuZC1pbWFnZSddWzBdKTtcblxuICAgICAgICBpZihpbmRleCA+IC0xKXtcbiAgICAgICAgICBpbWdzLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgICAgZml0cy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICAgIG9wYWNpdGllcy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICAgIHhQb3Muc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgICB5UG9zLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgICAgd2lkdGhzLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgICAgaGVpZ2h0cy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICB9XG5cbiAgICAgICAgbm9kZS5kYXRhKCdiYWNrZ3JvdW5kLWltYWdlJywgaW1ncy5qb2luKFwiIFwiKSk7XG4gICAgICAgIG5vZGUuZGF0YSgnYmFja2dyb3VuZC1wb3NpdGlvbi14JywgeFBvcy5qb2luKFwiIFwiKSk7XG4gICAgICAgIG5vZGUuZGF0YSgnYmFja2dyb3VuZC1wb3NpdGlvbi15JywgeVBvcy5qb2luKFwiIFwiKSk7XG4gICAgICAgIG5vZGUuZGF0YSgnYmFja2dyb3VuZC13aWR0aCcsIHdpZHRocy5qb2luKFwiIFwiKSk7XG4gICAgICAgIG5vZGUuZGF0YSgnYmFja2dyb3VuZC1oZWlnaHQnLCBoZWlnaHRzLmpvaW4oXCIgXCIpKTtcbiAgICAgICAgbm9kZS5kYXRhKCdiYWNrZ3JvdW5kLWZpdCcsIGZpdHMuam9pbihcIiBcIikpO1xuICAgICAgICBub2RlLmRhdGEoJ2JhY2tncm91bmQtaW1hZ2Utb3BhY2l0eScsIG9wYWNpdGllcy5qb2luKFwiIFwiKSk7XG4gICAgICAgIGJnT2JqWydmaXJzdFRpbWUnXSA9IGZhbHNlO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBlbGVtZW50VXRpbGl0aWVzLnJldmVyc2VFZGdlID0gZnVuY3Rpb24oZWRnZSl7XG4gICAgICB2YXIgb2xkU291cmNlID0gZWRnZS5zb3VyY2UoKS5pZCgpO1xuICAgICAgdmFyIG9sZFRhcmdldCA9IGVkZ2UudGFyZ2V0KCkuaWQoKTtcbiAgICAgIHZhciBvbGRQb3J0U291cmNlID0gZWRnZS5kYXRhKFwicG9ydHNvdXJjZVwiKTtcbiAgICAgIHZhciBvbGRQb3J0VGFyZ2V0ID0gZWRnZS5kYXRhKFwicG9ydHRhcmdldFwiKTtcbiAgICAgIHZhciBzZWdtZW50UG9pbnRzID0gZWRnZS5zZWdtZW50UG9pbnRzKCk7XG4gICAgICB2YXIgY29udHJvbFBvaW50cyA9IGVkZ2UuY29udHJvbFBvaW50cygpO1xuXG4gICAgICBlZGdlLmRhdGEoKS5zb3VyY2UgPSBvbGRUYXJnZXQ7XG4gICAgICBlZGdlLmRhdGEoKS50YXJnZXQgPSBvbGRTb3VyY2U7XG4gICAgICBlZGdlLmRhdGEoKS5wb3J0c291cmNlID0gb2xkUG9ydFRhcmdldDtcbiAgICAgIGVkZ2UuZGF0YSgpLnBvcnR0YXJnZXQgPSBvbGRQb3J0U291cmNlO1xuICAgICAgIGVkZ2UgPSBlZGdlLm1vdmUoe1xuICAgICAgICAgdGFyZ2V0OiBvbGRTb3VyY2UsXG4gICAgICAgICBzb3VyY2UgOiBvbGRUYXJnZXQgICAgICAgIFxuICAgICAgfSk7XG5cbiAgICAgIGlmKEFycmF5LmlzQXJyYXkoc2VnbWVudFBvaW50cykpe1xuICAgICAgICBzZWdtZW50UG9pbnRzLnJldmVyc2UoKTtcbiAgICAgICAgZWRnZS5kYXRhKCkuYmVuZFBvaW50UG9zaXRpb25zID0gc2VnbWVudFBvaW50cztcbiAgICAgICAgaWYoQXJyYXkuaXNBcnJheShjb250cm9sUG9pbnRzKSkge1xuICAgICAgICAgIGNvbnRyb2xQb2ludHMucmV2ZXJzZSgpO1xuICAgICAgICAgIGVkZ2UuZGF0YSgpLmNvbnRyb2xQb2ludFBvc2l0aW9ucyA9IGNvbnRyb2xQb2ludHM7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGVkZ2VFZGl0aW5nID0gY3kuZWRnZUVkaXRpbmcoJ2dldCcpO1xuICAgICAgICBlZGdlRWRpdGluZy5pbml0QW5jaG9yUG9pbnRzKGVkZ2UpO1xuICAgICAgfVxuICAgIFxuXG4gICAgICByZXR1cm4gZWRnZTtcbiAgICB9XG5cbiAgfVxuXG4gIHJldHVybiBlbGVtZW50VXRpbGl0aWVzRXh0ZW5kZXI7XG59O1xuIiwiLyogXG4gKiBVdGlsaXR5IGZpbGUgdG8gZ2V0IGFuZCBzZXQgdGhlIGxpYnJhcmllcyB0byB3aGljaCBzYmdudml6IGlzIGRlcGVuZGVudCBmcm9tIGFueSBmaWxlLlxuICovXG5cbnZhciBsaWJVdGlsaXRpZXMgPSBmdW5jdGlvbigpe1xufTtcblxubGliVXRpbGl0aWVzLnNldExpYnMgPSBmdW5jdGlvbihsaWJzKSB7XG4gIHRoaXMubGlicyA9IGxpYnM7XG59O1xuXG5saWJVdGlsaXRpZXMuZ2V0TGlicyA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5saWJzO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBsaWJVdGlsaXRpZXM7IiwidmFyIGxpYnMgPSByZXF1aXJlKCcuL2xpYi11dGlsaXRpZXMnKS5nZXRMaWJzKCk7XG5cbi8qXG4gKiBUaGUgbWFpbiB1dGlsaXRpZXMgdG8gYmUgZXhwb3NlZCBkaXJlY3RseS5cbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG5cbiAgdmFyIGVsZW1lbnRVdGlsaXRpZXMsIG9wdGlvbnMsIGN5LCBzYmdudml6SW5zdGFuY2U7XG5cbiAgZnVuY3Rpb24gbWFpblV0aWxpdGllcyAocGFyYW0pIHtcbiAgICBlbGVtZW50VXRpbGl0aWVzID0gcGFyYW0uZWxlbWVudFV0aWxpdGllcztcbiAgICBvcHRpb25zID0gcGFyYW0ub3B0aW9uVXRpbGl0aWVzLmdldE9wdGlvbnMoKTtcbiAgICBjeSA9IHBhcmFtLnNiZ252aXpJbnN0YW5jZVV0aWxpdGllcy5nZXRDeSgpO1xuICAgIHNiZ252aXpJbnN0YW5jZSA9IHBhcmFtLnNiZ252aXpJbnN0YW5jZVV0aWxpdGllcy5nZXRJbnN0YW5jZSgpO1xuICB9O1xuXG4gIC8qXG4gICAqIEFkZHMgYSBuZXcgbm9kZSB3aXRoIHRoZSBnaXZlbiBjbGFzcyBhbmQgYXQgdGhlIGdpdmVuIGNvb3JkaW5hdGVzLiBDb25zaWRlcnMgdW5kb2FibGUgb3B0aW9uLlxuICAgKi9cbiAgbWFpblV0aWxpdGllcy5hZGROb2RlID0gZnVuY3Rpb24oeCwgeSAsIG5vZGVQYXJhbXMsIGlkLCBwYXJlbnQsIHZpc2liaWxpdHkpIHtcbiAgICBpZiAoIGVsZW1lbnRVdGlsaXRpZXMuaXNHcmFwaFRvcG9sb2d5TG9ja2VkKCkgKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gdXBkYXRlIG1hcCB0eXBlXG4gICAgaWYgKHR5cGVvZiBub2RlUGFyYW1zID09ICdvYmplY3QnKXtcbi8qIFxuICAgICAgaWYgKCFlbGVtZW50VXRpbGl0aWVzLmdldE1hcFR5cGUoKSlcbiAgICAgICAgZWxlbWVudFV0aWxpdGllcy5zZXRNYXBUeXBlKG5vZGVQYXJhbXMubGFuZ3VhZ2UpO1xuICAgICAgZWxzZSBpZiAoZWxlbWVudFV0aWxpdGllcy5nZXRNYXBUeXBlKCkgIT0gbm9kZVBhcmFtcy5sYW5ndWFnZSlcbiAgICAgICAgZWxlbWVudFV0aWxpdGllcy5zZXRNYXBUeXBlKFwiVW5rbm93blwiKTsgKi9cbiAgICB9XG5cbiAgICBpZiAoIW9wdGlvbnMudW5kb2FibGUpIHtcbiAgICAgIHJldHVybiBlbGVtZW50VXRpbGl0aWVzLmFkZE5vZGUoeCwgeSwgbm9kZVBhcmFtcywgaWQsIHBhcmVudCwgdmlzaWJpbGl0eSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgdmFyIHBhcmFtID0ge1xuICAgICAgICBuZXdOb2RlIDoge1xuICAgICAgICAgIHg6IHgsXG4gICAgICAgICAgeTogeSxcbiAgICAgICAgICBjbGFzczogbm9kZVBhcmFtcyxcbiAgICAgICAgICBpZDogaWQsXG4gICAgICAgICAgcGFyZW50OiBwYXJlbnQsXG4gICAgICAgICAgdmlzaWJpbGl0eTogdmlzaWJpbGl0eVxuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBjeS51bmRvUmVkbygpLmRvKFwiYWRkTm9kZVwiLCBwYXJhbSk7XG4gICAgfVxuICB9O1xuXG4gIC8qXG4gICAqIEFkZHMgYSBuZXcgZWRnZSB3aXRoIHRoZSBnaXZlbiBjbGFzcyBhbmQgaGF2aW5nIHRoZSBnaXZlbiBzb3VyY2UgYW5kIHRhcmdldCBpZHMuIENvbnNpZGVycyB1bmRvYWJsZSBvcHRpb24uXG4gICAqL1xuICBtYWluVXRpbGl0aWVzLmFkZEVkZ2UgPSBmdW5jdGlvbihzb3VyY2UsIHRhcmdldCwgZWRnZVBhcmFtcywgaW52YWxpZEVkZ2VDYWxsYmFjaywgaWQsIHZpc2liaWxpdHkpIHtcbiAgICBpZiAoIGVsZW1lbnRVdGlsaXRpZXMuaXNHcmFwaFRvcG9sb2d5TG9ja2VkKCkgKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gdXBkYXRlIG1hcCB0eXBlXG4gICAgaWYgKHR5cGVvZiBlZGdlUGFyYW1zID09ICdvYmplY3QnKXtcblxuICAgICAvKiAgaWYgKCFlbGVtZW50VXRpbGl0aWVzLmdldE1hcFR5cGUoKSlcbiAgICAgICAgZWxlbWVudFV0aWxpdGllcy5zZXRNYXBUeXBlKGVkZ2VQYXJhbXMubGFuZ3VhZ2UpO1xuICAgICAgZWxzZSBpZiAoZWxlbWVudFV0aWxpdGllcy5nZXRNYXBUeXBlKCkgIT0gZWRnZVBhcmFtcy5sYW5ndWFnZSlcbiAgICAgICAgZWxlbWVudFV0aWxpdGllcy5zZXRNYXBUeXBlKFwiSHlicmlkQW55XCIpOyAqL1xuICAgIH1cbiAgICAvLyBHZXQgdGhlIHZhbGlkYXRpb24gcmVzdWx0XG4gICAgdmFyIGVkZ2VjbGFzcyA9IGVkZ2VQYXJhbXMuY2xhc3MgPyBlZGdlUGFyYW1zLmNsYXNzIDogZWRnZVBhcmFtcztcbiAgICB2YXIgdmFsaWRhdGlvbiA9IGVsZW1lbnRVdGlsaXRpZXMudmFsaWRhdGVBcnJvd0VuZHMoZWRnZWNsYXNzLCBjeS5nZXRFbGVtZW50QnlJZChzb3VyY2UpLCBjeS5nZXRFbGVtZW50QnlJZCh0YXJnZXQpKTtcblxuICAgIC8vIElmIHZhbGlkYXRpb24gcmVzdWx0IGlzICdpbnZhbGlkJyBjYW5jZWwgdGhlIG9wZXJhdGlvblxuICAgIGlmICh2YWxpZGF0aW9uID09PSAnaW52YWxpZCcpIHtcbiAgICAgIGlmKHR5cGVvZiBpbnZhbGlkRWRnZUNhbGxiYWNrID09PSBcImZ1bmN0aW9uXCIpe1xuICAgICAgICBpbnZhbGlkRWRnZUNhbGxiYWNrKCk7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gSWYgdmFsaWRhdGlvbiByZXN1bHQgaXMgJ3JldmVyc2UnIHJldmVyc2UgdGhlIHNvdXJjZS10YXJnZXQgcGFpciBiZWZvcmUgY3JlYXRpbmcgdGhlIGVkZ2VcbiAgICBpZiAodmFsaWRhdGlvbiA9PT0gJ3JldmVyc2UnKSB7XG4gICAgICB2YXIgdGVtcCA9IHNvdXJjZTtcbiAgICAgIHNvdXJjZSA9IHRhcmdldDtcbiAgICAgIHRhcmdldCA9IHRlbXA7XG4gICAgfVxuXG4gICAgaWYgKCFvcHRpb25zLnVuZG9hYmxlKSB7XG4gICAgICByZXR1cm4gZWxlbWVudFV0aWxpdGllcy5hZGRFZGdlKHNvdXJjZSwgdGFyZ2V0LCBlZGdlUGFyYW1zLCBpZCwgdmlzaWJpbGl0eSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgdmFyIHBhcmFtID0ge1xuICAgICAgICBuZXdFZGdlIDoge1xuICAgICAgICAgIHNvdXJjZTogc291cmNlLFxuICAgICAgICAgIHRhcmdldDogdGFyZ2V0LFxuICAgICAgICAgIGNsYXNzOiBlZGdlUGFyYW1zLFxuICAgICAgICAgIGlkOiBpZCxcbiAgICAgICAgICB2aXNpYmlsaXR5OiB2aXNpYmlsaXR5XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIHZhciByZXN1bHQgPSBjeS51bmRvUmVkbygpLmRvKFwiYWRkRWRnZVwiLCBwYXJhbSk7XG4gICAgICByZXR1cm4gcmVzdWx0LmVsZXM7XG4gICAgfVxuICB9O1xuXG4gIC8qXG4gICAqIEFkZHMgYSBwcm9jZXNzIHdpdGggY29udmVuaWVudCBlZGdlcy4gRm9yIG1vcmUgaW5mb3JtYXRpb24gcGxlYXNlIHNlZSAnaHR0cHM6Ly9naXRodWIuY29tL2lWaXMtYXQtQmlsa2VudC9uZXd0L2lzc3Vlcy85Jy5cbiAgICogQ29uc2lkZXJzIHVuZG9hYmxlIG9wdGlvbi5cbiAgICovXG4gIG1haW5VdGlsaXRpZXMuYWRkUHJvY2Vzc1dpdGhDb252ZW5pZW50RWRnZXMgPSBmdW5jdGlvbihfc291cmNlLCBfdGFyZ2V0LCBwcm9jZXNzVHlwZSkge1xuICAgIGlmICggZWxlbWVudFV0aWxpdGllcy5pc0dyYXBoVG9wb2xvZ3lMb2NrZWQoKSApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBJZiBzb3VyY2UgYW5kIHRhcmdldCBJRHMgYXJlIGdpdmVuIGdldCB0aGUgZWxlbWVudHMgYnkgSURzXG4gICAgdmFyIHNvdXJjZSA9IHR5cGVvZiBfc291cmNlID09PSAnc3RyaW5nJyA/IGN5LmdldEVsZW1lbnRCeUlkKF9zb3VyY2UpIDogX3NvdXJjZTtcbiAgICB2YXIgdGFyZ2V0ID0gdHlwZW9mIF90YXJnZXQgPT09ICdzdHJpbmcnID8gY3kuZ2V0RWxlbWVudEJ5SWQoX3RhcmdldCkgOiBfdGFyZ2V0O1xuXG4gICAgLy8gSWYgc291cmNlIG9yIHRhcmdldCBkb2VzIG5vdCBoYXZlIGFuIEVQTiBjbGFzcyB0aGUgb3BlcmF0aW9uIGlzIG5vdCB2YWxpZFxuICAgIGlmICghZWxlbWVudFV0aWxpdGllcy5pc0VQTkNsYXNzKHNvdXJjZSkgfHwgIWVsZW1lbnRVdGlsaXRpZXMuaXNFUE5DbGFzcyh0YXJnZXQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCFvcHRpb25zLnVuZG9hYmxlKSB7XG4gICAgICByZXR1cm4gZWxlbWVudFV0aWxpdGllcy5hZGRQcm9jZXNzV2l0aENvbnZlbmllbnRFZGdlcyhfc291cmNlLCBfdGFyZ2V0LCBwcm9jZXNzVHlwZSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgdmFyIHBhcmFtID0ge1xuICAgICAgICBzb3VyY2U6IF9zb3VyY2UsXG4gICAgICAgIHRhcmdldDogX3RhcmdldCxcbiAgICAgICAgcHJvY2Vzc1R5cGU6IHByb2Nlc3NUeXBlXG4gICAgICB9O1xuXG4gICAgICBjeS51bmRvUmVkbygpLmRvKFwiYWRkUHJvY2Vzc1dpdGhDb252ZW5pZW50RWRnZXNcIiwgcGFyYW0pO1xuICAgIH1cbiAgfTtcblxuICAvLyBjb252ZXJ0IGNvbGxhcHNlZCBjb21wb3VuZCBub2RlcyB0byBzaW1wbGUgbm9kZXNcbiAgLy8gYW5kIHVwZGF0ZSBwb3J0IHZhbHVlcyBvZiBwYXN0ZWQgbm9kZXMgYW5kIGVkZ2VzXG4gIHZhciBjbG9uZUNvbGxhcHNlZE5vZGVzQW5kUG9ydHMgPSBmdW5jdGlvbiAoZWxlc0JlZm9yZSl7XG4gICAgaWYgKCBlbGVtZW50VXRpbGl0aWVzLmlzR3JhcGhUb3BvbG9neUxvY2tlZCgpICkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGN5LmVsZW1lbnRzKCkudW5zZWxlY3QoKTtcbiAgICB2YXIgZWxlc0FmdGVyID0gY3kuZWxlbWVudHMoKTtcbiAgICB2YXIgZWxlc0RpZmYgPSBlbGVzQWZ0ZXIuZGlmZihlbGVzQmVmb3JlKS5sZWZ0O1xuXG4gICAgLy8gc2hhbGxvdyBjb3B5IGNvbGxhcHNlZCBub2RlcyAtIGNvbGxhcHNlZCBjb21wb3VuZHMgYmVjb21lIHNpbXBsZSBub2Rlc1xuICAgIC8vIGRhdGEgcmVsYXRlZCB0byBjb2xsYXBzZWQgbm9kZXMgYXJlIHJlbW92ZWQgZnJvbSBnZW5lcmF0ZWQgY2xvbmVzXG4gICAgLy8gcmVsYXRlZCBpc3N1ZTogaHR0cHM6Ly9naXRodWIuY29tL2lWaXMtYXQtQmlsa2VudC9uZXd0L2lzc3Vlcy8xNDVcbiAgICB2YXIgY29sbGFwc2VkTm9kZXMgPSBlbGVzRGlmZi5maWx0ZXIoJ25vZGUuY3ktZXhwYW5kLWNvbGxhcHNlLWNvbGxhcHNlZC1ub2RlJyk7XG5cbiAgICBjb2xsYXBzZWROb2Rlcy5jb25uZWN0ZWRFZGdlcygpLnJlbW92ZSgpO1xuICAgIGNvbGxhcHNlZE5vZGVzLnJlbW92ZUNsYXNzKCdjeS1leHBhbmQtY29sbGFwc2UtY29sbGFwc2VkLW5vZGUnKTtcbiAgICBjb2xsYXBzZWROb2Rlcy5yZW1vdmVEYXRhKCdjb2xsYXBzZWRDaGlsZHJlbicpO1xuICAgIGNvbGxhcHNlZE5vZGVzLnJlbW92ZURhdGEoJ3Bvc2l0aW9uLWJlZm9yZS1jb2xsYXBzZSBzaXplLWJlZm9yZS1jb2xsYXBzZScpO1xuICAgIGNvbGxhcHNlZE5vZGVzLnJlbW92ZURhdGEoJ2V4cGFuZGNvbGxhcHNlUmVuZGVyZWRDdWVTaXplIGV4cGFuZGNvbGxhcHNlUmVuZGVyZWRTdGFydFggZXhwYW5kY29sbGFwc2VSZW5kZXJlZFN0YXJ0WScpO1xuXG4gICAgLy8gY2xvbmluZyBwb3J0c1xuICAgIGVsZXNEaWZmLm5vZGVzKCkuZm9yRWFjaChmdW5jdGlvbihfbm9kZSl7XG4gICAgICBpZihfbm9kZS5kYXRhKFwicG9ydHNcIikubGVuZ3RoID09IDIpe1xuICAgICAgICAgIHZhciBvbGRQb3J0TmFtZTAgPSBfbm9kZS5kYXRhKFwicG9ydHNcIilbMF0uaWQ7XG4gICAgICAgICAgdmFyIG9sZFBvcnROYW1lMSA9IF9ub2RlLmRhdGEoXCJwb3J0c1wiKVsxXS5pZDtcbiAgICAgICAgICBfbm9kZS5kYXRhKFwicG9ydHNcIilbMF0uaWQgPSBfbm9kZS5pZCgpICsgXCIuMVwiO1xuICAgICAgICAgIF9ub2RlLmRhdGEoXCJwb3J0c1wiKVsxXS5pZCA9IF9ub2RlLmlkKCkgKyBcIi4yXCI7XG5cbiAgICAgICAgICBfbm9kZS5vdXRnb2VycygpLmVkZ2VzKCkuZm9yRWFjaChmdW5jdGlvbihfZWRnZSl7XG4gICAgICAgICAgICBpZihfZWRnZS5kYXRhKFwicG9ydHNvdXJjZVwiKSA9PSBvbGRQb3J0TmFtZTApe1xuICAgICAgICAgICAgICBfZWRnZS5kYXRhKFwicG9ydHNvdXJjZVwiLCBfbm9kZS5kYXRhKFwicG9ydHNcIilbMF0uaWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZihfZWRnZS5kYXRhKFwicG9ydHNvdXJjZVwiKSA9PSBvbGRQb3J0TmFtZTEpe1xuICAgICAgICAgICAgICBfZWRnZS5kYXRhKFwicG9ydHNvdXJjZVwiLCBfbm9kZS5kYXRhKFwicG9ydHNcIilbMV0uaWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZXtcbiAgICAgICAgICAgICAgX2VkZ2UuZGF0YShcInBvcnRzb3VyY2VcIiwgX25vZGUuaWQoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgX25vZGUuaW5jb21lcnMoKS5lZGdlcygpLmZvckVhY2goZnVuY3Rpb24oX2VkZ2Upe1xuICAgICAgICAgICAgaWYoX2VkZ2UuZGF0YShcInBvcnR0YXJnZXRcIikgPT0gb2xkUG9ydE5hbWUwKXtcbiAgICAgICAgICAgICAgX2VkZ2UuZGF0YShcInBvcnR0YXJnZXRcIiwgX25vZGUuZGF0YShcInBvcnRzXCIpWzBdLmlkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYoX2VkZ2UuZGF0YShcInBvcnR0YXJnZXRcIikgPT0gb2xkUG9ydE5hbWUxKXtcbiAgICAgICAgICAgICAgX2VkZ2UuZGF0YShcInBvcnR0YXJnZXRcIiwgX25vZGUuZGF0YShcInBvcnRzXCIpWzFdLmlkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2V7XG4gICAgICAgICAgICAgIF9lZGdlLmRhdGEoXCJwb3J0dGFyZ2V0XCIsIF9ub2RlLmlkKCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgZWxzZXtcbiAgICAgICAgX25vZGUub3V0Z29lcnMoKS5lZGdlcygpLmZvckVhY2goZnVuY3Rpb24oX2VkZ2Upe1xuICAgICAgICAgIF9lZGdlLmRhdGEoXCJwb3J0c291cmNlXCIsIF9ub2RlLmlkKCkpO1xuICAgICAgICB9KTtcbiAgICAgICAgX25vZGUuaW5jb21lcnMoKS5lZGdlcygpLmZvckVhY2goZnVuY3Rpb24oX2VkZ2Upe1xuICAgICAgICAgIF9lZGdlLmRhdGEoXCJwb3J0dGFyZ2V0XCIsIF9ub2RlLmlkKCkpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBlbGVzRGlmZi5zZWxlY3QoKTtcbiAgfVxuXG4gIC8qXG4gICAqIENsb25lIGdpdmVuIGVsZW1lbnRzLiBDb25zaWRlcnMgdW5kb2FibGUgb3B0aW9uLiBSZXF1aXJlcyBjeXRvc2NhcGUtY2xpcGJvYXJkIGV4dGVuc2lvbi5cbiAgICovXG4gIG1haW5VdGlsaXRpZXMuY2xvbmVFbGVtZW50cyA9IGZ1bmN0aW9uIChlbGVzLCBwYXN0ZUF0TW91c2VMb2MpIHtcbiAgICBpZiAoIGVsZW1lbnRVdGlsaXRpZXMuaXNHcmFwaFRvcG9sb2d5TG9ja2VkKCkgKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGVsZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5jb3B5RWxlbWVudHMoZWxlcyk7XG5cbiAgICB0aGlzLnBhc3RlRWxlbWVudHMocGFzdGVBdE1vdXNlTG9jKTtcbiAgfTtcblxuICAvKlxuICAgKiBDb3B5IGdpdmVuIGVsZW1lbnRzIHRvIGNsaXBib2FyZC4gUmVxdWlyZXMgY3l0b3NjYXBlLWNsaXBib2FyZCBleHRlbnNpb24uXG4gICAqL1xuICBtYWluVXRpbGl0aWVzLmNvcHlFbGVtZW50cyA9IGZ1bmN0aW9uIChlbGVzKSB7XG4gICAgY3kuY2xpcGJvYXJkKCkuY29weShlbGVzKTtcbiAgfTtcblxuICAvKlxuICAgKiBQYXN0ZSB0aGUgZWxlbWVudHMgY29waWVkIHRvIGNsaXBib2FyZC4gQ29uc2lkZXJzIHVuZG9hYmxlIG9wdGlvbi4gUmVxdWlyZXMgY3l0b3NjYXBlLWNsaXBib2FyZCBleHRlbnNpb24uXG4gICAqL1xuICBtYWluVXRpbGl0aWVzLnBhc3RlRWxlbWVudHMgPSBmdW5jdGlvbihwYXN0ZUF0TW91c2VMb2MpIHtcbiAgICBpZiAoIGVsZW1lbnRVdGlsaXRpZXMuaXNHcmFwaFRvcG9sb2d5TG9ja2VkKCkgKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGVsZXNCZWZvcmUgPSBjeS5lbGVtZW50cygpO1xuXG4gICAgaWYgKG9wdGlvbnMudW5kb2FibGUpIHtcbiAgICAgIGN5LnVuZG9SZWRvKCkuZG8oXCJwYXN0ZVwiLHtwYXN0ZUF0TW91c2VMb2M6IHBhc3RlQXRNb3VzZUxvY30pO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGN5LmNsaXBib2FyZCgpLnBhc3RlKCk7XG4gICAgfVxuICAgIGNsb25lQ29sbGFwc2VkTm9kZXNBbmRQb3J0cyhlbGVzQmVmb3JlKTtcbiAgICBjeS5ub2RlcyhcIjpzZWxlY3RlZFwiKS5lbWl0KCdkYXRhJyk7XG4gIH07XG5cbiAgLypcbiAgICogQWxpZ25zIGdpdmVuIG5vZGVzIGluIGdpdmVuIGhvcml6b250YWwgYW5kIHZlcnRpY2FsIG9yZGVyLlxuICAgKiBIb3Jpem9udGFsIGFuZCB2ZXJ0aWNhbCBwYXJhbWV0ZXJzIG1heSBiZSAnbm9uZScgb3IgdW5kZWZpbmVkLlxuICAgKiBhbGlnblRvIHBhcmFtZXRlciBpbmRpY2F0ZXMgdGhlIGxlYWRpbmcgbm9kZS5cbiAgICogUmVxdXJpcmVzIGN5dG9zY2FwZS1ncmlkLWd1aWRlIGV4dGVuc2lvbiBhbmQgY29uc2lkZXJzIHVuZG9hYmxlIG9wdGlvbi5cbiAgICovXG4gIG1haW5VdGlsaXRpZXMuYWxpZ24gPSBmdW5jdGlvbiAobm9kZXMsIGhvcml6b250YWwsIHZlcnRpY2FsLCBhbGlnblRvKSB7XG4gICAgaWYgKG5vZGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zLnVuZG9hYmxlKSB7XG4gICAgICBjeS51bmRvUmVkbygpLmRvKFwiYWxpZ25cIiwge1xuICAgICAgICBub2Rlczogbm9kZXMsXG4gICAgICAgIGhvcml6b250YWw6IGhvcml6b250YWwsXG4gICAgICAgIHZlcnRpY2FsOiB2ZXJ0aWNhbCxcbiAgICAgICAgYWxpZ25UbzogYWxpZ25Ub1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5vZGVzLmFsaWduKGhvcml6b250YWwsIHZlcnRpY2FsLCBhbGlnblRvKTtcbiAgICB9XG5cbiAgICBpZihjeS5lZGdlcyhcIjpzZWxlY3RlZFwiKS5sZW5ndGggPT0gMSApIHtcbiAgICAgIGN5LmVkZ2VzKCkudW5zZWxlY3QoKTsgICAgICBcbiAgICB9XG4gICAgXG4gIH07XG5cbiAgLypcbiAgICogQ3JlYXRlIGNvbXBvdW5kIGZvciBnaXZlbiBub2Rlcy4gY29tcG91bmRUeXBlIG1heSBiZSAnY29tcGxleCcgb3IgJ2NvbXBhcnRtZW50Jy5cbiAgICogVGhpcyBtZXRob2QgY29uc2lkZXJzIHVuZG9hYmxlIG9wdGlvbi5cbiAgICovXG4gIG1haW5VdGlsaXRpZXMuY3JlYXRlQ29tcG91bmRGb3JHaXZlbk5vZGVzID0gZnVuY3Rpb24gKF9ub2RlcywgY29tcG91bmRUeXBlKSB7XG4gICAgaWYgKCBlbGVtZW50VXRpbGl0aWVzLmlzR3JhcGhUb3BvbG9neUxvY2tlZCgpICkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBub2RlcyA9IF9ub2RlcztcbiAgICAvKlxuICAgICAqIEVsZW1pbmF0ZSB0aGUgbm9kZXMgd2hpY2ggY2Fubm90IGhhdmUgYSBwYXJlbnQgd2l0aCBnaXZlbiBjb21wb3VuZCB0eXBlXG4gICAgICovXG4gICAgbm9kZXMgPSBfbm9kZXMuZmlsdGVyKGZ1bmN0aW9uIChlbGVtZW50LCBpKSB7XG4gICAgICBpZih0eXBlb2YgZWxlbWVudCA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICBlbGVtZW50ID0gaTtcbiAgICAgIH1cblxuICAgICAgdmFyIHNiZ25jbGFzcyA9IGVsZW1lbnQuZGF0YShcImNsYXNzXCIpO1xuICAgICAgcmV0dXJuIGVsZW1lbnRVdGlsaXRpZXMuaXNWYWxpZFBhcmVudChzYmduY2xhc3MsIGNvbXBvdW5kVHlwZSwgZWxlbWVudCk7XG4gICAgfSk7XG5cbiAgICBub2RlcyA9IGVsZW1lbnRVdGlsaXRpZXMuZ2V0VG9wTW9zdE5vZGVzKG5vZGVzKTtcblxuICAgIC8vIEFsbCBlbGVtZW50cyBzaG91bGQgaGF2ZSB0aGUgc2FtZSBwYXJlbnQgYW5kIHRoZSBjb21tb24gcGFyZW50IHNob3VsZCBub3QgYmUgYSAnY29tcGxleCdcbiAgICAvLyBpZiBjb21wb3VuZFR5cGUgaXMgJ2NvbXBhcnRlbnQnXG4gICAgLy8gYmVjYXVzZSB0aGUgb2xkIGNvbW1vbiBwYXJlbnQgd2lsbCBiZSB0aGUgcGFyZW50IG9mIHRoZSBuZXcgY29tcGFydG1lbnQgYWZ0ZXIgdGhpcyBvcGVyYXRpb24gYW5kXG4gICAgLy8gJ2NvbXBsZXhlcycgY2Fubm90IGluY2x1ZGUgJ2NvbXBhcnRtZW50cydcbiAgICBpZiAobm9kZXMubGVuZ3RoID09IDAgfHwgIWVsZW1lbnRVdGlsaXRpZXMuYWxsSGF2ZVRoZVNhbWVQYXJlbnQobm9kZXMpXG4gICAgICAgICAgICB8fCAoIChjb21wb3VuZFR5cGUgPT09ICdjb21wYXJ0bWVudCcgfHwgY29tcG91bmRUeXBlID09ICdzdWJtYXAnKSAmJiBub2Rlcy5wYXJlbnQoKS5kYXRhKCdjbGFzcycpXG4gICAgICAgICAgICAmJiBub2Rlcy5wYXJlbnQoKS5kYXRhKCdjbGFzcycpLnN0YXJ0c1dpdGgoJ2NvbXBsZXgnKSApKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGN5LnVuZG9SZWRvKCkpIHtcbiAgICAgIHZhciBwYXJhbSA9IHtcbiAgICAgICAgY29tcG91bmRUeXBlOiBjb21wb3VuZFR5cGUsXG4gICAgICAgIG5vZGVzVG9NYWtlQ29tcG91bmQ6IG5vZGVzXG4gICAgICB9O1xuXG4gICAgICBjeS51bmRvUmVkbygpLmRvKFwiY3JlYXRlQ29tcG91bmRGb3JHaXZlbk5vZGVzXCIsIHBhcmFtKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBlbGVtZW50VXRpbGl0aWVzLmNyZWF0ZUNvbXBvdW5kRm9yR2l2ZW5Ob2Rlcyhub2RlcywgY29tcG91bmRUeXBlKTtcbiAgICB9XG4gIH07XG5cbiAgLypcbiAgICogTW92ZSB0aGUgbm9kZXMgdG8gYSBuZXcgcGFyZW50IGFuZCBjaGFuZ2UgdGhlaXIgcG9zaXRpb24gaWYgcG9zc0RpZmYgcGFyYW1zIGFyZSBzZXQuXG4gICAqIENvbnNpZGVycyB1bmRvYWJsZSBvcHRpb24gYW5kIGNoZWNrcyBpZiB0aGUgb3BlcmF0aW9uIGlzIHZhbGlkLlxuICAgKi9cbiAgbWFpblV0aWxpdGllcy5jaGFuZ2VQYXJlbnQgPSBmdW5jdGlvbihub2RlcywgX25ld1BhcmVudCwgcG9zRGlmZlgsIHBvc0RpZmZZKSB7XG4gICAgaWYgKCBlbGVtZW50VXRpbGl0aWVzLmlzR3JhcGhUb3BvbG9neUxvY2tlZCgpICkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBuZXdQYXJlbnQgPSB0eXBlb2YgX25ld1BhcmVudCA9PT0gJ3N0cmluZycgPyBjeS5nZXRFbGVtZW50QnlJZChfbmV3UGFyZW50KSA6IF9uZXdQYXJlbnQ7XG4gICAgLy8gTmV3IHBhcmVudCBpcyBzdXBwb3NlZCB0byBiZSBvbmUgb2YgdGhlIHJvb3QsIGEgY29tcGxleCBvciBhIGNvbXBhcnRtZW50XG4gICAgaWYgKG5ld1BhcmVudCAmJiAhbmV3UGFyZW50LmRhdGEoXCJjbGFzc1wiKS5zdGFydHNXaXRoKFwiY29tcGxleFwiKSAmJiBuZXdQYXJlbnQuZGF0YShcImNsYXNzXCIpICE9IFwiY29tcGFydG1lbnRcIlxuICAgICAgICAgICAgJiYgbmV3UGFyZW50LmRhdGEoXCJjbGFzc1wiKSAhPSBcInN1Ym1hcFwiKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIC8qXG4gICAgICogRWxlbWluYXRlIHRoZSBub2RlcyB3aGljaCBjYW5ub3QgaGF2ZSB0aGUgbmV3UGFyZW50IGFzIHRoZWlyIHBhcmVudFxuICAgICAqL1xuICAgIG5vZGVzID0gbm9kZXMuZmlsdGVyKGZ1bmN0aW9uIChlbGVtZW50LCBpKSB7XG4gICAgICBpZih0eXBlb2YgZWxlbWVudCA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICBlbGVtZW50ID0gaTtcbiAgICAgIH1cblxuICAgICAgdmFyIHNiZ25jbGFzcyA9IGVsZW1lbnQuZGF0YShcImNsYXNzXCIpO1xuICAgICAgcmV0dXJuIGVsZW1lbnRVdGlsaXRpZXMuaXNWYWxpZFBhcmVudChzYmduY2xhc3MsIG5ld1BhcmVudCwgZWxlbWVudCk7XG4gICAgfSk7XG5cbiAgICAvLyBEaXNjYXJkIHRoZSBub2RlcyB3aG9zZSBwYXJlbnQgaXMgYWxyZWFkeSBuZXdQYXJlbnQuXG4gICAgLy8gRGlzY2FyZCB0aGUgbmV3UGFyZW50IGl0c2VsZiBpZiBpdCBpcyBhbW9uZyB0aGUgbm9kZXNcbiAgICBub2RlcyA9IG5vZGVzLmZpbHRlcihmdW5jdGlvbiAoZWxlLCBpKSB7XG4gICAgICBpZih0eXBlb2YgZWxlID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgIGVsZSA9IGk7XG4gICAgICB9XG5cbiAgICAgIC8vIERpc2NhcmQgdGhlIG5ld1BhcmVudCBpZiBpdCBpcyBhbW9uZyB0aGUgbm9kZXNcbiAgICAgIGlmIChuZXdQYXJlbnQgJiYgZWxlLmlkKCkgPT09IG5ld1BhcmVudC5pZCgpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIC8vIERpc2NhcmQgdGhlIG5vZGVzIHdob3NlIHBhcmVudCBpcyBhbHJlYWR5IG5ld1BhcmVudFxuICAgICAgaWYgKCFuZXdQYXJlbnQpIHtcbiAgICAgICAgcmV0dXJuIGVsZS5kYXRhKCdwYXJlbnQnKSAhPSBudWxsO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGVsZS5kYXRhKCdwYXJlbnQnKSAhPT0gbmV3UGFyZW50LmlkKCk7XG4gICAgfSk7XG5cbiAgICAvLyBJZiBzb21lIG5vZGVzIGFyZSBhbmNlc3RvciBvZiBuZXcgcGFyZW50IGVsZW1pbmF0ZSB0aGVtXG4gICAgaWYgKG5ld1BhcmVudCkge1xuICAgICAgbm9kZXMgPSBub2Rlcy5kaWZmZXJlbmNlKG5ld1BhcmVudC5hbmNlc3RvcnMoKSk7XG4gICAgfVxuXG4gICAgLy8gSWYgYWxsIG5vZGVzIGFyZSBlbGVtaW5hdGVkIHJldHVybiBkaXJlY3RseVxuICAgIGlmIChub2Rlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBKdXN0IG1vdmUgdGhlIHRvcCBtb3N0IG5vZGVzXG4gICAgbm9kZXMgPSBlbGVtZW50VXRpbGl0aWVzLmdldFRvcE1vc3ROb2Rlcyhub2Rlcyk7XG5cbiAgICB2YXIgcGFyZW50SWQgPSBuZXdQYXJlbnQgPyBuZXdQYXJlbnQuaWQoKSA6IG51bGw7XG5cbiAgICBpZiAob3B0aW9ucy51bmRvYWJsZSkge1xuICAgICAgdmFyIHBhcmFtID0ge1xuICAgICAgICBmaXJzdFRpbWU6IHRydWUsXG4gICAgICAgIHBhcmVudERhdGE6IHBhcmVudElkLCAvLyBJdCBrZWVwcyB0aGUgbmV3UGFyZW50SWQgKEp1c3QgYW4gaWQgZm9yIGVhY2ggbm9kZXMgZm9yIHRoZSBmaXJzdCB0aW1lKVxuICAgICAgICBub2Rlczogbm9kZXMsXG4gICAgICAgIHBvc0RpZmZYOiBwb3NEaWZmWCxcbiAgICAgICAgcG9zRGlmZlk6IHBvc0RpZmZZLFxuICAgICAgICAvLyBUaGlzIGlzIG5lZWRlZCBiZWNhdXNlIHRoZSBjaGFuZ2VQYXJlbnQgZnVuY3Rpb24gY2FsbGVkIGlzIG5vdCBmcm9tIGVsZW1lbnRVdGlsaXRpZXNcbiAgICAgICAgLy8gYnV0IGZyb20gdGhlIHVuZG9SZWRvIGV4dGVuc2lvbiBkaXJlY3RseSwgc28gbWFpbnRhaW5pbmcgcG9pbnRlciBpcyBub3QgYXV0b21hdGljYWxseSBkb25lLlxuICAgICAgICBjYWxsYmFjazogZWxlbWVudFV0aWxpdGllcy5tYWludGFpblBvaW50ZXJcbiAgICAgIH07XG5cbiAgICAgIGN5LnVuZG9SZWRvKCkuZG8oXCJjaGFuZ2VQYXJlbnRcIiwgcGFyYW0pOyAvLyBUaGlzIGFjdGlvbiBpcyByZWdpc3RlcmVkIGJ5IHVuZG9SZWRvIGV4dGVuc2lvblxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGVsZW1lbnRVdGlsaXRpZXMuY2hhbmdlUGFyZW50KG5vZGVzLCBwYXJlbnRJZCwgcG9zRGlmZlgsIHBvc0RpZmZZKTtcbiAgICB9XG4gIH07XG5cbiAgLypcbiAgICogQ3JlYXRlcyBhbiBhY3RpdmF0aW9uIHJlYWN0aW9uIHdpdGggZ2l2ZW4gcGFyYW1ldGVycy4gUmVxdWlyZXMgY29zZS1iaWxrZW50IGxheW91dCB0byB0aWxlIHRoZSBmcmVlIG1hY3JvbW9sZWN1bGVzIGluY2x1ZGVkXG4gICAqIGluIHRoZSBjb21wbGV4LiBDb25zaWRlcnMgdW5kb2FibGUgb3B0aW9uLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBzZWUgdGhlIHNhbWUgZnVuY3Rpb24gaW4gZWxlbWVudFV0aWxpdGllc1xuICAgKi9cbiAgbWFpblV0aWxpdGllcy5jcmVhdGVUcmFuc2xhdGlvblJlYWN0aW9uID0gZnVuY3Rpb24gKG1SbmFOYW1lLCBwcm90ZWluTmFtZSwgcHJvY2Vzc1Bvc2l0aW9uLCBlZGdlTGVuZ3RoKSB7XG4gICAgaWYgKCBlbGVtZW50VXRpbGl0aWVzLmlzR3JhcGhUb3BvbG9neUxvY2tlZCgpICkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghb3B0aW9ucy51bmRvYWJsZSkge1xuICAgICAgZWxlbWVudFV0aWxpdGllcy5jcmVhdGVUcmFuc2xhdGlvblJlYWN0aW9uKG1SbmFOYW1lLCBwcm90ZWluTmFtZSwgcHJvY2Vzc1Bvc2l0aW9uLCBlZGdlTGVuZ3RoKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICB2YXIgcGFyYW0gPSB7XG4gICAgICAgIG1SbmFOYW1lOiBtUm5hTmFtZSxcbiAgICAgICAgcHJvdGVpbk5hbWU6IHByb3RlaW5OYW1lLFxuICAgICAgICBwcm9jZXNzUG9zaXRpb246IHByb2Nlc3NQb3NpdGlvbixcbiAgICAgICAgZWRnZUxlbmd0aDogZWRnZUxlbmd0aFxuICAgICAgfTtcblxuICAgICAgY3kudW5kb1JlZG8oKS5kbyhcImNyZWF0ZVRyYW5zbGF0aW9uUmVhY3Rpb25cIiwgcGFyYW0pO1xuICB9fTtcblxuICAvKlxuICAgKiBDcmVhdGVzIGFuIGFjdGl2YXRpb24gcmVhY3Rpb24gd2l0aCBnaXZlbiBwYXJhbWV0ZXJzLiBSZXF1aXJlcyBjb3NlLWJpbGtlbnQgbGF5b3V0IHRvIHRpbGUgdGhlIGZyZWUgbWFjcm9tb2xlY3VsZXMgaW5jbHVkZWRcbiAgICogaW4gdGhlIGNvbXBsZXguIENvbnNpZGVycyB1bmRvYWJsZSBvcHRpb24uIEZvciBtb3JlIGluZm9ybWF0aW9uIHNlZSB0aGUgc2FtZSBmdW5jdGlvbiBpbiBlbGVtZW50VXRpbGl0aWVzXG4gICAqL1xuICBtYWluVXRpbGl0aWVzLmNyZWF0ZVRyYW5zY3JpcHRpb25SZWFjdGlvbiA9IGZ1bmN0aW9uIChnZW5lTmFtZSwgbVJuYU5hbWUsIHByb2Nlc3NQb3NpdGlvbiwgZWRnZUxlbmd0aCkge1xuICAgIGlmICggZWxlbWVudFV0aWxpdGllcy5pc0dyYXBoVG9wb2xvZ3lMb2NrZWQoKSApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIW9wdGlvbnMudW5kb2FibGUpIHtcbiAgICAgIGVsZW1lbnRVdGlsaXRpZXMuY3JlYXRlVHJhbnNjcmlwdGlvblJlYWN0aW9uKGdlbmVOYW1lLCBtUm5hTmFtZSwgcHJvY2Vzc1Bvc2l0aW9uLCBlZGdlTGVuZ3RoKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICB2YXIgcGFyYW0gPSB7XG4gICAgICAgIGdlbmVOYW1lOiBnZW5lTmFtZSxcbiAgICAgICAgbVJuYU5hbWU6IG1SbmFOYW1lLFxuICAgICAgICBwcm9jZXNzUG9zaXRpb246IHByb2Nlc3NQb3NpdGlvbixcbiAgICAgICAgZWRnZUxlbmd0aDogZWRnZUxlbmd0aFxuICAgICAgfTtcblxuICAgICAgY3kudW5kb1JlZG8oKS5kbyhcImNyZWF0ZVRyYW5zY3JpcHRpb25SZWFjdGlvblwiLCBwYXJhbSk7XG4gIH19O1xuXG4gIG1haW5VdGlsaXRpZXMuY3JlYXRlVHJhbnNsYXRpb24gPSBmdW5jdGlvbihyZWd1bGF0b3JMYWJlbCwgb3V0cHV0TGFiZWwsIG9yaWVudGF0aW9uKSB7XG4gICAgaWYgKCBlbGVtZW50VXRpbGl0aWVzLmlzR3JhcGhUb3BvbG9neUxvY2tlZCgpICkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghb3B0aW9ucy51bmRvYWJsZSkge1xuICAgICAgZWxlbWVudFV0aWxpdGllcy5jcmVhdGVUcmFuc2xhdGlvbihyZWd1bGF0b3JMYWJlbCwgb3V0cHV0TGFiZWwsIG9yaWVudGF0aW9uKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBjb25zdCBwYXJhbSA9IHtcbiAgICAgICAgcmVndWxhdG9yTGFiZWw6IHJlZ3VsYXRvckxhYmVsLFxuICAgICAgICBvdXRwdXRMYWJlbDogb3V0cHV0TGFiZWwsXG4gICAgICAgIG9yaWVudGF0aW9uOiBvcmllbnRhdGlvblxuICAgICAgfTtcblxuICAgICAgY3kudW5kb1JlZG8oKS5kbyhcImNyZWF0ZVRyYW5zbGF0aW9uXCIsIHBhcmFtKTtcbiAgICB9ICBcbiAgfTtcblxuICBtYWluVXRpbGl0aWVzLmNyZWF0ZVRyYW5zY3JpcHRpb24gPSBmdW5jdGlvbihsYWJlbCwgb3JpZW50YXRpb24pIHtcbiAgICBpZiAoIGVsZW1lbnRVdGlsaXRpZXMuaXNHcmFwaFRvcG9sb2d5TG9ja2VkKCkgKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCFvcHRpb25zLnVuZG9hYmxlKSB7XG4gICAgICBlbGVtZW50VXRpbGl0aWVzLmNyZWF0ZVRyYW5zY3JpcHRpb24obGFiZWwsIG9yaWVudGF0aW9uKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBjb25zdCBwYXJhbSA9IHtcbiAgICAgICAgbGFiZWw6IGxhYmVsLFxuICAgICAgICBvcmllbnRhdGlvbjogb3JpZW50YXRpb25cbiAgICAgIH07XG5cbiAgICAgIGN5LnVuZG9SZWRvKCkuZG8oXCJjcmVhdGVUcmFuc2NyaXB0aW9uXCIsIHBhcmFtKTtcbiAgICB9ICBcbiAgfTtcblxuICBtYWluVXRpbGl0aWVzLmNyZWF0ZURlZ3JhZGF0aW9uID0gZnVuY3Rpb24obWFjcm9tb2xlY3VsZSwgb3JpZW50YXRpb24pIHtcbiAgICBpZiAoIGVsZW1lbnRVdGlsaXRpZXMuaXNHcmFwaFRvcG9sb2d5TG9ja2VkKCkgKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCFvcHRpb25zLnVuZG9hYmxlKSB7XG4gICAgICBlbGVtZW50VXRpbGl0aWVzLmNyZWF0ZURlZ3JhZGF0aW9uKG1hY3JvbW9sZWN1bGUsIG9yaWVudGF0aW9uKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBjb25zdCBwYXJhbSA9IHtcbiAgICAgICAgbWFjcm9tb2xlY3VsZTogbWFjcm9tb2xlY3VsZSxcbiAgICAgICAgb3JpZW50YXRpb246IG9yaWVudGF0aW9uXG4gICAgICB9O1xuXG4gICAgICBjeS51bmRvUmVkbygpLmRvKFwiY3JlYXRlRGVncmFkYXRpb25cIiwgcGFyYW0pO1xuICAgIH0gIFxuICB9O1xuXG4gIG1haW5VdGlsaXRpZXMuY3JlYXRlQ29tcGxleFByb3RlaW5Gb3JtYXRpb24gPSBmdW5jdGlvbihwcm90ZWluTGFiZWxzLCBjb21wbGV4TGFiZWwsIHJlZ3VsYXRvciwgb3JpZW50YXRpb24sIHJldmVyc2UpIHtcbiAgICBpZiAoIGVsZW1lbnRVdGlsaXRpZXMuaXNHcmFwaFRvcG9sb2d5TG9ja2VkKCkgKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCFvcHRpb25zLnVuZG9hYmxlKSB7XG4gICAgICBlbGVtZW50VXRpbGl0aWVzLmNyZWF0ZUNvbXBsZXhQcm90ZWluRm9ybWF0aW9uKHByb3RlaW5MYWJlbHMsIGNvbXBsZXhMYWJlbCwgcmVndWxhdG9yLCBvcmllbnRhdGlvbiwgcmV2ZXJzZSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgY29uc3QgcGFyYW0gPSB7XG4gICAgICAgIHByb3RlaW5MYWJlbHM6IHByb3RlaW5MYWJlbHMsXG4gICAgICAgIGNvbXBsZXhMYWJlbDogY29tcGxleExhYmVsLFxuICAgICAgICByZWd1bGF0b3I6IHJlZ3VsYXRvcixcbiAgICAgICAgb3JpZW50YXRpb246IG9yaWVudGF0aW9uLFxuICAgICAgICByZXZlcnNlOiByZXZlcnNlXG4gICAgICB9O1xuXG4gICAgICBjeS51bmRvUmVkbygpLmRvKFwiY3JlYXRlQ29tcGxleFByb3RlaW5Gb3JtYXRpb25cIiwgcGFyYW0pO1xuICAgIH0gIFxuICB9O1xuXG4gIG1haW5VdGlsaXRpZXMuY3JlYXRlTXVsdGltZXJpemF0aW9uID0gZnVuY3Rpb24obWFjcm9tb2xlY3VsZSwgcmVndWxhdG9yLCByZWd1bGF0b3JNdWx0aW1lciwgb3JpZW50YXRpb24pIHtcbiAgICBpZiAoIGVsZW1lbnRVdGlsaXRpZXMuaXNHcmFwaFRvcG9sb2d5TG9ja2VkKCkgKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCFvcHRpb25zLnVuZG9hYmxlKSB7XG4gICAgICBlbGVtZW50VXRpbGl0aWVzLmNyZWF0ZU11bHRpbWVyaXphdGlvbihtYWNyb21vbGVjdWxlLCByZWd1bGF0b3IsIHJlZ3VsYXRvck11bHRpbWVyLCBvcmllbnRhdGlvbik7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgY29uc3QgcGFyYW0gPSB7XG4gICAgICAgIG1hY3JvbW9sZWN1bGU6IG1hY3JvbW9sZWN1bGUsXG4gICAgICAgIHJlZ3VsYXRvcjogcmVndWxhdG9yLFxuICAgICAgICByZWd1bGF0b3JNdWx0aW1lcjogcmVndWxhdG9yTXVsdGltZXIsXG4gICAgICAgIG9yaWVudGF0aW9uOiBvcmllbnRhdGlvblxuICAgICAgfTtcblxuICAgICAgY3kudW5kb1JlZG8oKS5kbyhcImNyZWF0ZU11bHRpbWVyaXphdGlvblwiLCBwYXJhbSk7XG4gICAgfSAgXG4gIH07XG5cbiAgbWFpblV0aWxpdGllcy5jcmVhdGVDb252ZXJzaW9uID0gZnVuY3Rpb24obWFjcm9tb2xlY3VsZSwgcmVndWxhdG9yLCByZWd1bGF0b3JNdWx0aW1lciwgb3JpZW50YXRpb24sIGlucHV0SW5mb2JveExhYmVscywgb3V0cHV0SW5mb2JveExhYmVscykge1xuICAgIGlmICggZWxlbWVudFV0aWxpdGllcy5pc0dyYXBoVG9wb2xvZ3lMb2NrZWQoKSApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIW9wdGlvbnMudW5kb2FibGUpIHtcbiAgICAgIGVsZW1lbnRVdGlsaXRpZXMuY3JlYXRlQ29udmVyc2lvbihtYWNyb21vbGVjdWxlLCByZWd1bGF0b3IsIHJlZ3VsYXRvck11bHRpbWVyLCBvcmllbnRhdGlvbiwgaW5wdXRJbmZvYm94TGFiZWxzLCBvdXRwdXRJbmZvYm94TGFiZWxzKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBjb25zdCBwYXJhbSA9IHtcbiAgICAgICAgbWFjcm9tb2xlY3VsZTogbWFjcm9tb2xlY3VsZSxcbiAgICAgICAgcmVndWxhdG9yOiByZWd1bGF0b3IsXG4gICAgICAgIHJlZ3VsYXRvck11bHRpbWVyOiByZWd1bGF0b3JNdWx0aW1lcixcbiAgICAgICAgb3JpZW50YXRpb246IG9yaWVudGF0aW9uLFxuICAgICAgICBpbnB1dEluZm9ib3hMYWJlbHM6IGlucHV0SW5mb2JveExhYmVscyxcbiAgICAgICAgb3V0cHV0SW5mb2JveExhYmVsczogb3V0cHV0SW5mb2JveExhYmVsc1xuICAgICAgfTtcblxuICAgICAgY3kudW5kb1JlZG8oKS5kbyhcImNyZWF0ZUNvbnZlcnNpb25cIiwgcGFyYW0pO1xuICAgIH0gIFxuICB9O1xuXG4gIG1haW5VdGlsaXRpZXMuY3JlYXRlTWV0YWJvbGljUmVhY3Rpb24gPSBmdW5jdGlvbihpbnB1dHMsIG91dHB1dHMsIHJldmVyc2libGUsIHJlZ3VsYXRvciwgcmVndWxhdG9yTXVsdGltZXIsIG9yaWVudGF0aW9uKSB7XG4gICAgaWYgKCBlbGVtZW50VXRpbGl0aWVzLmlzR3JhcGhUb3BvbG9neUxvY2tlZCgpICkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghb3B0aW9ucy51bmRvYWJsZSkge1xuICAgICAgZWxlbWVudFV0aWxpdGllcy5jcmVhdGVNZXRhYm9saWNSZWFjdGlvbihpbnB1dHMsIG91dHB1dHMsIHJldmVyc2libGUsIHJlZ3VsYXRvciwgcmVndWxhdG9yTXVsdGltZXIsIG9yaWVudGF0aW9uKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBjb25zdCBwYXJhbSA9IHtcbiAgICAgICAgaW5wdXRzOiBpbnB1dHMsXG4gICAgICAgIG91dHB1dHM6IG91dHB1dHMsXG4gICAgICAgIHJldmVyc2libGU6IHJldmVyc2libGUsXG4gICAgICAgIHJlZ3VsYXRvcjogcmVndWxhdG9yLFxuICAgICAgICByZWd1bGF0b3JNdWx0aW1lcjogcmVndWxhdG9yTXVsdGltZXIsXG4gICAgICAgIG9yaWVudGF0aW9uOiBvcmllbnRhdGlvblxuICAgICAgfTtcblxuICAgICAgY3kudW5kb1JlZG8oKS5kbyhcImNyZWF0ZU1ldGFib2xpY1JlYWN0aW9uXCIsIHBhcmFtKTtcbiAgICB9ICBcbiAgfTtcblxuICAvKlxuICAgKiBDcmVhdGVzIGFuIGFjdGl2YXRpb24gcmVhY3Rpb24gd2l0aCBnaXZlbiBwYXJhbWV0ZXJzLiBSZXF1aXJlcyBjb3NlLWJpbGtlbnQgbGF5b3V0IHRvIHRpbGUgdGhlIGZyZWUgbWFjcm9tb2xlY3VsZXMgaW5jbHVkZWRcbiAgICogaW4gdGhlIGNvbXBsZXguIENvbnNpZGVycyB1bmRvYWJsZSBvcHRpb24uIEZvciBtb3JlIGluZm9ybWF0aW9uIHNlZSB0aGUgc2FtZSBmdW5jdGlvbiBpbiBlbGVtZW50VXRpbGl0aWVzXG4gICAqL1xuICBtYWluVXRpbGl0aWVzLmNyZWF0ZU1ldGFib2xpY0NhdGFseXRpY0FjdGl2aXR5ID0gZnVuY3Rpb24gKGlucHV0Tm9kZUxpc3QsIG91dHB1dE5vZGVMaXN0LCBjYXRhbHlzdE5hbWUsIGNhdGFseXN0VHlwZSwgcHJvY2Vzc1Bvc2l0aW9uLCB0aWxpbmdQYWRkaW5nVmVydGljYWwsIHRpbGluZ1BhZGRpbmdIb3Jpem9udGFsLCBlZGdlTGVuZ3RoKSB7XG4gICAgaWYgKCBlbGVtZW50VXRpbGl0aWVzLmlzR3JhcGhUb3BvbG9neUxvY2tlZCgpICkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghb3B0aW9ucy51bmRvYWJsZSkge1xuICAgICAgZWxlbWVudFV0aWxpdGllcy5jcmVhdGVNZXRhYm9saWNDYXRhbHl0aWNBY3Rpdml0eShpbnB1dE5vZGVMaXN0LCBvdXRwdXROb2RlTGlzdCwgY2F0YWx5c3ROYW1lLCBjYXRhbHlzdFR5cGUsIHByb2Nlc3NQb3NpdGlvbiwgdGlsaW5nUGFkZGluZ1ZlcnRpY2FsLCB0aWxpbmdQYWRkaW5nSG9yaXpvbnRhbCwgZWRnZUxlbmd0aCk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgdmFyIHBhcmFtID0ge1xuICAgICAgICBpbnB1dE5vZGVMaXN0OiBpbnB1dE5vZGVMaXN0LFxuICAgICAgICBvdXRwdXROb2RlTGlzdDogb3V0cHV0Tm9kZUxpc3QsXG4gICAgICAgIGNhdGFseXN0TmFtZTogY2F0YWx5c3ROYW1lLFxuICAgICAgICBjYXRhbHlzdFR5cGU6IGNhdGFseXN0VHlwZSxcbiAgICAgICAgcHJvY2Vzc1Bvc2l0aW9uOiBwcm9jZXNzUG9zaXRpb24sXG4gICAgICAgIHRpbGluZ1BhZGRpbmdWZXJ0aWNhbDogdGlsaW5nUGFkZGluZ1ZlcnRpY2FsLFxuICAgICAgICB0aWxpbmdQYWRkaW5nSG9yaXpvbnRhbDogdGlsaW5nUGFkZGluZ0hvcml6b250YWwsXG4gICAgICAgIGVkZ2VMZW5ndGg6IGVkZ2VMZW5ndGgsXG4gICAgICB9O1xuXG4gICAgICBjeS51bmRvUmVkbygpLmRvKFwiY3JlYXRlTWV0YWJvbGljQ2F0YWx5dGljQWN0aXZpdHlcIiwgcGFyYW0pO1xuICAgIH1cbiAgfTtcblxuICAvKlxuICAgKiBDcmVhdGVzIGFuIGFjdGl2YXRpb24gcmVhY3Rpb24gd2l0aCBnaXZlbiBwYXJhbWV0ZXJzLiBSZXF1aXJlcyBjb3NlLWJpbGtlbnQgbGF5b3V0IHRvIHRpbGUgdGhlIGZyZWUgbWFjcm9tb2xlY3VsZXMgaW5jbHVkZWRcbiAgICogaW4gdGhlIGNvbXBsZXguIENvbnNpZGVycyB1bmRvYWJsZSBvcHRpb24uIEZvciBtb3JlIGluZm9ybWF0aW9uIHNlZSB0aGUgc2FtZSBmdW5jdGlvbiBpbiBlbGVtZW50VXRpbGl0aWVzXG4gICAqL1xuICBtYWluVXRpbGl0aWVzLmNyZWF0ZUFjdGl2YXRpb25SZWFjdGlvbiA9IGZ1bmN0aW9uIChwcm90ZWluTmFtZSwgcHJvY2Vzc1Bvc2l0aW9uLCBlZGdlTGVuZ3RoLCByZXZlcnNlKSB7XG4gICAgaWYgKCBlbGVtZW50VXRpbGl0aWVzLmlzR3JhcGhUb3BvbG9neUxvY2tlZCgpICkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghb3B0aW9ucy51bmRvYWJsZSkge1xuICAgICAgZWxlbWVudFV0aWxpdGllcy5jcmVhdGVBY3RpdmF0aW9uUmVhY3Rpb24ocHJvdGVpbk5hbWUsIHByb2Nlc3NQb3NpdGlvbiwgZWRnZUxlbmd0aCwgcmV2ZXJzZSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgdmFyIHBhcmFtID0ge1xuICAgICAgICBwcm90ZWluTmFtZTogcHJvdGVpbk5hbWUsXG4gICAgICAgIHByb2Nlc3NQb3NpdGlvbjogcHJvY2Vzc1Bvc2l0aW9uLFxuICAgICAgICBlZGdlTGVuZ3RoOiBlZGdlTGVuZ3RoLFxuICAgICAgICByZXZlcnNlOiByZXZlcnNlXG4gICAgICB9O1xuXG4gICAgICBjeS51bmRvUmVkbygpLmRvKFwiY3JlYXRlQWN0aXZhdGlvblJlYWN0aW9uXCIsIHBhcmFtKTtcbiAgfX07XG5cbiAgLypcbiAgICogQ3JlYXRlcyBhIHRlbXBsYXRlIHJlYWN0aW9uIHdpdGggZ2l2ZW4gcGFyYW1ldGVycy4gUmVxdWlyZXMgY29zZS1iaWxrZW50IGxheW91dCB0byB0aWxlIHRoZSBmcmVlIG1hY3JvbW9sZWN1bGVzIGluY2x1ZGVkXG4gICAqIGluIHRoZSBjb21wbGV4LiBDb25zaWRlcnMgdW5kb2FibGUgb3B0aW9uLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBzZWUgdGhlIHNhbWUgZnVuY3Rpb24gaW4gZWxlbWVudFV0aWxpdGllc1xuICAgKi9cbiAgbWFpblV0aWxpdGllcy5jcmVhdGVUZW1wbGF0ZVJlYWN0aW9uID0gZnVuY3Rpb24gKHRlbXBsYXRlVHlwZSwgbWFjcm9tb2xlY3VsZUxpc3QsIGNvbXBsZXhOYW1lLCBwcm9jZXNzUG9zaXRpb24sIHRpbGluZ1BhZGRpbmdWZXJ0aWNhbCwgdGlsaW5nUGFkZGluZ0hvcml6b250YWwsIGVkZ2VMZW5ndGgsIGxheW91dFBhcmFtKSB7XG4gICAgaWYgKCBlbGVtZW50VXRpbGl0aWVzLmlzR3JhcGhUb3BvbG9neUxvY2tlZCgpICkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghb3B0aW9ucy51bmRvYWJsZSkge1xuICAgICAgaWYgKHRlbXBsYXRlVHlwZSA9PT0gXCJyZXZlcnNpYmxlXCIpIHtcbiAgICAgICAgZWxlbWVudFV0aWxpdGllcy5zZXRNYXBUeXBlKFwiSHlicmlkQW55XCIpO1xuICAgICAgfVxuICAgICAgZWxlbWVudFV0aWxpdGllcy5jcmVhdGVUZW1wbGF0ZVJlYWN0aW9uKHRlbXBsYXRlVHlwZSwgbWFjcm9tb2xlY3VsZUxpc3QsIGNvbXBsZXhOYW1lLCBwcm9jZXNzUG9zaXRpb24sIHRpbGluZ1BhZGRpbmdWZXJ0aWNhbCwgdGlsaW5nUGFkZGluZ0hvcml6b250YWwsIGVkZ2VMZW5ndGgsIGxheW91dFBhcmFtKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICB2YXIgcGFyYW0gPSB7XG4gICAgICAgIHRlbXBsYXRlVHlwZTogdGVtcGxhdGVUeXBlLFxuICAgICAgICBtYWNyb21vbGVjdWxlTGlzdDogbWFjcm9tb2xlY3VsZUxpc3QsXG4gICAgICAgIGNvbXBsZXhOYW1lOiBjb21wbGV4TmFtZSxcbiAgICAgICAgcHJvY2Vzc1Bvc2l0aW9uOiBwcm9jZXNzUG9zaXRpb24sXG4gICAgICAgIHRpbGluZ1BhZGRpbmdWZXJ0aWNhbDogdGlsaW5nUGFkZGluZ1ZlcnRpY2FsLFxuICAgICAgICB0aWxpbmdQYWRkaW5nSG9yaXpvbnRhbDogdGlsaW5nUGFkZGluZ0hvcml6b250YWwsXG4gICAgICAgIGVkZ2VMZW5ndGg6IGVkZ2VMZW5ndGgsXG4gICAgICAgIGxheW91dFBhcmFtOiBsYXlvdXRQYXJhbVxuICAgICAgfTtcbiAgICAgIGlmICh0ZW1wbGF0ZVR5cGUgPT09IFwicmV2ZXJzaWJsZVwiKSB7XG4gICAgICAgIHZhciBhY3Rpb25zID0gW107XG4gICAgICAgIGFjdGlvbnMucHVzaCh7bmFtZTpcImNoYW5nZU1hcFR5cGVcIiwgcGFyYW06IHttYXBUeXBlOiBcIkh5YnJpZEFueVwiLCBjYWxsYmFjazogZnVuY3Rpb24oKXt9IH19KTtcbiAgICAgICAgYWN0aW9ucy5wdXNoKHtuYW1lOlwiY3JlYXRlVGVtcGxhdGVSZWFjdGlvblwiLCBwYXJhbTogcGFyYW19KTtcbiAgICAgICAgY3kudW5kb1JlZG8oKS5kbyhcImJhdGNoXCIsIGFjdGlvbnMpO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIGN5LnVuZG9SZWRvKCkuZG8oXCJjcmVhdGVUZW1wbGF0ZVJlYWN0aW9uXCIsIHBhcmFtKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgLypcbiAgICogUmVzaXplIGdpdmVuIG5vZGVzIGlmIHVzZUFzcGVjdFJhdGlvIGlzIHRydXRoeSBvbmUgb2Ygd2lkdGggb3IgaGVpZ2h0IHNob3VsZCBub3QgYmUgc2V0LlxuICAgKiBDb25zaWRlcnMgdW5kb2FibGUgb3B0aW9uLlxuICAgKi9cbiAgbWFpblV0aWxpdGllcy5yZXNpemVOb2RlcyA9IGZ1bmN0aW9uKG5vZGVzLCB3aWR0aCwgaGVpZ2h0LCB1c2VBc3BlY3RSYXRpbywgcHJlc2VydmVSZWxhdGl2ZVBvcykge1xuICAgIGlmIChub2Rlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucy51bmRvYWJsZSkge1xuICAgICAgdmFyIHBhcmFtID0ge1xuICAgICAgICBub2Rlczogbm9kZXMsXG4gICAgICAgIHdpZHRoOiB3aWR0aCxcbiAgICAgICAgaGVpZ2h0OiBoZWlnaHQsXG4gICAgICAgIHVzZUFzcGVjdFJhdGlvOiB1c2VBc3BlY3RSYXRpbyxcbiAgICAgICAgcGVyZm9ybU9wZXJhdGlvbjogdHJ1ZSxcbiAgICAgICAgcHJlc2VydmVSZWxhdGl2ZVBvczogcHJlc2VydmVSZWxhdGl2ZVBvc1xuICAgICAgfTtcblxuICAgICAgY3kudW5kb1JlZG8oKS5kbyhcInJlc2l6ZU5vZGVzXCIsIHBhcmFtKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBlbGVtZW50VXRpbGl0aWVzLnJlc2l6ZU5vZGVzKG5vZGVzLCB3aWR0aCwgaGVpZ2h0LCB1c2VBc3BlY3RSYXRpbyk7XG4gICAgICBjeS5zdHlsZSgpLnVwZGF0ZSgpO1xuICAgIH1cblxuXG4gIH07XG5cbiAgICAvKlxuICAgICAqIFJlc2l6ZSBnaXZlbiBub2RlcyBpZiB1c2VBc3BlY3RSYXRpbyBpcyB0cnV0aHkgb25lIG9mIHdpZHRoIG9yIGhlaWdodCBzaG91bGQgbm90IGJlIHNldC5cbiAgICAgKiBDb25zaWRlcnMgdW5kb2FibGUgb3B0aW9uLlxuICAgICAqL1xuICAgIG1haW5VdGlsaXRpZXMucmVzaXplTm9kZXNUb0NvbnRlbnQgPSBmdW5jdGlvbihub2RlcywgdXNlQXNwZWN0UmF0aW8pIHtcbiAgICAgICAgaWYgKG5vZGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9IFxuICAgICAgICBpZiAob3B0aW9ucy51bmRvYWJsZSkge1xuICAgICAgICAgIHZhciBhY3Rpb25zID0gW107XG4gICAgICAgICAgbm9kZXMuZm9yRWFjaChmdW5jdGlvbihub2RlKXtcbiAgICAgICAgICAgIHZhciB3aWR0aCA9IGVsZW1lbnRVdGlsaXRpZXMuY2FsY3VsYXRlTWluV2lkdGgobm9kZSk7XG4gICAgICAgICAgICB2YXIgaGVpZ2h0ID0gZWxlbWVudFV0aWxpdGllcy5jYWxjdWxhdGVNaW5IZWlnaHQobm9kZSk7XG4gICAgICAgICAgICBhY3Rpb25zLnB1c2goe25hbWU6IFwicmVzaXplTm9kZXNcIiwgcGFyYW06IHtcbiAgICAgICAgICAgICAgICBub2Rlczogbm9kZSxcbiAgICAgICAgICAgICAgICB3aWR0aDogd2lkdGgsXG4gICAgICAgICAgICAgICAgaGVpZ2h0OiBoZWlnaHQsXG4gICAgICAgICAgICAgICAgdXNlQXNwZWN0UmF0aW86IHVzZUFzcGVjdFJhdGlvLFxuICAgICAgICAgICAgICAgIHBlcmZvcm1PcGVyYXRpb246IHRydWUsXG4gICAgICAgICAgICAgICAgcHJlc2VydmVSZWxhdGl2ZVBvczogdHJ1ZVxuICAgICAgICAgICAgfX0pO1xuXG4gICAgICAgICAgICB2YXIgc3RhdGVBbmRJbmZvcyA9IG5vZGUuZGF0YSgnc3RhdGVzYW5kaW5mb3MnKTtcbiAgICAgICAgICAgIHZhciBsZW5ndGggPSBzdGF0ZUFuZEluZm9zLmxlbmd0aDtcbiAgICAgICAgICAgIGlmIChsZW5ndGggIT0gMCkge1xuICAgICAgICAgICAgICB2YXIgcGFyYW0gPSB7XG4gICAgICAgICAgICAgICAgbm9kZTogbm9kZSxcbiAgICAgICAgICAgICAgICBsb2NhdGlvbnM6IFtcInRvcFwiLFwicmlnaHRcIixcImJvdHRvbVwiLFwibGVmdFwiXVxuICAgICAgICAgICAgICB9OyAgICAgICAgICBcbiAgICAgICAgICAgICAgYWN0aW9ucy5wdXNoKHtuYW1lOlwiZml0VW5pdHNcIixwYXJhbSA6IHBhcmFtfSlcbiAgICAgICAgICAgICB9XG4gIFxuXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgXG4gICAgICAgICBcbiAgICAgICAgICBjeS51bmRvUmVkbygpLmRvKFwiYmF0Y2hcIiwgYWN0aW9ucyk7XG4gICAgICAgICAgY3kuc3R5bGUoKS51cGRhdGUoKTtcbiAgICAgICAgICByZXR1cm4gYWN0aW9ucztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIG5vZGVzLmZvckVhY2goZnVuY3Rpb24obm9kZSl7XG4gICAgICAgICAgICAgIHZhciB3aWR0aCA9IGVsZW1lbnRVdGlsaXRpZXMuY2FsY3VsYXRlTWluV2lkdGgobm9kZSk7XG4gICAgICAgICAgICAgIHZhciBoZWlnaHQgPSBlbGVtZW50VXRpbGl0aWVzLmNhbGN1bGF0ZU1pbkhlaWdodChub2RlKTtcbiAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgIGVsZW1lbnRVdGlsaXRpZXMucmVzaXplTm9kZXMobm9kZSwgd2lkdGgsIGhlaWdodCwgdXNlQXNwZWN0UmF0aW8sIHRydWUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBjeS5zdHlsZSgpLnVwZGF0ZSgpO1xuICAgIH07XG5cbiAgLypcbiAgICogQ2hhbmdlcyB0aGUgbGFiZWwgb2YgdGhlIGdpdmVuIG5vZGVzIHRvIHRoZSBnaXZlbiBsYWJlbC4gQ29uc2lkZXJzIHVuZG9hYmxlIG9wdGlvbi5cbiAgICovXG4gIG1haW5VdGlsaXRpZXMuY2hhbmdlTm9kZUxhYmVsID0gZnVuY3Rpb24obm9kZXMsIGxhYmVsKSB7XG4gICAgaWYgKG5vZGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghb3B0aW9ucy51bmRvYWJsZSkge1xuICAgICAgbm9kZXMuZGF0YSgnbGFiZWwnLCBsYWJlbCk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgdmFyIHBhcmFtID0ge1xuICAgICAgICBub2Rlczogbm9kZXMsXG4gICAgICAgIGxhYmVsOiBsYWJlbCxcbiAgICAgICAgZmlyc3RUaW1lOiB0cnVlXG4gICAgICB9O1xuXG4gICAgICBjeS51bmRvUmVkbygpLmRvKFwiY2hhbmdlTm9kZUxhYmVsXCIsIHBhcmFtKTtcbiAgICB9XG5cbiAgICBjeS5zdHlsZSgpLnVwZGF0ZSgpO1xuICB9O1xuXG4gIC8qXG4gICAqIENoYW5nZSBmb250IHByb3BlcnRpZXMgZm9yIGdpdmVuIG5vZGVzIHVzZSB0aGUgZ2l2ZW4gZm9udCBkYXRhLlxuICAgKiBDb25zaWRlcnMgdW5kb2FibGUgb3B0aW9uLlxuICAgKi9cbiAgbWFpblV0aWxpdGllcy5jaGFuZ2VGb250UHJvcGVydGllcyA9IGZ1bmN0aW9uKGVsZXMsIGRhdGEpIHtcbiAgICBpZiAoZWxlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucy51bmRvYWJsZSkge1xuICAgICAgdmFyIHBhcmFtID0ge1xuICAgICAgICBlbGVzOiBlbGVzLFxuICAgICAgICBkYXRhOiBkYXRhLFxuICAgICAgICBmaXJzdFRpbWU6IHRydWVcbiAgICAgIH07XG5cbiAgICAgIGN5LnVuZG9SZWRvKCkuZG8oXCJjaGFuZ2VGb250UHJvcGVydGllc1wiLCBwYXJhbSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgZWxlbWVudFV0aWxpdGllcy5jaGFuZ2VGb250UHJvcGVydGllcyhlbGVzLCBkYXRhKTtcbiAgICB9XG5cbiAgICBjeS5zdHlsZSgpLnVwZGF0ZSgpO1xuICB9O1xuXG4gIC8qXG4gICAqIENoYW5nZSBzdGF0ZSB2YWx1ZSBvciB1bml0IG9mIGluZm9ybWF0aW9uIGJveCBvZiBnaXZlbiBub2RlcyB3aXRoIGdpdmVuIGluZGV4LlxuICAgKiBDb25zaWRlcnMgdW5kb2FibGUgb3B0aW9uLlxuICAgKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcGFyYW1ldGVycyBzZWUgZWxlbWVudFV0aWxpdGllcy5jaGFuZ2VTdGF0ZU9ySW5mb0JveFxuICAgKi9cbiAgbWFpblV0aWxpdGllcy5jaGFuZ2VTdGF0ZU9ySW5mb0JveCA9IGZ1bmN0aW9uKG5vZGVzLCBpbmRleCwgdmFsdWUsIHR5cGUpIHtcbiAgICBpZiAobm9kZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChvcHRpb25zLnVuZG9hYmxlKSB7XG4gICAgICB2YXIgcGFyYW0gPSB7XG4gICAgICAgIGluZGV4OiBpbmRleCxcbiAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICB0eXBlOiB0eXBlLFxuICAgICAgICBub2Rlczogbm9kZXNcbiAgICAgIH07XG5cbiAgICAgIGN5LnVuZG9SZWRvKCkuZG8oXCJjaGFuZ2VTdGF0ZU9ySW5mb0JveFwiLCBwYXJhbSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgcmV0dXJuIGVsZW1lbnRVdGlsaXRpZXMuY2hhbmdlU3RhdGVPckluZm9Cb3gobm9kZXMsIGluZGV4LCB2YWx1ZSwgdHlwZSk7XG4gICAgfVxuXG4gICAgY3kuc3R5bGUoKS51cGRhdGUoKTtcbiAgfTtcblxuICAvLyBBZGQgYSBuZXcgc3RhdGUgb3IgaW5mbyBib3ggdG8gZ2l2ZW4gbm9kZXMuXG4gIC8vIFRoZSBib3ggaXMgcmVwcmVzZW50ZWQgYnkgdGhlIHBhcmFtZXRlciBvYmouXG4gIC8vIENvbnNpZGVycyB1bmRvYWJsZSBvcHRpb24uXG4gIG1haW5VdGlsaXRpZXMuYWRkU3RhdGVPckluZm9Cb3ggPSBmdW5jdGlvbihub2Rlcywgb2JqKSB7XG4gICAgaWYgKG5vZGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghb3B0aW9ucy51bmRvYWJsZSkge1xuICAgICAgZWxlbWVudFV0aWxpdGllcy5hZGRTdGF0ZU9ySW5mb0JveChub2Rlcywgb2JqKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICB2YXIgcGFyYW0gPSB7XG4gICAgICAgIG9iajogb2JqLFxuICAgICAgICBub2Rlczogbm9kZXNcbiAgICAgIH07XG5cbiAgICAgIGN5LnVuZG9SZWRvKCkuZG8oXCJhZGRTdGF0ZU9ySW5mb0JveFwiLCBwYXJhbSk7XG4gICAgfVxuXG4gICAgY3kuc3R5bGUoKS51cGRhdGUoKTtcbiAgfTtcblxuICAvLyBSZW1vdmUgdGhlIHN0YXRlIG9yIGluZm8gYm94ZXMgb2YgdGhlIGdpdmVuIG5vZGVzIGF0IGdpdmVuIGluZGV4LlxuICAvLyBDb25zaWRlcnMgdW5kb2FibGUgb3B0aW9uLlxuICBtYWluVXRpbGl0aWVzLnJlbW92ZVN0YXRlT3JJbmZvQm94ID0gZnVuY3Rpb24obm9kZXMsIGluZGV4KSB7XG4gICAgaWYgKG5vZGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghb3B0aW9ucy51bmRvYWJsZSkge1xuICAgICAgZWxlbWVudFV0aWxpdGllcy5yZW1vdmVTdGF0ZU9ySW5mb0JveChub2Rlcywge2luZGV4OiBpbmRleH0pO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHZhciBwYXJhbSA9IHtcbiAgICAgICAgbG9jYXRpb25PYmo6IHtpbmRleDogaW5kZXh9LFxuICAgICAgICBub2Rlczogbm9kZXNcbiAgICAgIH07XG5cbiAgICAgIGN5LnVuZG9SZWRvKCkuZG8oXCJyZW1vdmVTdGF0ZU9ySW5mb0JveFwiLCBwYXJhbSk7XG4gICAgfVxuXG4gICAgY3kuc3R5bGUoKS51cGRhdGUoKTtcbiAgfTtcblxuXG4gIC8vQXJyYW5nZSBpbmZvcm1hdGlvbiBib3hlc1xuICAvL0lmIGZvcmNlIGNoZWNrIGlzIHRydWUsIGl0IHJlYXJyYW5nZXMgYWxsIGluZm9ybWF0aW9uIGJveGVzXG4gIG1haW5VdGlsaXRpZXMuZml0VW5pdHMgPSBmdW5jdGlvbiAobm9kZSwgbG9jYXRpb25zKSB7XG4gICAgaWYgKG5vZGUuZGF0YSgnYXV4dW5pdGxheW91dHMnKSA9PT0gdW5kZWZpbmVkIHx8IG5vZGUuZGF0YSgnc3RhdGVzYW5kaW5mb3MnKS5sZW5ndGggPD0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAobG9jYXRpb25zID09PSB1bmRlZmluZWQgfHwgbG9jYXRpb25zLmxlbmd0aCA8PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCFvcHRpb25zLnVuZG9hYmxlKSB7XG4gICAgICBlbGVtZW50VXRpbGl0aWVzLmZpdFVuaXRzKG5vZGUsIGxvY2F0aW9ucyk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgdmFyIHBhcmFtID0ge1xuICAgICAgICBub2RlOiBub2RlLFxuICAgICAgICBsb2NhdGlvbnM6IGxvY2F0aW9uc1xuICAgICAgfTtcblxuICAgICAgY3kudW5kb1JlZG8oKS5kbyhcImZpdFVuaXRzXCIsIHBhcmFtKTtcbiAgICB9XG5cbiAgICBjeS5zdHlsZSgpLnVwZGF0ZSgpO1xuICB9O1xuXG4gIC8qXG4gICAqIFNldCBtdWx0aW1lciBzdGF0dXMgb2YgdGhlIGdpdmVuIG5vZGVzIHRvIHRoZSBnaXZlbiBzdGF0dXMuXG4gICAqIENvbnNpZGVycyB1bmRvYWJsZSBvcHRpb24uXG4gICAqL1xuICBtYWluVXRpbGl0aWVzLnNldE11bHRpbWVyU3RhdHVzID0gZnVuY3Rpb24obm9kZXMsIHN0YXR1cykge1xuICAgIGlmIChub2Rlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucy51bmRvYWJsZSkge1xuICAgICAgdmFyIHBhcmFtID0ge1xuICAgICAgICBzdGF0dXM6IHN0YXR1cyxcbiAgICAgICAgbm9kZXM6IG5vZGVzLFxuICAgICAgICBmaXJzdFRpbWU6IHRydWVcbiAgICAgIH07XG5cbiAgICAgIGN5LnVuZG9SZWRvKCkuZG8oXCJzZXRNdWx0aW1lclN0YXR1c1wiLCBwYXJhbSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgZWxlbWVudFV0aWxpdGllcy5zZXRNdWx0aW1lclN0YXR1cyhub2Rlcywgc3RhdHVzKTtcbiAgICB9XG5cbiAgICBjeS5zdHlsZSgpLnVwZGF0ZSgpO1xuICB9O1xuXG4gIC8qKlxuICAgKiBSZWRyYXcgY2xvbmUgbWFya2VycyBvbiBnaXZlbiBub2RlcyB3aXRob3V0IGNvbnNpZGVyaW5nIHVuZG8uXG4gICAqIFNlZSBodHRwczovL2dpdGh1Yi5jb20vaVZpcy1hdC1CaWxrZW50L25ld3QvaXNzdWVzLzU3NCBcbiAgICovXG4gIG1haW5VdGlsaXRpZXMucmVkcmF3Q2xvbmVNYXJrZXJzID0gZnVuY3Rpb24obm9kZXMpIHtcbiAgICBlbGVtZW50VXRpbGl0aWVzLnNldENsb25lTWFya2VyU3RhdHVzKG5vZGVzLCB0cnVlKTtcbiAgfVxuXG4gIC8qXG4gICAqIFNldCBjbG9uZSBtYXJrZXIgc3RhdHVzIG9mIGdpdmVuIG5vZGVzIHRvIHRoZSBnaXZlbiBzdGF0dXMuXG4gICAqIENvbnNpZGVycyB1bmRvYWJsZSBvcHRpb24uXG4gICAqL1xuICBtYWluVXRpbGl0aWVzLnNldENsb25lTWFya2VyU3RhdHVzID0gZnVuY3Rpb24obm9kZXMsIHN0YXR1cykge1xuICAgIGlmIChub2Rlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucy51bmRvYWJsZSkge1xuICAgICAgdmFyIHBhcmFtID0ge1xuICAgICAgICBzdGF0dXM6IHN0YXR1cyxcbiAgICAgICAgbm9kZXM6IG5vZGVzLFxuICAgICAgICBmaXJzdFRpbWU6IHRydWVcbiAgICAgIH07XG5cbiAgICAgIGN5LnVuZG9SZWRvKCkuZG8oXCJzZXRDbG9uZU1hcmtlclN0YXR1c1wiLCBwYXJhbSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgZWxlbWVudFV0aWxpdGllcy5zZXRDbG9uZU1hcmtlclN0YXR1cyhub2Rlcywgc3RhdHVzKTtcbiAgICB9XG5cbiAgICBjeS5zdHlsZSgpLnVwZGF0ZSgpO1xuICB9O1xuXG4gIC8qXG4gICAqIENoYW5nZSBzdHlsZS9jc3Mgb2YgZ2l2ZW4gZWxlcyBieSBzZXR0aW5nIGdldHRpbmcgcHJvcGVydHkgbmFtZSB0byB0aGUgZ2l2ZW4gZ2l2ZW4gdmFsdWUvdmFsdWVzIChOb3RlIHRoYXQgdmFsdWVNYXAgcGFyYW1ldGVyIG1heSBiZVxuICAgKiBhIHNpbmdsZSBzdHJpbmcgb3IgYW4gaWQgdG8gdmFsdWUgbWFwKS4gQ29uc2lkZXJzIHVuZG9hYmxlIG9wdGlvbi5cbiAgICovXG4gIG1haW5VdGlsaXRpZXMuY2hhbmdlQ3NzID0gZnVuY3Rpb24oZWxlcywgbmFtZSwgdmFsdWVNYXApIHtcbiAgICBpZiAoZWxlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIW9wdGlvbnMudW5kb2FibGUpIHtcbiAgICAgIGVsZW1lbnRVdGlsaXRpZXMuY2hhbmdlQ3NzKGVsZXMsIG5hbWUsIHZhbHVlTWFwKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICB2YXIgcGFyYW0gPSB7XG4gICAgICAgIGVsZXM6IGVsZXMsXG4gICAgICAgIHZhbHVlTWFwOiB2YWx1ZU1hcCxcbiAgICAgICAgbmFtZTogbmFtZVxuICAgICAgfTtcblxuICAgICAgY3kudW5kb1JlZG8oKS5kbyhcImNoYW5nZUNzc1wiLCBwYXJhbSk7XG4gICAgfVxuXG4gICAgY3kuc3R5bGUoKS51cGRhdGUoKTtcbiAgfTtcblxuICAvKlxuICAgKiBDaGFuZ2UgZGF0YSBvZiBnaXZlbiBlbGVzIGJ5IHNldHRpbmcgZ2V0dGluZyBwcm9wZXJ0eSBuYW1lIHRvIHRoZSBnaXZlbiBnaXZlbiB2YWx1ZS92YWx1ZXMgKE5vdGUgdGhhdCB2YWx1ZU1hcCBwYXJhbWV0ZXIgbWF5IGJlXG4gICAqIGEgc2luZ2xlIHN0cmluZyBvciBhbiBpZCB0byB2YWx1ZSBtYXApLiBDb25zaWRlcnMgdW5kb2FibGUgb3B0aW9uLlxuICAgKi9cbiAgbWFpblV0aWxpdGllcy5jaGFuZ2VEYXRhID0gZnVuY3Rpb24oZWxlcywgbmFtZSwgdmFsdWVNYXApIHtcbiAgICBpZiAoZWxlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIW9wdGlvbnMudW5kb2FibGUpIHtcbiAgICAgIGVsZW1lbnRVdGlsaXRpZXMuY2hhbmdlRGF0YShlbGVzLCBuYW1lLCB2YWx1ZU1hcCk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgdmFyIHBhcmFtID0ge1xuICAgICAgICBlbGVzOiBlbGVzLFxuICAgICAgICB2YWx1ZU1hcDogdmFsdWVNYXAsXG4gICAgICAgIG5hbWU6IG5hbWVcbiAgICAgIH07XG5cbiAgICAgIGN5LnVuZG9SZWRvKCkuZG8oXCJjaGFuZ2VEYXRhXCIsIHBhcmFtKTtcbiAgICB9XG5cbiAgICBjeS5zdHlsZSgpLnVwZGF0ZSgpO1xuICB9O1xuXG4gIG1haW5VdGlsaXRpZXMudXBkYXRlU2V0RmllbGQgPSBmdW5jdGlvbihlbGUsIGZpZWxkTmFtZSwgdG9EZWxldGUsIHRvQWRkLCBjYWxsYmFjaykge1xuICAgIGlmICghb3B0aW9ucy51bmRvYWJsZSkge1xuICAgICAgZWxlbWVudFV0aWxpdGllcy5jaGFuZ2VEYXRhKGVsZSwgZmllbGROYW1lLCB0b0RlbGV0ZSwgdG9BZGQsIGNhbGxiYWNrKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICB2YXIgcGFyYW0gPSB7XG4gICAgICAgIGVsZSxcbiAgICAgICAgZmllbGROYW1lLFxuICAgICAgICB0b0RlbGV0ZSxcbiAgICAgICAgdG9BZGQsXG4gICAgICAgIGNhbGxiYWNrXG4gICAgICB9O1xuXG4gICAgICBjeS51bmRvUmVkbygpLmRvKFwidXBkYXRlU2V0RmllbGRcIiwgcGFyYW0pO1xuICAgIH1cbiAgfTtcblxuICBtYWluVXRpbGl0aWVzLnNldERlZmF1bHRQcm9wZXJ0eSA9IGZ1bmN0aW9uKCBfY2xhc3MsIG5hbWUsIHZhbHVlICkge1xuICAgIGlmICghb3B0aW9ucy51bmRvYWJsZSkge1xuICAgICAgdmFyIHByb3BNYXAgPSB7fTtcbiAgICAgIHByb3BNYXBbIG5hbWUgXSA9IHZhbHVlO1xuXG4gICAgICBlbGVtZW50VXRpbGl0aWVzLnNldERlZmF1bHRQcm9wZXJ0aWVzKF9jbGFzcywgcHJvcE1hcCk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgdmFyIHBhcmFtID0ge1xuICAgICAgICBjbGFzczogX2NsYXNzLFxuICAgICAgICBuYW1lLFxuICAgICAgICB2YWx1ZVxuICAgICAgfTtcblxuICAgICAgY3kudW5kb1JlZG8oKS5kbyhcInNldERlZmF1bHRQcm9wZXJ0eVwiLCBwYXJhbSk7XG4gICAgfVxuICB9O1xuXG4gIG1haW5VdGlsaXRpZXMudXBkYXRlSW5mb2JveFN0eWxlID0gZnVuY3Rpb24oIG5vZGUsIGluZGV4LCBuZXdQcm9wcyApIHtcbiAgICBpZiAoIW9wdGlvbnMudW5kb2FibGUpIHtcbiAgICAgIGVsZW1lbnRVdGlsaXRpZXMudXBkYXRlSW5mb2JveFN0eWxlKCBub2RlLCBpbmRleCwgbmV3UHJvcHMgKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICB2YXIgcGFyYW0gPSB7XG4gICAgICAgIG5vZGU6IG5vZGUsXG4gICAgICAgIGluZGV4OiBpbmRleCxcbiAgICAgICAgbmV3UHJvcHM6IG5ld1Byb3BzXG4gICAgICB9O1xuXG4gICAgICBjeS51bmRvUmVkbygpLmRvKFwidXBkYXRlSW5mb2JveFN0eWxlXCIsIHBhcmFtKTtcbiAgICB9XG5cbiAgICBjeS5zdHlsZSgpLnVwZGF0ZSgpO1xuICB9O1xuXG4gIG1haW5VdGlsaXRpZXMudXBkYXRlSW5mb2JveE9iaiA9IGZ1bmN0aW9uKCBub2RlLCBpbmRleCwgbmV3UHJvcHMgKSB7XG4gICAgaWYgKCFvcHRpb25zLnVuZG9hYmxlKSB7XG4gICAgICBlbGVtZW50VXRpbGl0aWVzLnVwZGF0ZUluZm9ib3hPYmooIG5vZGUsIGluZGV4LCBuZXdQcm9wcyApO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHZhciBwYXJhbSA9IHtcbiAgICAgICAgbm9kZTogbm9kZSxcbiAgICAgICAgaW5kZXg6IGluZGV4LFxuICAgICAgICBuZXdQcm9wczogbmV3UHJvcHNcbiAgICAgIH07XG5cbiAgICAgIGN5LnVuZG9SZWRvKCkuZG8oXCJ1cGRhdGVJbmZvYm94T2JqXCIsIHBhcmFtKTtcbiAgICB9XG5cbiAgICBjeS5zdHlsZSgpLnVwZGF0ZSgpO1xuICB9O1xuXG4gIG1haW5VdGlsaXRpZXMuZGVsZXRlQW5kUGVyZm9ybUxheW91dCA9IGZ1bmN0aW9uIChlbGVzLCBsYXlvdXRwYXJhbSkge1xuICAgIHZhciBub2RlcyA9IGVsZXMubm9kZXMoKTsgLy8gRW5zdXJlIHRoYXQgbm9kZXMgbGlzdCBqdXN0IGluY2x1ZGUgbm9kZXNcblxuICAgIHZhciBhbGxOb2RlcyA9IGN5Lm5vZGVzKFwiOnZpc2libGVcIik7XG4gICAgdmFyIG5vZGVzVG9LZWVwID0gZWxlbWVudFV0aWxpdGllcy5leHRlbmRSZW1haW5pbmdOb2Rlcyhub2RlcywgYWxsTm9kZXMpO1xuICAgIHZhciBub2Rlc1RvUmVtb3ZlID0gYWxsTm9kZXMubm90KG5vZGVzVG9LZWVwKTtcblxuICAgIGlmIChub2Rlc1RvUmVtb3ZlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCFvcHRpb25zLnVuZG9hYmxlKSB7XG5cbiAgICAgICAgZWxlbWVudFV0aWxpdGllcy5kZWxldGVBbmRQZXJmb3JtTGF5b3V0KG5vZGVzVG9SZW1vdmUsIGxheW91dHBhcmFtKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHZhciBwYXJhbSA9IHtcbiAgICAgICAgICAgIGVsZXM6IG5vZGVzVG9SZW1vdmUsXG4gICAgICAgICAgICBsYXlvdXRwYXJhbTogbGF5b3V0cGFyYW0sXG4gICAgICAgICAgICBmaXJzdFRpbWU6IHRydWVcbiAgICAgICAgfTtcblxuICAgICAgICBjeS51bmRvUmVkbygpLmRvKFwiZGVsZXRlQW5kUGVyZm9ybUxheW91dFwiLCBwYXJhbSk7XG4gICAgfVxuICB9O1xuXG4gIC8qXG4gICAqIEhpZGVzIGdpdmVuIGVsZXMgKHRoZSBvbmVzIHdoaWNoIGFyZSBzZWxlY3RlZCkgYW5kIHBlcmZvcm0gZ2l2ZW4gbGF5b3V0IGFmdGVyd2FyZC4gTGF5b3V0IHBhcmFtZXRlciBtYXkgYmUgbGF5b3V0IG9wdGlvbnNcbiAgICogb3IgYSBmdW5jdGlvbiB0byBjYWxsLiBSZXF1aXJlcyB2aWV3VXRpbGl0aWVzIGV4dGVuc2lvbiBhbmQgY29uc2lkZXJzIHVuZG9hYmxlIG9wdGlvbi5cbiAgICovXG4gIG1haW5VdGlsaXRpZXMuaGlkZUFuZFBlcmZvcm1MYXlvdXQgPSBmdW5jdGlvbihlbGVzLCBsYXlvdXRwYXJhbSkge1xuICAgICAgdmFyIG5vZGVzID0gZWxlcy5ub2RlcygpOyAvLyBFbnN1cmUgdGhhdCBub2RlcyBsaXN0IGp1c3QgaW5jbHVkZSBub2Rlc1xuXG4gICAgICB2YXIgYWxsTm9kZXMgPSBjeS5ub2RlcyhcIjp2aXNpYmxlXCIpO1xuICAgICAgdmFyIG5vZGVzVG9TaG93ID0gZWxlbWVudFV0aWxpdGllcy5leHRlbmRSZW1haW5pbmdOb2Rlcyhub2RlcywgYWxsTm9kZXMpO1xuICAgICAgdmFyIG5vZGVzVG9IaWRlID0gYWxsTm9kZXMubm90KG5vZGVzVG9TaG93KTtcblxuICAgICAgaWYgKG5vZGVzVG9IaWRlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKCFvcHRpb25zLnVuZG9hYmxlKSB7XG5cbiAgICAgICAgICB2YXIgbm9kZXNXaXRoSGlkZGVuTmVpZ2hib3IgPSBjeS5lZGdlcyhcIjpoaWRkZW5cIikuY29ubmVjdGVkTm9kZXMoJzp2aXNpYmxlJyk7XG4gICAgICAgICAgc2JnbnZpekluc3RhbmNlLnRoaW5Cb3JkZXIobm9kZXNXaXRoSGlkZGVuTmVpZ2hib3IpO1xuICAgICAgICAgIGVsZW1lbnRVdGlsaXRpZXMuaGlkZUFuZFBlcmZvcm1MYXlvdXQobm9kZXNUb0hpZGUsIGxheW91dHBhcmFtKTtcbiAgICAgICAgICB2YXIgbm9kZXNXaXRoSGlkZGVuTmVpZ2hib3IgPSBjeS5lZGdlcyhcIjpoaWRkZW5cIikuY29ubmVjdGVkTm9kZXMoJzp2aXNpYmxlJyk7XG4gICAgICAgICAgc2JnbnZpekluc3RhbmNlLnRoaWNrZW5Cb3JkZXIobm9kZXNXaXRoSGlkZGVuTmVpZ2hib3IpO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgICAgdmFyIHBhcmFtID0ge1xuICAgICAgICAgICAgICBlbGVzOiBub2Rlc1RvSGlkZSxcbiAgICAgICAgICAgICAgbGF5b3V0cGFyYW06IGxheW91dHBhcmFtLFxuICAgICAgICAgICAgICBmaXJzdFRpbWU6IHRydWVcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgdmFyIHVyID0gY3kudW5kb1JlZG8oKTtcbiAgICAgICAgICB1ci5hY3Rpb24oXCJ0aGlja2VuQm9yZGVyXCIsIHNiZ252aXpJbnN0YW5jZS50aGlja2VuQm9yZGVyLCBzYmdudml6SW5zdGFuY2UudGhpbkJvcmRlcik7XG4gICAgICAgICAgdXIuYWN0aW9uKFwidGhpbkJvcmRlclwiLCBzYmdudml6SW5zdGFuY2UudGhpbkJvcmRlciwgc2JnbnZpekluc3RhbmNlLnRoaWNrZW5Cb3JkZXIpO1xuXG4gICAgICAgICAgdmFyIGFjdGlvbnMgPSBbXTtcbiAgICAgICAgICB2YXIgbm9kZXNXaXRoSGlkZGVuTmVpZ2hib3IgPSBjeS5lZGdlcyhcIjpoaWRkZW5cIikuY29ubmVjdGVkTm9kZXMoKS5pbnRlcnNlY3Rpb24obm9kZXNUb0hpZGUpO1xuICAgICAgICAgIGFjdGlvbnMucHVzaCh7bmFtZTogXCJ0aGluQm9yZGVyXCIsIHBhcmFtOiBub2Rlc1dpdGhIaWRkZW5OZWlnaGJvcn0pO1xuICAgICAgICAgIGFjdGlvbnMucHVzaCh7bmFtZTogXCJoaWRlQW5kUGVyZm9ybUxheW91dFwiLCBwYXJhbTogcGFyYW19KTtcbiAgICAgICAgICBub2Rlc1dpdGhIaWRkZW5OZWlnaGJvciA9IG5vZGVzVG9IaWRlLm5laWdoYm9yaG9vZChcIjp2aXNpYmxlXCIpLm5vZGVzKCkuZGlmZmVyZW5jZShub2Rlc1RvSGlkZSkuZGlmZmVyZW5jZShjeS5ub2RlcyhcIlt0aGlja0JvcmRlcl1cIikpO1xuICAgICAgICAgIGFjdGlvbnMucHVzaCh7bmFtZTogXCJ0aGlja2VuQm9yZGVyXCIsIHBhcmFtOiBub2Rlc1dpdGhIaWRkZW5OZWlnaGJvcn0pO1xuICAgICAgICAgIGN5LnVuZG9SZWRvKCkuZG8oXCJiYXRjaFwiLCBhY3Rpb25zKTtcbiAgICAgIH1cbiAgfTtcblxuICAvKlxuICAgKiBTaG93cyBhbGwgZWxlbWVudHMgKHRoZSBvbmVzIHdoaWNoIGFyZSBoaWRkZW4gaWYgYW55KSBhbmQgcGVyZm9ybSBnaXZlbiBsYXlvdXQgYWZ0ZXJ3YXJkLiBMYXlvdXQgcGFyYW1ldGVyIG1heSBiZSBsYXlvdXQgb3B0aW9uc1xuICAgKiBvciBhIGZ1bmN0aW9uIHRvIGNhbGwuIFJlcXVpcmVzIHZpZXdVdGlsaXRpZXMgZXh0ZW5zaW9uIGFuZCBjb25zaWRlcnMgdW5kb2FibGUgb3B0aW9uLlxuICAgKi9cbiAgbWFpblV0aWxpdGllcy5zaG93QWxsQW5kUGVyZm9ybUxheW91dCA9IGZ1bmN0aW9uKGxheW91dHBhcmFtKSB7XG4gICAgdmFyIGhpZGRlbkVsZXMgPSBjeS5lbGVtZW50cygnOmhpZGRlbicpO1xuICAgIGlmIChoaWRkZW5FbGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoIW9wdGlvbnMudW5kb2FibGUpIHtcbiAgICAgIHZhciBub2Rlc1dpdGhIaWRkZW5OZWlnaGJvciA9IGN5LmVkZ2VzKFwiOmhpZGRlblwiKS5jb25uZWN0ZWROb2RlcygnOnZpc2libGUnKTtcbiAgICAgIHNiZ252aXpJbnN0YW5jZS50aGluQm9yZGVyKG5vZGVzV2l0aEhpZGRlbk5laWdoYm9yKTtcbiAgICAgIGVsZW1lbnRVdGlsaXRpZXMuc2hvd0FuZFBlcmZvcm1MYXlvdXQoaGlkZGVuRWxlcywgbGF5b3V0cGFyYW0pO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHZhciBwYXJhbSA9IHtcbiAgICAgICAgZWxlczogaGlkZGVuRWxlcyxcbiAgICAgICAgbGF5b3V0cGFyYW06IGxheW91dHBhcmFtLFxuICAgICAgICBmaXJzdFRpbWU6IHRydWVcbiAgICAgIH07XG5cbiAgICAgIHZhciB1ciA9IGN5LnVuZG9SZWRvKCk7XG4gICAgICB1ci5hY3Rpb24oXCJ0aGlja2VuQm9yZGVyXCIsIHNiZ252aXpJbnN0YW5jZS50aGlja2VuQm9yZGVyLCBzYmdudml6SW5zdGFuY2UudGhpbkJvcmRlcik7XG4gICAgICB1ci5hY3Rpb24oXCJ0aGluQm9yZGVyXCIsIHNiZ252aXpJbnN0YW5jZS50aGluQm9yZGVyLCBzYmdudml6SW5zdGFuY2UudGhpY2tlbkJvcmRlcik7XG5cbiAgICAgIHZhciBhY3Rpb25zID0gW107XG4gICAgICB2YXIgbm9kZXNXaXRoSGlkZGVuTmVpZ2hib3IgPSBjeS5ub2RlcyhcIlt0aGlja0JvcmRlcl1cIik7XG4gICAgICBhY3Rpb25zLnB1c2goe25hbWU6IFwidGhpbkJvcmRlclwiLCBwYXJhbTogbm9kZXNXaXRoSGlkZGVuTmVpZ2hib3J9KTtcbiAgICAgIGFjdGlvbnMucHVzaCh7bmFtZTogXCJzaG93QW5kUGVyZm9ybUxheW91dFwiLCBwYXJhbTogcGFyYW19KTtcbiAgICAgIGN5LnVuZG9SZWRvKCkuZG8oXCJiYXRjaFwiLCBhY3Rpb25zKTtcbiAgICB9XG4gIH07XG5cbiAgLypcbiAgICogVW5oaWRlIGdpdmVuIGVsZXMgKHRoZSBvbmVzIHdoaWNoIGFyZSBoaWRkZW4gaWYgYW55KSBhbmQgcGVyZm9ybSBnaXZlbiBsYXlvdXQgYWZ0ZXJ3YXJkLiBMYXlvdXQgcGFyYW1ldGVyIG1heSBiZSBsYXlvdXQgb3B0aW9uc1xuICAgKiBvciBhIGZ1bmN0aW9uIHRvIGNhbGwuIFJlcXVpcmVzIHZpZXdVdGlsaXRpZXMgZXh0ZW5zaW9uIGFuZCBjb25zaWRlcnMgdW5kb2FibGUgb3B0aW9uLlxuICAgKi9cbiAgbWFpblV0aWxpdGllcy5zaG93QW5kUGVyZm9ybUxheW91dCA9IGZ1bmN0aW9uKG1haW5FbGUsIGVsZXMsIGxheW91dHBhcmFtKSB7XG4gICAgICB2YXIgaGlkZGVuRWxlcyA9IGVsZXMuZmlsdGVyKCc6aGlkZGVuJyk7XG4gICAgICBpZiAoaGlkZGVuRWxlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBtYWluVXRpbGl0aWVzLmNsb3NlVXBFbGVtZW50cyhtYWluRWxlLCBoaWRkZW5FbGVzLm5vZGVzKCkpO1xuICAgICAgaWYgKCFvcHRpb25zLnVuZG9hYmxlKSB7XG4gICAgICAgICAgdmFyIG5vZGVzV2l0aEhpZGRlbk5laWdoYm9yID0gY3kuZWRnZXMoXCI6aGlkZGVuXCIpLmNvbm5lY3RlZE5vZGVzKCc6dmlzaWJsZScpO1xuICAgICAgICAgIHNiZ252aXpJbnN0YW5jZS50aGluQm9yZGVyKG5vZGVzV2l0aEhpZGRlbk5laWdoYm9yKTtcbiAgICAgICAgICBlbGVtZW50VXRpbGl0aWVzLnNob3dBbmRQZXJmb3JtTGF5b3V0KGhpZGRlbkVsZXMsIGxheW91dHBhcmFtKTtcbiAgICAgICAgICB2YXIgbm9kZXNXaXRoSGlkZGVuTmVpZ2hib3IgPSBjeS5lZGdlcyhcIjpoaWRkZW5cIikuY29ubmVjdGVkTm9kZXMoJzp2aXNpYmxlJyk7XG4gICAgICAgICAgc2JnbnZpekluc3RhbmNlLnRoaWNrZW5Cb3JkZXIobm9kZXNXaXRoSGlkZGVuTmVpZ2hib3IpO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgICAgdmFyIHBhcmFtID0ge1xuICAgICAgICAgICAgICBlbGVzOiBoaWRkZW5FbGVzLFxuICAgICAgICAgICAgICBsYXlvdXRwYXJhbTogbGF5b3V0cGFyYW0sXG4gICAgICAgICAgICAgIGZpcnN0VGltZTogdHJ1ZVxuICAgICAgICAgIH07XG5cbiAgICAgICAgICB2YXIgdXIgPSBjeS51bmRvUmVkbygpO1xuICAgICAgICAgIHVyLmFjdGlvbihcInRoaWNrZW5Cb3JkZXJcIiwgc2JnbnZpekluc3RhbmNlLnRoaWNrZW5Cb3JkZXIsIHNiZ252aXpJbnN0YW5jZS50aGluQm9yZGVyKTtcbiAgICAgICAgICB1ci5hY3Rpb24oXCJ0aGluQm9yZGVyXCIsIHNiZ252aXpJbnN0YW5jZS50aGluQm9yZGVyLCBzYmdudml6SW5zdGFuY2UudGhpY2tlbkJvcmRlcik7XG5cbiAgICAgICAgICB2YXIgYWN0aW9ucyA9IFtdO1xuICAgICAgICAgIHZhciBub2Rlc1RvVGhpbkJvcmRlciA9IChoaWRkZW5FbGVzLm5laWdoYm9yaG9vZChcIjp2aXNpYmxlXCIpLm5vZGVzKFwiW3RoaWNrQm9yZGVyXVwiKSlcbiAgICAgICAgICAgICAgICAgIC5kaWZmZXJlbmNlKGN5LmVkZ2VzKFwiOmhpZGRlblwiKS5kaWZmZXJlbmNlKGhpZGRlbkVsZXMuZWRnZXMoKS51bmlvbihoaWRkZW5FbGVzLm5vZGVzKCkuY29ubmVjdGVkRWRnZXMoKSkpLmNvbm5lY3RlZE5vZGVzKCkpO1xuICAgICAgICAgIGFjdGlvbnMucHVzaCh7bmFtZTogXCJ0aGluQm9yZGVyXCIsIHBhcmFtOiBub2Rlc1RvVGhpbkJvcmRlcn0pO1xuICAgICAgICAgIGFjdGlvbnMucHVzaCh7bmFtZTogXCJzaG93QW5kUGVyZm9ybUxheW91dFwiLCBwYXJhbTogcGFyYW19KTtcbiAgICAgICAgICB2YXIgbm9kZXNUb1RoaWNrZW5Cb3JkZXIgPSBoaWRkZW5FbGVzLm5vZGVzKCkuZWRnZXNXaXRoKGN5Lm5vZGVzKFwiOmhpZGRlblwiKS5kaWZmZXJlbmNlKGhpZGRlbkVsZXMubm9kZXMoKSkpXG4gIFx0ICAgICAgICAgICAgLmNvbm5lY3RlZE5vZGVzKCkuaW50ZXJzZWN0aW9uKGhpZGRlbkVsZXMubm9kZXMoKSk7XG4gICAgICAgICAgYWN0aW9ucy5wdXNoKHtuYW1lOiBcInRoaWNrZW5Cb3JkZXJcIiwgcGFyYW06IG5vZGVzVG9UaGlja2VuQm9yZGVyfSk7XG4gICAgICAgICAgY3kudW5kb1JlZG8oKS5kbyhcImJhdGNoXCIsIGFjdGlvbnMpO1xuICAgICAgfVxuICB9O1xuXG4gIC8qXG4gICogVGFrZXMgdGhlIGhpZGRlbiBlbGVtZW50cyBjbG9zZSB0byB0aGUgbm9kZXMgd2hvc2UgbmVpZ2hib3JzIHdpbGwgYmUgc2hvd25cbiAgKiAqL1xuICBtYWluVXRpbGl0aWVzLmNsb3NlVXBFbGVtZW50cyA9IGZ1bmN0aW9uKG1haW5FbGUsIGhpZGRlbkVsZXMpIHtcbiAgICAgIHZhciBsZWZ0WCA9IE51bWJlci5NQVhfVkFMVUU7XG4gICAgICB2YXIgcmlnaHRYID0gTnVtYmVyLk1JTl9WQUxVRTtcbiAgICAgIHZhciB0b3BZID0gTnVtYmVyLk1BWF9WQUxVRTtcbiAgICAgIHZhciBib3R0b21ZID0gTnVtYmVyLk1JTl9WQUxVRTtcbiAgICAgIC8vIENoZWNrIHRoZSB4IGFuZCB5IGxpbWl0cyBvZiBhbGwgaGlkZGVuIGVsZW1lbnRzIGFuZCBzdG9yZSB0aGVtIGluIHRoZSB2YXJpYWJsZXMgYWJvdmVcbiAgICAgIGhpZGRlbkVsZXMuZm9yRWFjaChmdW5jdGlvbiggZWxlICl7XG4gICAgICAgICAgaWYgKGVsZS5kYXRhKCdjbGFzcycpICE9ICdjb21wYXJ0bWVudCcgJiYgIGVsZS5kYXRhKCdjbGFzcycpICE9ICdjb21wbGV4JylcbiAgICAgICAgICB7XG4gICAgICAgICAgICAgIHZhciBoYWxmV2lkdGggPSBlbGUub3V0ZXJXaWR0aCgpLzI7XG4gICAgICAgICAgICAgIHZhciBoYWxmSGVpZ2h0ID0gZWxlLm91dGVySGVpZ2h0KCkvMjtcbiAgICAgICAgICAgICAgaWYgKGVsZS5wb3NpdGlvbihcInhcIikgLSBoYWxmV2lkdGggPCBsZWZ0WClcbiAgICAgICAgICAgICAgICAgIGxlZnRYID0gZWxlLnBvc2l0aW9uKFwieFwiKSAtIGhhbGZXaWR0aDtcbiAgICAgICAgICAgICAgaWYgKGVsZS5wb3NpdGlvbihcInhcIikgKyBoYWxmV2lkdGggPiByaWdodFgpXG4gICAgICAgICAgICAgICAgICByaWdodFggPSBlbGUucG9zaXRpb24oXCJ4XCIpICsgaGFsZldpZHRoO1xuICAgICAgICAgICAgICBpZiAoZWxlLnBvc2l0aW9uKFwieVwiKSAtIGhhbGZIZWlnaHQgPCB0b3BZKVxuICAgICAgICAgICAgICAgICAgdG9wWSA9IGVsZS5wb3NpdGlvbihcInlcIikgLSBoYWxmSGVpZ2h0O1xuICAgICAgICAgICAgICBpZiAoZWxlLnBvc2l0aW9uKFwieVwiKSArIGhhbGZIZWlnaHQgPiB0b3BZKVxuICAgICAgICAgICAgICAgICAgYm90dG9tWSA9IGVsZS5wb3NpdGlvbihcInlcIikgKyBoYWxmSGVpZ2h0O1xuICAgICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICAvL1RoZSBjb29yZGluYXRlcyBvZiB0aGUgb2xkIGNlbnRlciBjb250YWluaW5nIHRoZSBoaWRkZW4gbm9kZXNcbiAgICAgIHZhciBvbGRDZW50ZXJYID0gKGxlZnRYICsgcmlnaHRYKS8yO1xuICAgICAgdmFyIG9sZENlbnRlclkgPSAodG9wWSArIGJvdHRvbVkpLzI7XG5cbiAgICAgIC8vSGVyZSB3ZSBjYWxjdWxhdGUgdHdvIHBhcmFtZXRlcnMgd2hpY2ggZGVmaW5lIHRoZSBhcmVhIGluIHdoaWNoIHRoZSBoaWRkZW4gZWxlbWVudHMgYXJlIHBsYWNlZCBpbml0aWFsbHlcbiAgICAgIHZhciBtaW5Ib3Jpem9udGFsUGFyYW0gPSBtYWluRWxlLm91dGVyV2lkdGgoKS8yICsgKHJpZ2h0WCAtIGxlZnRYKS8yO1xuICAgICAgdmFyIG1heEhvcml6b250YWxQYXJhbSA9IG1haW5FbGUub3V0ZXJXaWR0aCgpICsgKHJpZ2h0WCAtIGxlZnRYKS8yO1xuICAgICAgdmFyIG1pblZlcnRpY2FsUGFyYW0gPSBtYWluRWxlLm91dGVySGVpZ2h0KCkvMiArIChib3R0b21ZIC0gdG9wWSkvMjtcbiAgICAgIHZhciBtYXhWZXJ0aWNhbFBhcmFtID0gbWFpbkVsZS5vdXRlckhlaWdodCgpICsgKGJvdHRvbVkgLSB0b3BZKS8yO1xuXG4gICAgICAvL1F1YWRyYW50cyBpcyBhbiBvYmplY3Qgb2YgdGhlIGZvcm0ge2ZpcnN0Olwib2J0YWluZWRcIiwgc2Vjb25kOlwiZnJlZVwiLCB0aGlyZDpcImZyZWVcIiwgZm91cnRoOlwib2J0YWluZWRcIn1cbiAgICAgIC8vIHdoaWNoIGhvbGRzIHdoaWNoIHF1YWRyYW50IGFyZSBmcmVlICh0aGF0J3Mgd2hlcmUgaGlkZGVuIG5vZGVzIHdpbGwgYmUgYnJvdWdodClcbiAgICAgIHZhciBxdWFkcmFudHMgPSBtYWluVXRpbGl0aWVzLmNoZWNrT2NjdXBpZWRRdWFkcmFudHMobWFpbkVsZSwgaGlkZGVuRWxlcyk7XG4gICAgICB2YXIgZnJlZVF1YWRyYW50cyA9IFtdO1xuICAgICAgZm9yICh2YXIgcHJvcGVydHkgaW4gcXVhZHJhbnRzKSB7XG4gICAgICAgICAgaWYgKHF1YWRyYW50c1twcm9wZXJ0eV0gPT09IFwiZnJlZVwiKVxuICAgICAgICAgICAgICBmcmVlUXVhZHJhbnRzLnB1c2gocHJvcGVydHkpO1xuICAgICAgfVxuXG4gICAgICAvL0NhbiB0YWtlIHZhbHVlcyAxIGFuZCAtMSBhbmQgYXJlIHVzZWQgdG8gcGxhY2UgdGhlIGhpZGRlbiBub2RlcyBpbiB0aGUgcmFuZG9tIHF1YWRyYW50XG4gICAgICB2YXIgaG9yaXpvbnRhbE11bHQ7XG4gICAgICB2YXIgdmVydGljYWxNdWx0O1xuICAgICAgaWYgKGZyZWVRdWFkcmFudHMubGVuZ3RoID4gMClcbiAgICAgIHtcbiAgICAgICAgaWYgKGZyZWVRdWFkcmFudHMubGVuZ3RoID09PSAzKVxuICAgICAgICB7XG4gICAgICAgICAgaWYgKGZyZWVRdWFkcmFudHMuaW5jbHVkZXMoJ2ZpcnN0JykgJiYgZnJlZVF1YWRyYW50cy5pbmNsdWRlcygnc2Vjb25kJykgJiYgZnJlZVF1YWRyYW50cy5pbmNsdWRlcygndGhpcmQnKSlcbiAgICAgICAgICB7XG4gICAgICAgICAgICBob3Jpem9udGFsTXVsdCA9IC0xO1xuICAgICAgICAgICAgdmVydGljYWxNdWx0ID0gLTE7XG4gICAgICAgICAgfVxuICAgICAgICAgIGVsc2UgaWYgKGZyZWVRdWFkcmFudHMuaW5jbHVkZXMoJ2ZpcnN0JykgJiYgZnJlZVF1YWRyYW50cy5pbmNsdWRlcygnc2Vjb25kJykgJiYgZnJlZVF1YWRyYW50cy5pbmNsdWRlcygnZm91cnRoJykpXG4gICAgICAgICAge1xuICAgICAgICAgICAgaG9yaXpvbnRhbE11bHQgPSAxO1xuICAgICAgICAgICAgdmVydGljYWxNdWx0ID0gLTE7XG4gICAgICAgICAgfVxuICAgICAgICAgIGVsc2UgaWYgKGZyZWVRdWFkcmFudHMuaW5jbHVkZXMoJ2ZpcnN0JykgJiYgZnJlZVF1YWRyYW50cy5pbmNsdWRlcygndGhpcmQnKSAmJiBmcmVlUXVhZHJhbnRzLmluY2x1ZGVzKCdmb3VydGgnKSlcbiAgICAgICAgICB7XG4gICAgICAgICAgICBob3Jpem9udGFsTXVsdCA9IDE7XG4gICAgICAgICAgICB2ZXJ0aWNhbE11bHQgPSAxO1xuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIGlmIChmcmVlUXVhZHJhbnRzLmluY2x1ZGVzKCdzZWNvbmQnKSAmJiBmcmVlUXVhZHJhbnRzLmluY2x1ZGVzKCd0aGlyZCcpICYmIGZyZWVRdWFkcmFudHMuaW5jbHVkZXMoJ2ZvdXJ0aCcpKVxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGhvcml6b250YWxNdWx0ID0gLTE7XG4gICAgICAgICAgICB2ZXJ0aWNhbE11bHQgPSAxO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAvL1JhbmRvbWx5IHBpY2tzIG9uZSBxdWFkcmFudCBmcm9tIHRoZSBmcmVlIHF1YWRyYW50c1xuICAgICAgICAgIHZhciByYW5kb21RdWFkcmFudCA9IGZyZWVRdWFkcmFudHNbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKmZyZWVRdWFkcmFudHMubGVuZ3RoKV07XG5cbiAgICAgICAgICBpZiAocmFuZG9tUXVhZHJhbnQgPT09IFwiZmlyc3RcIikge1xuICAgICAgICAgICAgICBob3Jpem9udGFsTXVsdCA9IDE7XG4gICAgICAgICAgICAgIHZlcnRpY2FsTXVsdCA9IC0xO1xuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIGlmIChyYW5kb21RdWFkcmFudCA9PT0gXCJzZWNvbmRcIikge1xuICAgICAgICAgICAgICBob3Jpem9udGFsTXVsdCA9IC0xO1xuICAgICAgICAgICAgICB2ZXJ0aWNhbE11bHQgPSAtMTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSBpZiAocmFuZG9tUXVhZHJhbnQgPT09IFwidGhpcmRcIikge1xuICAgICAgICAgICAgICBob3Jpem9udGFsTXVsdCA9IC0xO1xuICAgICAgICAgICAgICB2ZXJ0aWNhbE11bHQgPSAxO1xuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIGlmIChyYW5kb21RdWFkcmFudCA9PT0gXCJmb3VydGhcIikge1xuICAgICAgICAgICAgICBob3Jpem9udGFsTXVsdCA9IDE7XG4gICAgICAgICAgICAgIHZlcnRpY2FsTXVsdCA9IDE7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBlbHNlXG4gICAgICB7XG4gICAgICAgICAgaG9yaXpvbnRhbE11bHQgPSAwO1xuICAgICAgICAgIHZlcnRpY2FsTXVsdCA9IDA7XG4gICAgICB9XG4gICAgICAvLyBJZiB0aGUgaG9yaXpvbnRhbE11bHQgaXMgMCBpdCBtZWFucyB0aGF0IG5vIHF1YWRyYW50IGlzIGZyZWUsIHNvIHdlIHJhbmRvbWx5IGNob29zZSBhIHF1YWRyYW50XG4gICAgICB2YXIgaG9yaXpvbnRhbFBhcmFtID0gbWFpblV0aWxpdGllcy5nZW5lcmF0ZVJhbmRvbShtaW5Ib3Jpem9udGFsUGFyYW0sbWF4SG9yaXpvbnRhbFBhcmFtLGhvcml6b250YWxNdWx0KTtcbiAgICAgIHZhciB2ZXJ0aWNhbFBhcmFtID0gbWFpblV0aWxpdGllcy5nZW5lcmF0ZVJhbmRvbShtaW5WZXJ0aWNhbFBhcmFtLG1heFZlcnRpY2FsUGFyYW0sdmVydGljYWxNdWx0KTtcblxuICAgICAgLy9UaGUgY29vcmRpbmF0ZXMgb2YgdGhlIGNlbnRlciB3aGVyZSB0aGUgaGlkZGVuIG5vZGVzIHdpbGwgYmUgdHJhbnNmZXJlZFxuICAgICAgdmFyIG5ld0NlbnRlclggPSBtYWluRWxlLnBvc2l0aW9uKFwieFwiKSArIGhvcml6b250YWxQYXJhbTtcbiAgICAgIHZhciBuZXdDZW50ZXJZID0gbWFpbkVsZS5wb3NpdGlvbihcInlcIikgKyB2ZXJ0aWNhbFBhcmFtO1xuXG4gICAgICB2YXIgeGRpZmYgPSBuZXdDZW50ZXJYIC0gb2xkQ2VudGVyWDtcbiAgICAgIHZhciB5ZGlmZiA9IG5ld0NlbnRlclkgLSBvbGRDZW50ZXJZO1xuXG4gICAgICAvL0NoYW5nZSB0aGUgcG9zaXRpb24gb2YgaGlkZGVuIGVsZW1lbnRzXG4gICAgICBoaWRkZW5FbGVzLmZvckVhY2goZnVuY3Rpb24oIGVsZSApe1xuICAgICAgICAgIHZhciBuZXd4ID0gZWxlLnBvc2l0aW9uKFwieFwiKSArIHhkaWZmO1xuICAgICAgICAgIHZhciBuZXd5ID0gZWxlLnBvc2l0aW9uKFwieVwiKSArIHlkaWZmO1xuICAgICAgICAgIGVsZS5wb3NpdGlvbihcInhcIiwgbmV3eCk7XG4gICAgICAgICAgZWxlLnBvc2l0aW9uKFwieVwiLG5ld3kpO1xuICAgICAgfSk7XG4gIH07XG5cbiAgLypcbiAgICogR2VuZXJhdGVzIGEgbnVtYmVyIGJldHdlZW4gMiBuciBhbmQgbXVsdGltcGxpZXMgaXQgd2l0aCAxIG9yIC0xXG4gICAqICovXG4gIG1haW5VdGlsaXRpZXMuZ2VuZXJhdGVSYW5kb20gPSBmdW5jdGlvbihtaW4sIG1heCwgbXVsdCkge1xuICAgICAgdmFyIHZhbCA9IFstMSwxXTtcbiAgICAgIGlmIChtdWx0ID09PSAwKVxuICAgICAgICAgIG11bHQgPSB2YWxbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKnZhbC5sZW5ndGgpXTtcbiAgICAgIHJldHVybiAoTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogKG1heCAtIG1pbiArIDEpKSArIG1pbikgKiBtdWx0O1xuICB9O1xuXG4gIC8qXG4gICAqIFRoaXMgZnVuY3Rpb24gbWFrZXMgc3VyZSB0aGF0IHRoZSByYW5kb20gbnVtYmVyIGxpZXMgaW4gZnJlZSBxdWFkcmFudFxuICAgKiAqL1xuICBtYWluVXRpbGl0aWVzLmNoZWNrT2NjdXBpZWRRdWFkcmFudHMgPSBmdW5jdGlvbihtYWluRWxlLCBoaWRkZW5FbGVzKSB7XG4gICAgICBpZiAoZWxlbWVudFV0aWxpdGllcy5nZXRNYXBUeXBlKCkgPT0gJ1BEJylcbiAgICAgIHtcbiAgICAgICAgdmFyIHZpc2libGVOZWlnaGJvckVsZXMgPSBtYWluRWxlLm5laWdoYm9yaG9vZCgpLmRpZmZlcmVuY2UoaGlkZGVuRWxlcykubm9kZXMoKTtcbiAgICAgICAgdmFyIHZpc2libGVOZWlnaGJvcnNPZk5laWdoYm9ycyA9IHZpc2libGVOZWlnaGJvckVsZXMubmVpZ2hib3Job29kKCkuZGlmZmVyZW5jZShoaWRkZW5FbGVzKS5kaWZmZXJlbmNlKG1haW5FbGUpLm5vZGVzKCk7XG4gICAgICAgIHZhciB2aXNpYmxlRWxlcyA9IHZpc2libGVOZWlnaGJvckVsZXMudW5pb24odmlzaWJsZU5laWdoYm9yc09mTmVpZ2hib3JzKTtcbiAgICAgIH1cbiAgICAgIGVsc2VcbiAgICAgICAgdmFyIHZpc2libGVFbGVzID0gbWFpbkVsZS5uZWlnaGJvcmhvb2QoKS5kaWZmZXJlbmNlKGhpZGRlbkVsZXMpLm5vZGVzKCk7XG4gICAgICB2YXIgb2NjdXBpZWRRdWFkcmFudHMgPSB7Zmlyc3Q6XCJmcmVlXCIsIHNlY29uZDpcImZyZWVcIiwgdGhpcmQ6XCJmcmVlXCIsIGZvdXJ0aDpcImZyZWVcIn07XG5cbiAgICAgIHZpc2libGVFbGVzLmZvckVhY2goZnVuY3Rpb24oIGVsZSApe1xuICAgICAgICAgIGlmIChlbGUuZGF0YSgnY2xhc3MnKSAhPSAnY29tcGFydG1lbnQnICYmICBlbGUuZGF0YSgnY2xhc3MnKSAhPSAnY29tcGxleCcpXG4gICAgICAgICAge1xuICAgICAgICAgICAgICBpZiAoZWxlLnBvc2l0aW9uKFwieFwiKSA8IG1haW5FbGUucG9zaXRpb24oXCJ4XCIpICYmIGVsZS5wb3NpdGlvbihcInlcIikgPCBtYWluRWxlLnBvc2l0aW9uKFwieVwiKSlcbiAgICAgICAgICAgICAgICAgIG9jY3VwaWVkUXVhZHJhbnRzLnNlY29uZCA9IFwib2NjdXBpZWRcIjtcbiAgICAgICAgICAgICAgZWxzZSBpZiAoZWxlLnBvc2l0aW9uKFwieFwiKSA+IG1haW5FbGUucG9zaXRpb24oXCJ4XCIpICYmIGVsZS5wb3NpdGlvbihcInlcIikgPCBtYWluRWxlLnBvc2l0aW9uKFwieVwiKSlcbiAgICAgICAgICAgICAgICAgIG9jY3VwaWVkUXVhZHJhbnRzLmZpcnN0ID0gXCJvY2N1cGllZFwiO1xuICAgICAgICAgICAgICBlbHNlIGlmIChlbGUucG9zaXRpb24oXCJ4XCIpIDwgbWFpbkVsZS5wb3NpdGlvbihcInhcIikgJiYgZWxlLnBvc2l0aW9uKFwieVwiKSA+IG1haW5FbGUucG9zaXRpb24oXCJ5XCIpKVxuICAgICAgICAgICAgICAgICAgb2NjdXBpZWRRdWFkcmFudHMudGhpcmQgPSBcIm9jY3VwaWVkXCI7XG4gICAgICAgICAgICAgIGVsc2UgaWYgKGVsZS5wb3NpdGlvbihcInhcIikgPiBtYWluRWxlLnBvc2l0aW9uKFwieFwiKSAmJiBlbGUucG9zaXRpb24oXCJ5XCIpID4gbWFpbkVsZS5wb3NpdGlvbihcInlcIikpXG4gICAgICAgICAgICAgICAgICBvY2N1cGllZFF1YWRyYW50cy5mb3VydGggPSBcIm9jY3VwaWVkXCI7XG4gICAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICByZXR1cm4gb2NjdXBpZWRRdWFkcmFudHM7XG4gIH07XG5cbiAgLy8gT3ZlcnJpZGVzIGhpZ2hsaWdodFByb2Nlc3NlcyBmcm9tIFNCR05WSVogLSBkbyBub3QgaGlnaGxpZ2h0IGFueSBub2RlcyB3aGVuIHRoZSBtYXAgdHlwZSBpcyBBRlxuICBtYWluVXRpbGl0aWVzLmhpZ2hsaWdodFByb2Nlc3NlcyA9IGZ1bmN0aW9uKF9ub2Rlcykge1xuICAgIGlmIChlbGVtZW50VXRpbGl0aWVzLmdldE1hcFR5cGUoKSA9PSBcIkFGXCIpXG4gICAgICByZXR1cm47XG4gICAgc2JnbnZpekluc3RhbmNlLmhpZ2hsaWdodFByb2Nlc3Nlcyhfbm9kZXMpO1xuICB9O1xuXG4gIC8qKlxuICAgKiBSZXNldHMgbWFwIHR5cGUgdG8gdW5kZWZpbmVkXG4gICAqL1xuICBtYWluVXRpbGl0aWVzLnJlc2V0TWFwVHlwZSA9IGZ1bmN0aW9uKCl7XG4gICAgZWxlbWVudFV0aWxpdGllcy5yZXNldE1hcFR5cGUoKTtcbiAgfTtcblxuICAvKipcbiAgICogcmV0dXJuIDogbWFwIHR5cGVcbiAgICovXG4gIG1haW5VdGlsaXRpZXMuZ2V0TWFwVHlwZSA9IGZ1bmN0aW9uKCl7XG4gICAgcmV0dXJuIGVsZW1lbnRVdGlsaXRpZXMuZ2V0TWFwVHlwZSgpO1xuICB9O1xuXG4gIG1haW5VdGlsaXRpZXMuYWRkQmFja2dyb3VuZEltYWdlID0gZnVuY3Rpb24obm9kZXMsIGJnT2JqLCB1cGRhdGVJbmZvLCBwcm9tcHRJbnZhbGlkSW1hZ2UsIHZhbGlkYXRlVVJMKXtcbiAgICBpZiAobm9kZXMubGVuZ3RoID09PSAwIHx8ICFiZ09iaikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGJnT2JqWydmaXJzdFRpbWUnXSA9IHRydWU7XG4gICAgaWYgKG9wdGlvbnMudW5kb2FibGUpIHtcbiAgICAgIHZhciBwYXJhbSA9IHtcbiAgICAgICAgYmdPYmo6IGJnT2JqLFxuICAgICAgICBub2Rlczogbm9kZXMsXG4gICAgICAgIHVwZGF0ZUluZm86IHVwZGF0ZUluZm8sXG4gICAgICAgIHByb21wdEludmFsaWRJbWFnZTogcHJvbXB0SW52YWxpZEltYWdlLFxuICAgICAgICB2YWxpZGF0ZVVSTDogdmFsaWRhdGVVUkwsXG4gICAgICB9O1xuXG4gICAgICBjeS51bmRvUmVkbygpLmRvKFwiYWRkQmFja2dyb3VuZEltYWdlXCIsIHBhcmFtKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBlbGVtZW50VXRpbGl0aWVzLmFkZEJhY2tncm91bmRJbWFnZShub2RlcywgYmdPYmosIHVwZGF0ZUluZm8sIHByb21wdEludmFsaWRJbWFnZSwgdmFsaWRhdGVVUkwpO1xuICAgIH1cblxuICAgIGN5LnN0eWxlKCkudXBkYXRlKCk7XG4gIH1cblxuICBtYWluVXRpbGl0aWVzLnJlbW92ZUJhY2tncm91bmRJbWFnZSA9IGZ1bmN0aW9uKG5vZGVzLCBiZ09iail7XG4gICAgaWYgKG5vZGVzLmxlbmd0aCA9PT0gMCB8fCAhYmdPYmopIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBiZ09ialsnZmlyc3RUaW1lJ10gPSB0cnVlO1xuICAgIGlmIChvcHRpb25zLnVuZG9hYmxlKSB7XG4gICAgICB2YXIgcGFyYW0gPSB7XG4gICAgICAgIGJnT2JqOiBiZ09iaixcbiAgICAgICAgbm9kZXM6IG5vZGVzXG4gICAgICB9O1xuXG4gICAgICBjeS51bmRvUmVkbygpLmRvKFwicmVtb3ZlQmFja2dyb3VuZEltYWdlXCIsIHBhcmFtKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBlbGVtZW50VXRpbGl0aWVzLnJlbW92ZUJhY2tncm91bmRJbWFnZShub2RlcywgYmdPYmopO1xuICAgIH1cblxuICAgIGN5LnN0eWxlKCkudXBkYXRlKCk7XG4gIH1cblxuICBtYWluVXRpbGl0aWVzLnVwZGF0ZUJhY2tncm91bmRJbWFnZSA9IGZ1bmN0aW9uKG5vZGVzLCBiZ09iail7XG4gICAgaWYgKG5vZGVzLmxlbmd0aCA9PT0gMCB8fCAhYmdPYmopIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucy51bmRvYWJsZSkge1xuICAgICAgdmFyIHBhcmFtID0ge1xuICAgICAgICBiZ09iajogYmdPYmosXG4gICAgICAgIG5vZGVzOiBub2Rlc1xuICAgICAgfTtcblxuICAgICAgY3kudW5kb1JlZG8oKS5kbyhcInVwZGF0ZUJhY2tncm91bmRJbWFnZVwiLCBwYXJhbSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgZWxlbWVudFV0aWxpdGllcy51cGRhdGVCYWNrZ3JvdW5kSW1hZ2Uobm9kZXMsIGJnT2JqKTtcbiAgICB9XG5cbiAgICBjeS5zdHlsZSgpLnVwZGF0ZSgpO1xuICB9XG5cbiAgbWFpblV0aWxpdGllcy5jaGFuZ2VCYWNrZ3JvdW5kSW1hZ2UgPSBmdW5jdGlvbihub2Rlcywgb2xkSW1nLCBuZXdJbWcsIHVwZGF0ZUluZm8sIHByb21wdEludmFsaWRJbWFnZSwgdmFsaWRhdGVVUkwpe1xuICAgIGlmIChub2Rlcy5sZW5ndGggPT09IDAgfHwgIW9sZEltZyB8fCAhbmV3SW1nKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMudW5kb2FibGUpIHtcbiAgICAgIHZhciBwYXJhbSA9IHtcbiAgICAgICAgb2xkSW1nOiBvbGRJbWcsXG4gICAgICAgIG5ld0ltZzogbmV3SW1nLFxuICAgICAgICBub2Rlczogbm9kZXMsXG4gICAgICAgIGZpcnN0VGltZTogdHJ1ZSxcbiAgICAgICAgdXBkYXRlSW5mbzogdXBkYXRlSW5mbyxcbiAgICAgICAgcHJvbXB0SW52YWxpZEltYWdlOiBwcm9tcHRJbnZhbGlkSW1hZ2UsXG4gICAgICAgIHZhbGlkYXRlVVJMOiB2YWxpZGF0ZVVSTFxuICAgICAgfTtcblxuICAgICAgY3kudW5kb1JlZG8oKS5kbyhcImNoYW5nZUJhY2tncm91bmRJbWFnZVwiLCBwYXJhbSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgZWxlbWVudFV0aWxpdGllcy5jaGFuZ2VCYWNrZ3JvdW5kSW1hZ2Uobm9kZXMsIG9sZEltZywgbmV3SW1nLCB0cnVlLCB1cGRhdGVJbmZvLCBwcm9tcHRJbnZhbGlkSW1hZ2UsIHZhbGlkYXRlVVJMKTtcbiAgICB9XG5cbiAgICBjeS5zdHlsZSgpLnVwZGF0ZSgpO1xuICB9XG5cbiAgcmV0dXJuIG1haW5VdGlsaXRpZXM7XG59O1xuIiwiLypcbiAqICBFeHRlbmQgZGVmYXVsdCBvcHRpb25zIGFuZCBnZXQgY3VycmVudCBvcHRpb25zIGJ5IHVzaW5nIHRoaXMgZmlsZVxuICovXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuXG4gIC8vIGRlZmF1bHQgb3B0aW9uc1xuICB2YXIgZGVmYXVsdHMgPSB7XG4gICAgLy8gVGhlIHBhdGggb2YgY29yZSBsaWJyYXJ5IGltYWdlcyB3aGVuIHNiZ252aXogaXMgcmVxdWlyZWQgZnJvbSBucG0gYW5kIHRoZSBpbmRleCBodG1sXG4gICAgLy8gZmlsZSBhbmQgbm9kZV9tb2R1bGVzIGFyZSB1bmRlciB0aGUgc2FtZSBmb2xkZXIgdGhlbiB1c2luZyB0aGUgZGVmYXVsdCB2YWx1ZSBpcyBmaW5lXG4gICAgaW1nUGF0aDogJ25vZGVfbW9kdWxlcy9zYmdudml6L3NyYy9pbWcnLFxuICAgIC8vIFdoZXRoZXIgdG8gZml0IGxhYmVscyB0byBub2Rlc1xuICAgIGZpdExhYmVsc1RvTm9kZXM6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9LFxuICAgIGZpdExhYmVsc1RvSW5mb2JveGVzOiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSxcbiAgICAvLyBkeW5hbWljIGxhYmVsIHNpemUgaXQgbWF5IGJlICdzbWFsbCcsICdyZWd1bGFyJywgJ2xhcmdlJ1xuICAgIGR5bmFtaWNMYWJlbFNpemU6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiAncmVndWxhcic7XG4gICAgfSxcbiAgICAvLyBXaGV0aGVyIHRvIGluZmVyIG5lc3Rpbmcgb24gbG9hZCBcbiAgICBpbmZlck5lc3RpbmdPbkxvYWQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9LFxuICAgIC8vIHBlcmNlbnRhZ2UgdXNlZCB0byBjYWxjdWxhdGUgY29tcG91bmQgcGFkZGluZ3NcbiAgICBjb21wb3VuZFBhZGRpbmc6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiAxMDtcbiAgICB9LFxuICAgIC8vIFRoZSBzZWxlY3RvciBvZiB0aGUgY29tcG9uZW50IGNvbnRhaW5pbmcgdGhlIHNiZ24gbmV0d29ya1xuICAgIG5ldHdvcmtDb250YWluZXJTZWxlY3RvcjogJyNzYmduLW5ldHdvcmstY29udGFpbmVyJyxcbiAgICAvLyBXaGV0aGVyIHRoZSBhY3Rpb25zIGFyZSB1bmRvYWJsZSwgcmVxdWlyZXMgY3l0b3NjYXBlLXVuZG8tcmVkbyBleHRlbnNpb25cbiAgICB1bmRvYWJsZTogdHJ1ZSxcbiAgICAvLyBXaGV0aGVyIHRvIGhhdmUgdW5kb2FibGUgZHJhZyBmZWF0dXJlIGluIHVuZG8vcmVkbyBleHRlbnNpb24uIFRoaXMgb3B0aW9ucyB3aWxsIGJlIHBhc3NlZCB0byB1bmRvL3JlZG8gZXh0ZW5zaW9uXG4gICAgdW5kb2FibGVEcmFnOiB0cnVlXG4gIH07XG5cbiAgdmFyIG9wdGlvblV0aWxpdGllcyA9IGZ1bmN0aW9uICgpIHtcbiAgfTtcblxuICAvLyBFeHRlbmQgdGhlIGRlZmF1bHRzIG9wdGlvbnMgd2l0aCB0aGUgdXNlciBvcHRpb25zXG4gIG9wdGlvblV0aWxpdGllcy5leHRlbmRPcHRpb25zID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICB2YXIgcmVzdWx0ID0ge307XG5cbiAgICBmb3IgKHZhciBwcm9wIGluIGRlZmF1bHRzKSB7XG4gICAgICByZXN1bHRbcHJvcF0gPSBkZWZhdWx0c1twcm9wXTtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBwcm9wIGluIG9wdGlvbnMpIHtcbiAgICAgIHJlc3VsdFtwcm9wXSA9IG9wdGlvbnNbcHJvcF07XG4gICAgfVxuXG4gICAgb3B0aW9uVXRpbGl0aWVzLm9wdGlvbnMgPSByZXN1bHQ7XG5cbiAgICByZXR1cm4gb3B0aW9ucztcbiAgfTtcblxuICBvcHRpb25VdGlsaXRpZXMuZ2V0T3B0aW9ucyA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gb3B0aW9uVXRpbGl0aWVzLm9wdGlvbnM7XG4gIH07XG5cbiAgcmV0dXJuIG9wdGlvblV0aWxpdGllcztcbn07XG4iLCJ2YXIgbGlicyA9IHJlcXVpcmUoJy4vbGliLXV0aWxpdGllcycpLmdldExpYnMoKTtcbnZhciAkID0gbGlicy5qUXVlcnk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuXG4gIHZhciB1bmRvUmVkb0FjdGlvbkZ1bmN0aW9ucywgb3B0aW9ucywgY3k7XG5cbiAgdmFyIHJlZ2lzdGVyVW5kb1JlZG9BY3Rpb25zID0gZnVuY3Rpb24gKHBhcmFtKSB7XG5cbiAgICB1bmRvUmVkb0FjdGlvbkZ1bmN0aW9ucyA9IHBhcmFtLnVuZG9SZWRvQWN0aW9uRnVuY3Rpb25zO1xuICAgIG9wdGlvbnMgPSBwYXJhbS5vcHRpb25VdGlsaXRpZXMuZ2V0T3B0aW9ucygpO1xuICAgIGN5ID0gcGFyYW0uc2JnbnZpekluc3RhbmNlVXRpbGl0aWVzLmdldEN5KCk7XG5cbiAgICBpZiAoIW9wdGlvbnMudW5kb2FibGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBjcmVhdGUgdW5kby1yZWRvIGluc3RhbmNlXG4gICAgdmFyIHVyID0gY3kudW5kb1JlZG8oe1xuICAgICAgdW5kb2FibGVEcmFnOiBvcHRpb25zLnVuZG9hYmxlRHJhZ1xuICAgIH0pO1xuXG4gICAgLy8gcmVnaXN0ZXIgYWRkIHJlbW92ZSBhY3Rpb25zXG4gICAgdXIuYWN0aW9uKFwiYWRkTm9kZVwiLCB1bmRvUmVkb0FjdGlvbkZ1bmN0aW9ucy5hZGROb2RlLCB1bmRvUmVkb0FjdGlvbkZ1bmN0aW9ucy5kZWxldGVFbGVzU2ltcGxlKTtcbiAgICB1ci5hY3Rpb24oXCJkZWxldGVFbGVzU2ltcGxlXCIsIHVuZG9SZWRvQWN0aW9uRnVuY3Rpb25zLmRlbGV0ZUVsZXNTaW1wbGUsIHVuZG9SZWRvQWN0aW9uRnVuY3Rpb25zLnJlc3RvcmVFbGVzKTtcbiAgICB1ci5hY3Rpb24oXCJhZGRFZGdlXCIsIHVuZG9SZWRvQWN0aW9uRnVuY3Rpb25zLmFkZEVkZ2UsIHVuZG9SZWRvQWN0aW9uRnVuY3Rpb25zLmRlbGV0ZUVsZXNTaW1wbGUpO1xuICAgIHVyLmFjdGlvbihcImFkZFByb2Nlc3NXaXRoQ29udmVuaWVudEVkZ2VzXCIsIHVuZG9SZWRvQWN0aW9uRnVuY3Rpb25zLmFkZFByb2Nlc3NXaXRoQ29udmVuaWVudEVkZ2VzLCB1bmRvUmVkb0FjdGlvbkZ1bmN0aW9ucy5kZWxldGVFbGVzU2ltcGxlKTtcbiAgICB1ci5hY3Rpb24oXCJkZWxldGVFbGVzU21hcnRcIiwgdW5kb1JlZG9BY3Rpb25GdW5jdGlvbnMuZGVsZXRlRWxlc1NtYXJ0LCB1bmRvUmVkb0FjdGlvbkZ1bmN0aW9ucy5yZXN0b3JlRWxlcyk7XG4gICAgdXIuYWN0aW9uKFwiY3JlYXRlQ29tcG91bmRGb3JHaXZlbk5vZGVzXCIsIHVuZG9SZWRvQWN0aW9uRnVuY3Rpb25zLmNyZWF0ZUNvbXBvdW5kRm9yR2l2ZW5Ob2RlcywgdW5kb1JlZG9BY3Rpb25GdW5jdGlvbnMuY3JlYXRlQ29tcG91bmRGb3JHaXZlbk5vZGVzKTtcblxuICAgIC8vIHJlZ2lzdGVyIGdlbmVyYWwgYWN0aW9uc1xuICAgIHVyLmFjdGlvbihcInJlc2l6ZU5vZGVzXCIsIHVuZG9SZWRvQWN0aW9uRnVuY3Rpb25zLnJlc2l6ZU5vZGVzLCB1bmRvUmVkb0FjdGlvbkZ1bmN0aW9ucy5yZXNpemVOb2Rlcyk7XG4gICAgdXIuYWN0aW9uKFwiY2hhbmdlTm9kZUxhYmVsXCIsIHVuZG9SZWRvQWN0aW9uRnVuY3Rpb25zLmNoYW5nZU5vZGVMYWJlbCwgdW5kb1JlZG9BY3Rpb25GdW5jdGlvbnMuY2hhbmdlTm9kZUxhYmVsKTtcbiAgICB1ci5hY3Rpb24oXCJjaGFuZ2VEYXRhXCIsIHVuZG9SZWRvQWN0aW9uRnVuY3Rpb25zLmNoYW5nZURhdGEsIHVuZG9SZWRvQWN0aW9uRnVuY3Rpb25zLmNoYW5nZURhdGEpO1xuICAgIHVyLmFjdGlvbihcInVwZGF0ZVNldEZpZWxkXCIsIHVuZG9SZWRvQWN0aW9uRnVuY3Rpb25zLnVwZGF0ZVNldEZpZWxkLCB1bmRvUmVkb0FjdGlvbkZ1bmN0aW9ucy51cGRhdGVTZXRGaWVsZCk7XG4gICAgdXIuYWN0aW9uKFwiY2hhbmdlQ3NzXCIsIHVuZG9SZWRvQWN0aW9uRnVuY3Rpb25zLmNoYW5nZUNzcywgdW5kb1JlZG9BY3Rpb25GdW5jdGlvbnMuY2hhbmdlQ3NzKTtcbiAgICB1ci5hY3Rpb24oXCJjaGFuZ2VCZW5kUG9pbnRzXCIsIHVuZG9SZWRvQWN0aW9uRnVuY3Rpb25zLmNoYW5nZUJlbmRQb2ludHMsIHVuZG9SZWRvQWN0aW9uRnVuY3Rpb25zLmNoYW5nZUJlbmRQb2ludHMpO1xuICAgIHVyLmFjdGlvbihcImNoYW5nZUZvbnRQcm9wZXJ0aWVzXCIsIHVuZG9SZWRvQWN0aW9uRnVuY3Rpb25zLmNoYW5nZUZvbnRQcm9wZXJ0aWVzLCB1bmRvUmVkb0FjdGlvbkZ1bmN0aW9ucy5jaGFuZ2VGb250UHJvcGVydGllcyk7XG4gICAgdXIuYWN0aW9uKFwic2hvd0FuZFBlcmZvcm1MYXlvdXRcIiwgdW5kb1JlZG9BY3Rpb25GdW5jdGlvbnMuc2hvd0FuZFBlcmZvcm1MYXlvdXQsIHVuZG9SZWRvQWN0aW9uRnVuY3Rpb25zLnVuZG9TaG93QW5kUGVyZm9ybUxheW91dCk7XG4gICAgdXIuYWN0aW9uKFwiaGlkZUFuZFBlcmZvcm1MYXlvdXRcIiwgdW5kb1JlZG9BY3Rpb25GdW5jdGlvbnMuaGlkZUFuZFBlcmZvcm1MYXlvdXQsIHVuZG9SZWRvQWN0aW9uRnVuY3Rpb25zLnVuZG9IaWRlQW5kUGVyZm9ybUxheW91dCk7XG4gICAgdXIuYWN0aW9uKFwiZGVsZXRlQW5kUGVyZm9ybUxheW91dFwiLCB1bmRvUmVkb0FjdGlvbkZ1bmN0aW9ucy5kZWxldGVBbmRQZXJmb3JtTGF5b3V0LCB1bmRvUmVkb0FjdGlvbkZ1bmN0aW9ucy51bmRvRGVsZXRlQW5kUGVyZm9ybUxheW91dCk7XG4gICAgdXIuYWN0aW9uKFwiYXBwbHlTSUZUb3BvbG9neUdyb3VwaW5nXCIsIHVuZG9SZWRvQWN0aW9uRnVuY3Rpb25zLmFwcGx5U0lGVG9wb2xvZ3lHcm91cGluZywgdW5kb1JlZG9BY3Rpb25GdW5jdGlvbnMuYXBwbHlTSUZUb3BvbG9neUdyb3VwaW5nKTtcblxuICAgIC8vIHJlZ2lzdGVyIFNCR04gYWN0aW9uc1xuICAgIHVyLmFjdGlvbihcImFkZFN0YXRlT3JJbmZvQm94XCIsIHVuZG9SZWRvQWN0aW9uRnVuY3Rpb25zLmFkZFN0YXRlT3JJbmZvQm94LCB1bmRvUmVkb0FjdGlvbkZ1bmN0aW9ucy5yZW1vdmVTdGF0ZU9ySW5mb0JveCk7XG4gICAgdXIuYWN0aW9uKFwiY2hhbmdlU3RhdGVPckluZm9Cb3hcIiwgdW5kb1JlZG9BY3Rpb25GdW5jdGlvbnMuY2hhbmdlU3RhdGVPckluZm9Cb3gsIHVuZG9SZWRvQWN0aW9uRnVuY3Rpb25zLmNoYW5nZVN0YXRlT3JJbmZvQm94KTtcbiAgICB1ci5hY3Rpb24oXCJzZXRNdWx0aW1lclN0YXR1c1wiLCB1bmRvUmVkb0FjdGlvbkZ1bmN0aW9ucy5zZXRNdWx0aW1lclN0YXR1cywgdW5kb1JlZG9BY3Rpb25GdW5jdGlvbnMuc2V0TXVsdGltZXJTdGF0dXMpO1xuICAgIHVyLmFjdGlvbihcInNldENsb25lTWFya2VyU3RhdHVzXCIsIHVuZG9SZWRvQWN0aW9uRnVuY3Rpb25zLnNldENsb25lTWFya2VyU3RhdHVzLCB1bmRvUmVkb0FjdGlvbkZ1bmN0aW9ucy5zZXRDbG9uZU1hcmtlclN0YXR1cyk7XG4gICAgdXIuYWN0aW9uKFwicmVtb3ZlU3RhdGVPckluZm9Cb3hcIiwgdW5kb1JlZG9BY3Rpb25GdW5jdGlvbnMucmVtb3ZlU3RhdGVPckluZm9Cb3gsIHVuZG9SZWRvQWN0aW9uRnVuY3Rpb25zLmFkZFN0YXRlT3JJbmZvQm94KTtcbiAgICB1ci5hY3Rpb24oXCJmaXRVbml0c1wiLCB1bmRvUmVkb0FjdGlvbkZ1bmN0aW9ucy5maXRVbml0cywgdW5kb1JlZG9BY3Rpb25GdW5jdGlvbnMucmVzdG9yZVVuaXRzKTtcbiAgICB1ci5hY3Rpb24oXCJhZGRCYWNrZ3JvdW5kSW1hZ2VcIiwgdW5kb1JlZG9BY3Rpb25GdW5jdGlvbnMuYWRkQmFja2dyb3VuZEltYWdlLCB1bmRvUmVkb0FjdGlvbkZ1bmN0aW9ucy5yZW1vdmVCYWNrZ3JvdW5kSW1hZ2UpO1xuICAgIHVyLmFjdGlvbihcInJlbW92ZUJhY2tncm91bmRJbWFnZVwiLCB1bmRvUmVkb0FjdGlvbkZ1bmN0aW9ucy5yZW1vdmVCYWNrZ3JvdW5kSW1hZ2UsIHVuZG9SZWRvQWN0aW9uRnVuY3Rpb25zLmFkZEJhY2tncm91bmRJbWFnZSk7XG4gICAgdXIuYWN0aW9uKFwidXBkYXRlQmFja2dyb3VuZEltYWdlXCIsIHVuZG9SZWRvQWN0aW9uRnVuY3Rpb25zLnVwZGF0ZUJhY2tncm91bmRJbWFnZSwgdW5kb1JlZG9BY3Rpb25GdW5jdGlvbnMudXBkYXRlQmFja2dyb3VuZEltYWdlKTtcbiAgICB1ci5hY3Rpb24oXCJjaGFuZ2VCYWNrZ3JvdW5kSW1hZ2VcIiwgdW5kb1JlZG9BY3Rpb25GdW5jdGlvbnMuY2hhbmdlQmFja2dyb3VuZEltYWdlLCB1bmRvUmVkb0FjdGlvbkZ1bmN0aW9ucy5jaGFuZ2VCYWNrZ3JvdW5kSW1hZ2UpO1xuICAgIHVyLmFjdGlvbihcInVwZGF0ZUluZm9ib3hTdHlsZVwiLCB1bmRvUmVkb0FjdGlvbkZ1bmN0aW9ucy51cGRhdGVJbmZvYm94U3R5bGUsIHVuZG9SZWRvQWN0aW9uRnVuY3Rpb25zLnVwZGF0ZUluZm9ib3hTdHlsZSk7XG4gICAgdXIuYWN0aW9uKFwidXBkYXRlSW5mb2JveE9ialwiLCB1bmRvUmVkb0FjdGlvbkZ1bmN0aW9ucy51cGRhdGVJbmZvYm94T2JqLCB1bmRvUmVkb0FjdGlvbkZ1bmN0aW9ucy51cGRhdGVJbmZvYm94T2JqKTtcblxuICAgIC8vIHJlZ2lzdGVyIGVhc3kgY3JlYXRpb24gYWN0aW9uc1xuICAgIHVyLmFjdGlvbihcImNyZWF0ZVRlbXBsYXRlUmVhY3Rpb25cIiwgdW5kb1JlZG9BY3Rpb25GdW5jdGlvbnMuY3JlYXRlVGVtcGxhdGVSZWFjdGlvbiwgdW5kb1JlZG9BY3Rpb25GdW5jdGlvbnMuZGVsZXRlRWxlc1NpbXBsZSk7XG4gICAgdXIuYWN0aW9uKFwiY3JlYXRlQWN0aXZhdGlvblJlYWN0aW9uXCIsIHVuZG9SZWRvQWN0aW9uRnVuY3Rpb25zLmNyZWF0ZUFjdGl2YXRpb25SZWFjdGlvbiwgdW5kb1JlZG9BY3Rpb25GdW5jdGlvbnMuZGVsZXRlRWxlc1NpbXBsZSk7XG4gICAgdXIuYWN0aW9uKFwiY3JlYXRlTWV0YWJvbGljQ2F0YWx5dGljQWN0aXZpdHlcIiwgdW5kb1JlZG9BY3Rpb25GdW5jdGlvbnMuY3JlYXRlTWV0YWJvbGljQ2F0YWx5dGljQWN0aXZpdHksIHVuZG9SZWRvQWN0aW9uRnVuY3Rpb25zLmRlbGV0ZUVsZXNTaW1wbGUpO1xuICAgIHVyLmFjdGlvbihcImNyZWF0ZU1ldGFib2xpY1JlYWN0aW9uXCIsIHVuZG9SZWRvQWN0aW9uRnVuY3Rpb25zLmNyZWF0ZU1ldGFib2xpY1JlYWN0aW9uLCB1bmRvUmVkb0FjdGlvbkZ1bmN0aW9ucy5kZWxldGVFbGVzU2ltcGxlKTtcbiAgICB1ci5hY3Rpb24oXCJjcmVhdGVDb252ZXJzaW9uXCIsIHVuZG9SZWRvQWN0aW9uRnVuY3Rpb25zLmNyZWF0ZUNvbnZlcnNpb24sIHVuZG9SZWRvQWN0aW9uRnVuY3Rpb25zLmRlbGV0ZUVsZXNTaW1wbGUpO1xuICAgIHVyLmFjdGlvbihcImNyZWF0ZU11bHRpbWVyaXphdGlvblwiLCB1bmRvUmVkb0FjdGlvbkZ1bmN0aW9ucy5jcmVhdGVNdWx0aW1lcml6YXRpb24sIHVuZG9SZWRvQWN0aW9uRnVuY3Rpb25zLmRlbGV0ZUVsZXNTaW1wbGUpO1xuICAgIHVyLmFjdGlvbihcImNyZWF0ZUNvbXBsZXhQcm90ZWluRm9ybWF0aW9uXCIsIHVuZG9SZWRvQWN0aW9uRnVuY3Rpb25zLmNyZWF0ZUNvbXBsZXhQcm90ZWluRm9ybWF0aW9uLCB1bmRvUmVkb0FjdGlvbkZ1bmN0aW9ucy5kZWxldGVFbGVzU2ltcGxlKTtcbiAgICB1ci5hY3Rpb24oXCJjcmVhdGVEZWdyYWRhdGlvblwiLCB1bmRvUmVkb0FjdGlvbkZ1bmN0aW9ucy5jcmVhdGVEZWdyYWRhdGlvbiwgdW5kb1JlZG9BY3Rpb25GdW5jdGlvbnMuZGVsZXRlRWxlc1NpbXBsZSk7XG4gICAgdXIuYWN0aW9uKFwiY3JlYXRlVHJhbnNjcmlwdGlvblwiLCB1bmRvUmVkb0FjdGlvbkZ1bmN0aW9ucy5jcmVhdGVUcmFuc2NyaXB0aW9uLCB1bmRvUmVkb0FjdGlvbkZ1bmN0aW9ucy5kZWxldGVFbGVzU2ltcGxlKTtcbiAgICB1ci5hY3Rpb24oXCJjcmVhdGVUcmFuc2xhdGlvblwiLCB1bmRvUmVkb0FjdGlvbkZ1bmN0aW9ucy5jcmVhdGVUcmFuc2xhdGlvbiwgdW5kb1JlZG9BY3Rpb25GdW5jdGlvbnMuZGVsZXRlRWxlc1NpbXBsZSk7XG4gICAgdXIuYWN0aW9uKFwiY3JlYXRlVHJhbnNjcmlwdGlvblJlYWN0aW9uXCIsIHVuZG9SZWRvQWN0aW9uRnVuY3Rpb25zLmNyZWF0ZVRyYW5zY3JpcHRpb25SZWFjdGlvbiwgdW5kb1JlZG9BY3Rpb25GdW5jdGlvbnMuZGVsZXRlRWxlc1NpbXBsZSk7XG4gICAgdXIuYWN0aW9uKFwiY3JlYXRlVHJhbnNsYXRpb25SZWFjdGlvblwiLCB1bmRvUmVkb0FjdGlvbkZ1bmN0aW9ucy5jcmVhdGVUcmFuc2xhdGlvblJlYWN0aW9uLCB1bmRvUmVkb0FjdGlvbkZ1bmN0aW9ucy5kZWxldGVFbGVzU2ltcGxlKTtcbiAgICB1ci5hY3Rpb24oXCJzZXREZWZhdWx0UHJvcGVydHlcIiwgdW5kb1JlZG9BY3Rpb25GdW5jdGlvbnMuc2V0RGVmYXVsdFByb3BlcnR5LCB1bmRvUmVkb0FjdGlvbkZ1bmN0aW9ucy5zZXREZWZhdWx0UHJvcGVydHkpO1xuICAgIHVyLmFjdGlvbihcImNvbnZlcnRJbnRvUmV2ZXJzaWJsZVJlYWN0aW9uXCIsIHVuZG9SZWRvQWN0aW9uRnVuY3Rpb25zLmNvbnZlcnRJbnRvUmV2ZXJzaWJsZVJlYWN0aW9uLCB1bmRvUmVkb0FjdGlvbkZ1bmN0aW9ucy5jb252ZXJ0SW50b1JldmVyc2libGVSZWFjdGlvbik7XG5cbiAgICB1ci5hY3Rpb24oXCJtb3ZlRWRnZVwiLCB1bmRvUmVkb0FjdGlvbkZ1bmN0aW9ucy5tb3ZlRWRnZSwgdW5kb1JlZG9BY3Rpb25GdW5jdGlvbnMubW92ZUVkZ2UpO1xuICAgIHVyLmFjdGlvbihcImZpeEVycm9yXCIsIHVuZG9SZWRvQWN0aW9uRnVuY3Rpb25zLmZpeEVycm9yLHVuZG9SZWRvQWN0aW9uRnVuY3Rpb25zLnVuZml4RXJyb3IpO1xuICAgIHVyLmFjdGlvbihcImNsb25lSGlnaERlZ3JlZU5vZGVcIiwgdW5kb1JlZG9BY3Rpb25GdW5jdGlvbnMuY2xvbmVIaWdoRGVncmVlTm9kZSx1bmRvUmVkb0FjdGlvbkZ1bmN0aW9ucy51bkNsb25lSGlnaERlZ3JlZU5vZGUpO1xuXG4gICAgdXIuYWN0aW9uKFwiY2hhbmdlTWFwVHlwZVwiLCB1bmRvUmVkb0FjdGlvbkZ1bmN0aW9ucy5jaGFuZ2VNYXBUeXBlLHVuZG9SZWRvQWN0aW9uRnVuY3Rpb25zLmNoYW5nZU1hcFR5cGUpO1xuICAgIHVyLmFjdGlvbihcInNldENvbXBvdW5kUGFkZGluZ1wiLCB1bmRvUmVkb0FjdGlvbkZ1bmN0aW9ucy5zZXRDb21wb3VuZFBhZGRpbmcsIHVuZG9SZWRvQWN0aW9uRnVuY3Rpb25zLnNldENvbXBvdW5kUGFkZGluZyk7XG5cbiAgfTtcblxuICByZXR1cm4gcmVnaXN0ZXJVbmRvUmVkb0FjdGlvbnM7XG59O1xuIiwidmFyIGxpYnMgPSByZXF1aXJlKCcuL2xpYi11dGlsaXRpZXMnKS5nZXRMaWJzKCk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuXG4gIHZhciBpbnN0YW5jZTtcblxuICBmdW5jdGlvbiBzYmdudml6SW5zdGFuY2VVdGlsaXRpZXMgKG9wdGlvbnMpIHtcblxuICAgIGluc3RhbmNlID0gbGlicy5zYmdudml6KG9wdGlvbnMpO1xuXG4gICAgcmV0dXJuIGluc3RhbmNlO1xuICB9XG5cbiAgc2JnbnZpekluc3RhbmNlVXRpbGl0aWVzLmdldEluc3RhbmNlID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBpbnN0YW5jZTtcbiAgfVxuXG4gIHNiZ252aXpJbnN0YW5jZVV0aWxpdGllcy5nZXRDeSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRJbnN0YW5jZSgpLmdldEN5KCk7XG4gIH1cblxuICByZXR1cm4gc2JnbnZpekluc3RhbmNlVXRpbGl0aWVzO1xufTtcbiIsInZhciBpc0VxdWFsID0gcmVxdWlyZSgnbG9kYXNoLmlzZXF1YWwnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbigpIHtcblxuICB2YXIgY3ksIGVsZW1lbnRVdGlsaXRpZXM7XG4gIHZhciBncm91cENvbXBvdW5kVHlwZSwgbWV0YUVkZ2VJZGVudGlmaWVyLCBsb2NrR3JhcGhUb3BvbG9neSwgc2hvdWxkQXBwbHk7XG5cbiAgdmFyIERFRkFVTFRfR1JPVVBfQ09NUE9VTkRfVFlQRSA9ICd0b3BvbG9neSBncm91cCc7XG4gIHZhciBFREdFX1NUWUxFX05BTUVTID0gWyAnbGluZS1jb2xvcicsICd3aWR0aCcgXTtcblxuICBmdW5jdGlvbiB0b3BvbG9neUdyb3VwaW5nKCBwYXJhbSwgcHJvcHMgKSB7XG4gICAgY3kgPSBwYXJhbS5zYmdudml6SW5zdGFuY2VVdGlsaXRpZXMuZ2V0Q3koKVxuICAgIGVsZW1lbnRVdGlsaXRpZXMgPSBwYXJhbS5lbGVtZW50VXRpbGl0aWVzO1xuXG4gICAgZ3JvdXBDb21wb3VuZFR5cGUgPSBwcm9wcy5ncm91cENvbXBvdW5kVHlwZSB8fCBERUZBVUxUX0dST1VQX0NPTVBPVU5EX1RZUEU7XG4gICAgbWV0YUVkZ2VJZGVudGlmaWVyID0gcHJvcHMubWV0YUVkZ2VJZGVudGlmaWVyO1xuICAgIGxvY2tHcmFwaFRvcG9sb2d5ID0gcHJvcHMubG9ja0dyYXBoVG9wb2xvZ3k7XG4gICAgc2hvdWxkQXBwbHkgPSBwcm9wcy5zaG91bGRBcHBseSB8fCB0cnVlO1xuXG4gICAgdG9wb2xvZ3lHcm91cGluZy5hcHBsaWVkID0gZmFsc2U7XG4gICAgaW5pdE1ldGFTdHlsZU1hcCgpO1xuICB9XG5cbiAgdG9wb2xvZ3lHcm91cGluZy5hcHBseSA9IGZ1bmN0aW9uKCkge1xuICAgIGlmICggdG9wb2xvZ3lHcm91cGluZy5hcHBsaWVkIHx8ICFldmFsT3B0KCBzaG91bGRBcHBseSApICkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBsaXN0ID0gY3kubm9kZXMoKS5tYXAoIGZ1bmN0aW9uKCBub2RlICkge1xuICAgICAgcmV0dXJuIFsgbm9kZSBdO1xuICAgIH0gKTtcblxuICAgIC8vIGRldGVybWluZSBub2RlIGdyb3VwcyBieSB0aGVpciB0b3BvbG9neVxuICAgIHZhciBncm91cHMgPSBnZXROb2RlR3JvdXBzKCBsaXN0ICk7XG4gICAgXG4gICAgLy8gYXBwbHkgZ3JvdXBpbmcgaW4gY3kgbGV2ZWxcbiAgICB2YXIgbWV0YUVkZ2VzID0gdG9wb2xvZ3lHcm91cGluZy5nZXRNZXRhRWRnZXMoKTtcbiAgICB2YXIgY29tcG91bmRzID0gdG9wb2xvZ3lHcm91cGluZy5nZXRHcm91cENvbXBvdW5kcygpO1xuICBcdGFwcGx5R3JvdXBpbmcoZ3JvdXBzLCBtZXRhRWRnZXMsIGNvbXBvdW5kcyk7XG5cbiAgICB0b3BvbG9neUdyb3VwaW5nLmFwcGxpZWQgPSB0cnVlO1xuXG4gICAgaWYgKCBsb2NrR3JhcGhUb3BvbG9neSApIHtcbiAgICAgIGVsZW1lbnRVdGlsaXRpZXMubG9ja0dyYXBoVG9wb2xvZ3koKTtcbiAgICB9XG5cbiAgXHRyZXR1cm4gZ3JvdXBzO1xuICB9O1xuXG4gIHRvcG9sb2d5R3JvdXBpbmcudW5hcHBseSA9IGZ1bmN0aW9uKCkge1xuICAgIGlmICggIXRvcG9sb2d5R3JvdXBpbmcuYXBwbGllZCApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgbWV0YUVkZ2VzID0gdG9wb2xvZ3lHcm91cGluZy5nZXRNZXRhRWRnZXMoKTtcbiAgICBtZXRhRWRnZXMuZm9yRWFjaCggZnVuY3Rpb24oIGVkZ2UgKSB7XG4gICAgICB2YXIgdG9SZXN0b3JlID0gZWRnZS5kYXRhKCd0Zy10by1yZXN0b3JlJyk7XG4gICAgICBlZGdlLnJlbW92ZSgpO1xuICAgICAgdG9SZXN0b3JlLnJlc3RvcmUoKTtcblxuICAgICAgRURHRV9TVFlMRV9OQU1FUy5mb3JFYWNoKCBmdW5jdGlvbiggbmFtZSApIHtcbiAgICAgICAgdmFyIG9sZFZhbCA9IHRvcG9sb2d5R3JvdXBpbmcubWV0YVN0eWxlTWFwWyBuYW1lIF1bIGVkZ2UuaWQoKSBdO1xuICAgICAgICB2YXIgbmV3VmFsID0gZWRnZS5kYXRhKCBuYW1lICk7XG5cbiAgICAgICAgaWYgKCBvbGRWYWwgIT09IG5ld1ZhbCApIHtcbiAgICAgICAgICB0b1Jlc3RvcmUuZGF0YSggbmFtZSwgbmV3VmFsICk7XG4gICAgICAgIH1cbiAgICAgIH0gKTtcbiAgICB9ICk7XG5cbiAgICBpbml0TWV0YVN0eWxlTWFwKCk7XG5cbiAgICB2YXIgcGFyZW50cyA9IHRvcG9sb2d5R3JvdXBpbmcuZ2V0R3JvdXBDb21wb3VuZHMoKTtcbiAgICBlbGVtZW50VXRpbGl0aWVzLmNoYW5nZVBhcmVudCggcGFyZW50cy5jaGlsZHJlbigpLCBudWxsICk7XG4gICAgcGFyZW50cy5yZW1vdmUoKTtcblxuICAgIHRvcG9sb2d5R3JvdXBpbmcuYXBwbGllZCA9IGZhbHNlO1xuXG4gICAgaWYgKCBsb2NrR3JhcGhUb3BvbG9neSApIHtcbiAgICAgIGVsZW1lbnRVdGlsaXRpZXMudW5sb2NrR3JhcGhUb3BvbG9neSgpO1xuICAgIH1cbiAgfTtcblxuICB0b3BvbG9neUdyb3VwaW5nLmdldE1ldGFFZGdlcyA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBtZXRhRWRnZXMgPSBjeS5lZGdlcygnWycgKyBtZXRhRWRnZUlkZW50aWZpZXIgKyAnXScpO1xuICAgIHJldHVybiBtZXRhRWRnZXM7XG4gIH07XG5cbiAgdG9wb2xvZ3lHcm91cGluZy5nZXRHcm91cENvbXBvdW5kcyA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBjbGFzc05hbWUgPSBncm91cENvbXBvdW5kVHlwZTtcbiAgICByZXR1cm4gY3kubm9kZXMoJ1tjbGFzcz1cIicgKyBjbGFzc05hbWUgKyAnXCJdJyk7XG4gIH07XG5cbiAgdG9wb2xvZ3lHcm91cGluZy5jbGVhckFwcGxpZWRGbGFnID0gZnVuY3Rpb24oKSB7XG4gICAgdG9wb2xvZ3lHcm91cGluZy5hcHBsaWVkID0gZmFsc2U7XG4gIH07XG5cbiAgdG9wb2xvZ3lHcm91cGluZy5zZXRBcHBsaWVkRmxhZyA9IGZ1bmN0aW9uKGFwcGxpZWQpIHtcbiAgICB0b3BvbG9neUdyb3VwaW5nLmFwcGxpZWQgPSBhcHBsaWVkO1xuICB9O1xuXG4gIHRvcG9sb2d5R3JvdXBpbmcudG9nZ2xlQXBwbGllZEZsYWcgPSBmdW5jdGlvbigpIHtcbiAgICB0b3BvbG9neUdyb3VwaW5nLmFwcGxpZWQgPSAhdG9wb2xvZ3lHcm91cGluZy5hcHBsaWVkO1xuICB9O1xuXG4gIGZ1bmN0aW9uIGluaXRNZXRhU3R5bGVNYXAoKSB7XG4gICAgdG9wb2xvZ3lHcm91cGluZy5tZXRhU3R5bGVNYXAgPSB7fTtcbiAgICBFREdFX1NUWUxFX05BTUVTLmZvckVhY2goIGZ1bmN0aW9uKCBuYW1lICkge1xuICAgICAgdG9wb2xvZ3lHcm91cGluZy5tZXRhU3R5bGVNYXBbIG5hbWUgXSA9IHt9O1xuICAgIH0gKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGV2YWxPcHQoIG9wdCApIHtcbiAgICBpZiAoIHR5cGVvZiBvcHQgPT09ICdmdW5jdGlvbicgKSB7XG4gICAgICByZXR1cm4gb3B0KCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG9wdDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldE5vZGVHcm91cHMoIGxpc3QgKSB7XG4gICAgaWYgKCBsaXN0Lmxlbmd0aCA8PSAxICkge1xuICAgICAgcmV0dXJuIGxpc3Q7XG4gICAgfVxuXG4gICAgdmFyIGhhbHZlcyA9IGdldEhhbHZlcyggbGlzdCApO1xuICAgIHZhciBmaXJzdFBhcnQgPSBnZXROb2RlR3JvdXBzKCBoYWx2ZXNbIDAgXSApO1xuICAgIHZhciBzZWNvbmRQYXJ0ID0gZ2V0Tm9kZUdyb3VwcyggaGFsdmVzWyAxIF0gKTtcbiAgICAvLyBtZXJnZSB0aGUgaGFsdmVzXG5cdCAgdmFyIGdyb3VwcyA9IG1lcmdlR3JvdXBzKCBmaXJzdFBhcnQsIHNlY29uZFBhcnQgKTtcblxuICAgIHJldHVybiBncm91cHM7XG4gIH1cblxuICBmdW5jdGlvbiBnZXRQYXJlbnRPclNlbGYoIG5vZGUgKSB7XG4gICAgdmFyIHBhcmVudCA9IG5vZGUucGFyZW50KCk7XG4gICAgcmV0dXJuIHBhcmVudC5zaXplKCkgPiAwID8gcGFyZW50IDogbm9kZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNhbGNHcm91cGluZ0tleSggZWRnZSApIHtcbiAgICB2YXIgc3JjSWQgPSBnZXRQYXJlbnRPclNlbGYoIGVkZ2Uuc291cmNlKCkgKS5pZCgpO1xuICAgIHZhciB0Z3RJZCA9IGdldFBhcmVudE9yU2VsZiggZWRnZS50YXJnZXQoKSApLmlkKCk7XG4gICAgdmFyIGVkZ2VUeXBlID0gZ2V0RWRnZVR5cGUoIGVkZ2UgKTtcblxuICAgIHJldHVybiBbIGVkZ2VUeXBlLCBzcmNJZCwgdGd0SWQgXS5qb2luKCAnLScgKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGFkZFRvTWFwQ2hhaW4oIG1hcCwga2V5LCB2YWwgKSB7XG4gICAgaWYgKCAhbWFwWyBrZXkgXSApIHtcbiAgICAgIG1hcFsga2V5IF0gPSBjeS5jb2xsZWN0aW9uKCk7XG4gICAgfVxuXG4gICAgbWFwWyBrZXkgXSA9IG1hcFsga2V5IF0uYWRkKCB2YWwgKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGFwcGx5R3JvdXBpbmcoZ3JvdXBzLCBtZXRhRWRnZXMsIGdyb3VwQ29tcG91bmRzKSB7XG4gICAgdmFyIGNvbXBvdW5kcztcblxuICAgIGlmIChncm91cENvbXBvdW5kcy5sZW5ndGggPiAwKSB7XG4gICAgICBjb21wb3VuZHMgPSBncm91cENvbXBvdW5kcztcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBncm91cHMuZm9yRWFjaCggZnVuY3Rpb24oIGdyb3VwICkge1xuICAgICAgICBjcmVhdGVHcm91cENvbXBvdW5kKCBncm91cCApO1xuICAgICAgfSApO1xuICBcbiAgICAgIGNvbXBvdW5kcyA9IHRvcG9sb2d5R3JvdXBpbmcuZ2V0R3JvdXBDb21wb3VuZHMoKTtcbiAgICB9XG5cbiAgICB2YXIgY2hpbGRyZW5FZGdlcyA9IGNvbXBvdW5kcy5jaGlsZHJlbigpLmNvbm5lY3RlZEVkZ2VzKCk7XG4gICAgdmFyIGVkZ2VzTWFwID0gW107XG5cbiAgICBjaGlsZHJlbkVkZ2VzLmZvckVhY2goIGZ1bmN0aW9uKCBlZGdlICl7XG4gICAgICB2YXIga2V5ID0gY2FsY0dyb3VwaW5nS2V5KCBlZGdlICk7XG4gICAgICBhZGRUb01hcENoYWluKCBlZGdlc01hcCwga2V5LCBlZGdlICk7XG4gICAgICBlZGdlLnJlbW92ZSgpO1xuICAgIH0gKTtcblxuICAgIGlmIChtZXRhRWRnZXMubGVuZ3RoID4gMCkge1xuICAgICAgT2JqZWN0LmtleXMoIGVkZ2VzTWFwICkuZm9yRWFjaCggZnVuY3Rpb24oIGtleSApIHtcbiAgICAgICAgdmFyIGVkZ2VzID0gZWRnZXNNYXBba2V5XTtcbiAgICAgICAgdmFyIHRlbXAgPSBlZGdlc1swXTtcbiAgICAgICAgdmFyIG1ldGFFZGdlID0gbWV0YUVkZ2VzLmZpbHRlcihlZGdlID0+IHtcbiAgICAgICAgICByZXR1cm4gZWRnZS5zb3VyY2UoKS5pZCgpID09PSBnZXRQYXJlbnRPclNlbGYoIHRlbXAuc291cmNlKCkgKS5pZCgpICYmXG4gICAgICAgICAgICAgICAgICBlZGdlLnRhcmdldCgpLmlkKCkgPT09IGdldFBhcmVudE9yU2VsZiggdGVtcC50YXJnZXQoKSApLmlkKCk7XG4gICAgICAgIH0pWzBdO1xuICAgICAgICBtZXRhRWRnZS5kYXRhKCAndGctdG8tcmVzdG9yZScsIGVkZ2VzICk7XG4gICAgICAgIGVkZ2VzLnJlbW92ZSgpO1xuICAgICAgfSApO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIE9iamVjdC5rZXlzKCBlZGdlc01hcCApLmZvckVhY2goIGZ1bmN0aW9uKCBrZXkgKSB7XG4gICAgICAgIGNyZWF0ZU1ldGFFZGdlRm9yKCBlZGdlc01hcFsga2V5IF0gKTtcbiAgICAgIH0gKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVHcm91cENvbXBvdW5kKCBncm91cCApIHtcbiAgICBpZiAoIGdyb3VwLmxlbmd0aCA8IDIgKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGNvbGxlY3Rpb24gPSBjeS5jb2xsZWN0aW9uKCk7XG5cbiAgICBncm91cC5mb3JFYWNoKCBmdW5jdGlvbiggbm9kZSApIHtcbiAgICAgIGNvbGxlY3Rpb24gPSBjb2xsZWN0aW9uLmFkZCggbm9kZSApO1xuICAgIH0gKTtcblxuICAgIGVsZW1lbnRVdGlsaXRpZXMuY3JlYXRlQ29tcG91bmRGb3JHaXZlbk5vZGVzKCBjb2xsZWN0aW9uLCBncm91cENvbXBvdW5kVHlwZSApO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlTWV0YUVkZ2VGb3IoIGVkZ2VzICkge1xuICAgIHZhciBzcmNJZCA9IGdldFBhcmVudE9yU2VsZiggZWRnZXMuc291cmNlKCkgKS5pZCgpO1xuICAgIHZhciB0Z3RJZCA9IGdldFBhcmVudE9yU2VsZiggZWRnZXMudGFyZ2V0KCkgKS5pZCgpO1xuICAgIHZhciB0eXBlID0gZWRnZXMuZGF0YSggJ2NsYXNzJyApO1xuICAgIGN5LnJlbW92ZSggZWRnZXMgKTtcblxuICAgIHZhciBtZXRhRWRnZSA9IGVsZW1lbnRVdGlsaXRpZXMuYWRkRWRnZSggc3JjSWQsIHRndElkLCB0eXBlICk7XG4gICAgbWV0YUVkZ2UuZGF0YSggJ3RnLXRvLXJlc3RvcmUnLCBlZGdlcyApO1xuICAgIG1ldGFFZGdlLmRhdGEoIG1ldGFFZGdlSWRlbnRpZmllciwgdHJ1ZSApO1xuXG4gICAgRURHRV9TVFlMRV9OQU1FUy5mb3JFYWNoKCBmdW5jdGlvbiggc3R5bGVOYW1lICkge1xuICAgICAgZWRnZXMuZm9yRWFjaCggZnVuY3Rpb24oIGVkZ2UgKSB7XG4gICAgICAgIHRvcG9sb2d5R3JvdXBpbmcubWV0YVN0eWxlTWFwWyBzdHlsZU5hbWUgXVsgZWRnZS5pZCgpIF0gPSBlZGdlLmRhdGEoIHN0eWxlTmFtZSApO1xuICAgICAgfSApO1xuXG4gICAgICB2YXIgY29tbW9uVmFsID0gZWxlbWVudFV0aWxpdGllcy5nZXRDb21tb25Qcm9wZXJ0eShlZGdlcywgc3R5bGVOYW1lLCAnZGF0YScpO1xuICAgICAgaWYgKCBjb21tb25WYWwgKSB7XG4gICAgICAgIG1ldGFFZGdlLmRhdGEoIHN0eWxlTmFtZSwgY29tbW9uVmFsICk7XG4gICAgICB9XG4gICAgfSApO1xuXG4gICAgcmV0dXJuIG1ldGFFZGdlO1xuICB9XG5cbiAgZnVuY3Rpb24gbWVyZ2VHcm91cHMoIGdyb3VwczEsIGdyb3VwczIgKSB7XG4gICAgLy8gbm90TWVyZ2VkR3JzIHdpbGwgaW5jbHVkZSBtZW1iZXJzIG9mIGdyb3VwczEgdGhhdCBhcmUgbm90IG1lcmdlZFxuICBcdC8vIG1lcmdlZEdycyB3aWxsIGluY2x1ZGUgdGhlIG1lcmdlZCBtZW1iZXJzIGZyb20gMiBncm91cHNcbiAgXHR2YXIgbm90TWVyZ2VkR3JzID0gW10sIG1lcmdlZEdycyA9IFtdO1xuXG4gICAgZ3JvdXBzMS5mb3JFYWNoKCBmdW5jdGlvbiggZ3IxICkge1xuICAgICAgdmFyIG1lcmdlZCA9IGZhbHNlO1xuXG4gICAgICBtZXJnZWRHcnMuY29uY2F0KCBncm91cHMyICkuZm9yRWFjaCggZnVuY3Rpb24oIGdyMiwgaW5kZXgyICkge1xuICAgICAgICAvLyBpZiBncm91cHMgc2hvdWxkIGJlIG1lcmdlZCBtZXJnZSB0aGVtLCByZW1vdmUgZ3IyIGZyb20gd2hlcmUgaXRcbiAgICAgICAgLy8gY29tZXMgZnJvbSBhbmQgcHVzaCB0aGUgbWVyZ2UgcmVzdWx0IHRvIG1lcmdlZEdyc1xuICAgICAgICBpZiAoIHNob3VsZE1lcmdlKCBncjEsIGdyMiApICkge1xuICAgICAgICAgIHZhciBtZXJnZWRHciA9IGdyMS5jb25jYXQoIGdyMiApO1xuXG4gICAgICAgICAgaWYgKCBpbmRleDIgPj0gbWVyZ2VkR3JzLmxlbmd0aCApIHtcbiAgICAgICAgICAgIHJlbW92ZUF0KCBncm91cHMyLCBpbmRleDIgLSBtZXJnZWRHcnMubGVuZ3RoICk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmVtb3ZlQXQoIG1lcmdlZEdycywgaW5kZXgyICk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gbWFyayBhcyBtZXJnZWQgYW5kIGJyZWFrIHRoZSBsb29wXG4gICAgICAgICAgbWVyZ2VkR3JzLnB1c2goIG1lcmdlZEdyICk7XG4gICAgICAgICAgbWVyZ2VkID0gdHJ1ZTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH0gKTtcblxuICAgICAgLy8gaWYgZ3IxIGlzIG5vdCBtZXJnZWQgcHVzaCBpdCB0byBub3RNZXJnZWRHcnNcbiAgICAgIGlmICggIW1lcmdlZCApIHtcbiAgICAgICAgbm90TWVyZ2VkR3JzLnB1c2goIGdyMSApO1xuICAgICAgfVxuICAgIH0gKTtcblxuICAgIC8vIHRoZSBncm91cHMgdGhhdCBjb21lcyBmcm9tIGdyb3VwczIgYnV0IG5vdCBtZXJnZWQgYXJlIHN0aWxsIGluY2x1ZGVkXG5cdCAgLy8gaW4gZ3JvdXBzMiBhZGQgdGhlbSB0byB0aGUgcmVzdWx0IHRvZ2V0aGVyIHdpdGggbWVyZ2VkR3JzIGFuZCBub3RNZXJnZWRHcnNcbiAgICByZXR1cm4gbm90TWVyZ2VkR3JzLmNvbmNhdCggbWVyZ2VkR3JzLCBncm91cHMyICk7XG4gIH1cblxuICBmdW5jdGlvbiBzaG91bGRNZXJnZSggZ3JvdXAxLCBncm91cDIgKSB7XG4gICAgLy8gdXNpbmcgZmlyc3QgZWxlbWVudHMgaXMgZW5vdWdoIHRvIGRlY2lkZSB3aGV0aGVyIHRvIG1lcmdlXG4gIFx0dmFyIG5vZGUxID0gZ3JvdXAxWyAwIF07XG4gIFx0dmFyIG5vZGUyID0gZ3JvdXAyWyAwIF07XG5cbiAgICBpZiAoIG5vZGUxLmVkZ2VzKCkubGVuZ3RoICE9PSBub2RlMi5lZGdlcygpLmxlbmd0aCApIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICB2YXIgZ2V0VW5kaXJlY3RlZEVkZ2VzID0gZnVuY3Rpb24oIG5vZGUgKSB7XG4gICAgICB2YXIgZWRnZXMgPSBub2RlLmNvbm5lY3RlZEVkZ2VzKCkuZmlsdGVyKCBpc1VuZGlyZWN0ZWRFZGdlICk7XG4gICAgICByZXR1cm4gZWRnZXM7XG4gICAgfTtcbiAgICAvLyB1bmRpcmVjdGVkIGVkZ2VzIG9mIG5vZGUxIGFuZCBub2RlMiByZXNwZWN0aXZlbHlcbiAgICB2YXIgdW5kaXIxID0gZ2V0VW5kaXJlY3RlZEVkZ2VzKCBub2RlMSApO1xuICAgIHZhciB1bmRpcjIgPSBnZXRVbmRpcmVjdGVkRWRnZXMoIG5vZGUyICk7XG5cbiAgICB2YXIgaW4xID0gbm9kZTEuaW5jb21lcnMoKS5lZGdlcygpLm5vdCggdW5kaXIxICk7XG4gICAgdmFyIGluMiA9IG5vZGUyLmluY29tZXJzKCkuZWRnZXMoKS5ub3QoIHVuZGlyMiApO1xuXG4gICAgdmFyIG91dDEgPSBub2RlMS5vdXRnb2VycygpLmVkZ2VzKCkubm90KCB1bmRpcjEgKTtcblx0ICB2YXIgb3V0MiA9IG5vZGUyLm91dGdvZXJzKCkuZWRnZXMoKS5ub3QoIHVuZGlyMiApO1xuXG4gICAgcmV0dXJuIGNvbXBhcmVFZGdlR3JvdXAoIGluMSwgaW4yLCBub2RlMSwgbm9kZTIgKVxuICAgICAgICAgICAgJiYgY29tcGFyZUVkZ2VHcm91cCggb3V0MSwgb3V0Miwgbm9kZTEsIG5vZGUyIClcbiAgICAgICAgICAgICYmIGNvbXBhcmVFZGdlR3JvdXAoIHVuZGlyMSwgdW5kaXIyLCBub2RlMSwgbm9kZTIgKTtcbiAgfVxuXG4gIC8vIGRlY2lkZSBpZiAyIGVkZ2UgZ3JvdXBzIGNvbnRhaW5zIHNldCBvZiBlZGdlcyB3aXRoIHNpbWlsYXIgY29udGVudCAodHlwZSxcbiAgLy8gc291cmNlLHRhcmdldCkgcmVsYXRpdmUgdG8gdGhlaXIgbm9kZXMgd2hlcmUgZ3IxIGFyZSBlZGdlcyBvZiBub2RlMSBhbmQgZ3IyIGFyZSBlZGdlcyBvZlxuICAvLyBub2RlMlxuICBmdW5jdGlvbiBjb21wYXJlRWRnZUdyb3VwKCBncjEsIGdyMiwgbm9kZTEsIG5vZGUyICkge1xuICAgIHZhciBpZDEgPSBub2RlMS5pZCgpO1xuICAgIHZhciBpZDIgPSBub2RlMi5pZCgpO1xuXG4gICAgdmFyIG1hcDEgPSBmaWxsSWRUb1R5cGVTZXRNYXAoIGdyMSwgbm9kZTEgKTtcbiAgICB2YXIgbWFwMiA9IGZpbGxJZFRvVHlwZVNldE1hcCggZ3IyLCBub2RlMiApO1xuXG4gICAgaWYgKCBPYmplY3Qua2V5cyggbWFwMSApLmxlbmd0aCAhPT0gT2JqZWN0LmtleXMoIG1hcDIgKS5sZW5ndGggKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGZhaWxlZCA9IGZhbHNlO1xuXG4gICAgT2JqZWN0LmtleXMoIG1hcDEgKS5mb3JFYWNoKCBmdW5jdGlvbigga2V5ICkge1xuICAgICAgLy8gaWYgYWxyZWFkeSBmYWlsZWQganVzdCByZXR1cm5cbiAgICAgIGlmICggZmFpbGVkICkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIGlmIGtleSBpcyBpZDIgdXNlIGlkMSBpbnN0ZWFkIGJlY2F1c2UgY29tcGFyaXNvbiBpcyByZWxhdGl2ZSB0byBub2Rlc1xuICAgICAgdmFyIG90aGVyS2V5ID0gKCBrZXkgPT0gaWQyICkgPyBpZDEgOiBrZXk7XG5cbiAgICAgIC8vIGNoZWNrIGlmIHRoZSBzZXRzIGhhdmUgdGhlIHNhbWUgY29udGVudFxuICBcdFx0Ly8gaWYgY2hlY2sgZmFpbHMgcmV0dXJuIGZhbHNlXG4gICAgICBpZiAoICFpc0VxdWFsKCBtYXAxWyBrZXkgXSwgbWFwMlsgb3RoZXJLZXkgXSApICkge1xuICAgICAgICBmYWlsZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH0gKTtcblxuICAgIC8vIGlmIGNoZWNrIHBhc3NlcyBmb3IgZWFjaCBrZXkgcmV0dXJuIHRydWVcbiAgICByZXR1cm4gIWZhaWxlZDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZpbGxJZFRvVHlwZVNldE1hcCggZWRnZUdyb3VwLCBub2RlICkge1xuICAgIHZhciBtYXAgPSB7fTtcbiAgICB2YXIgbm9kZUlkID0gbm9kZS5pZCgpO1xuXG4gICAgZWRnZUdyb3VwLmZvckVhY2goIGZ1bmN0aW9uKCBlZGdlICkge1xuICAgICAgdmFyIHNyY0lkID0gZWRnZS5kYXRhKCdzb3VyY2UnKTtcbiAgICAgIHZhciB0Z3RJZCA9IGVkZ2UuZGF0YSgndGFyZ2V0Jyk7XG4gICAgICB2YXIgZWRnZUlkID0gZWRnZS5pZCgpO1xuXG4gICAgICB2YXIgb3RoZXJFbmQgPSAoIG5vZGVJZCA9PT0gdGd0SWQgKSA/IHNyY0lkIDogdGd0SWQ7XG5cbiAgICAgIGZ1bmN0aW9uIGFkZFRvUmVsYXRlZFNldCggc2lkZVN0ciwgdmFsdWUgKSB7XG4gICAgICAgIGlmICggIW1hcFsgc2lkZVN0ciBdICkge1xuICAgICAgICAgIG1hcFsgc2lkZVN0ciBdID0gbmV3IFNldCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgbWFwWyBzaWRlU3RyIF0uYWRkKCB2YWx1ZSApO1xuICAgICAgfVxuXG4gICAgICB2YXIgZWRnZVR5cGUgPSBnZXRFZGdlVHlwZSggZWRnZSApO1xuXG4gICAgICBhZGRUb1JlbGF0ZWRTZXQoIG90aGVyRW5kLCBlZGdlVHlwZSApO1xuICAgIH0gKTtcblxuICAgIHJldHVybiBtYXA7XG4gIH1cblxuICBmdW5jdGlvbiBnZXRFZGdlVHlwZSggZWRnZSApIHtcbiAgICByZXR1cm4gZWRnZS5kYXRhKCAnY2xhc3MnICk7XG4gIH1cblxuICBmdW5jdGlvbiBpc1VuZGlyZWN0ZWRFZGdlKCBlZGdlICkge1xuICAgIHJldHVybiBlbGVtZW50VXRpbGl0aWVzLmlzVW5kaXJlY3RlZEVkZ2UoIGVkZ2UgKTtcbiAgfVxuXG4gIC8vIGdldCBoYWx2ZXMgb2YgYSBsaXN0LiBJdCBpcyBhc3N1bWVkIHRoYXQgbGlzdCBzaXplIGlzIGF0IGxlYXN0IDIuXG4gIGZ1bmN0aW9uIGdldEhhbHZlcyggbGlzdCApIHtcbiAgICB2YXIgcyA9IGxpc3QubGVuZ3RoO1xuICAgIHZhciBoYWxmSW5kZXggPSBNYXRoLmZsb29yKCBzIC8gMiApO1xuICAgIHZhciBmaXJzdEhhbGYgPSBsaXN0LnNsaWNlKCAwLCBoYWxmSW5kZXggKTtcbiAgICB2YXIgc2Vjb25kSGFsZiA9IGxpc3Quc2xpY2UoIGhhbGZJbmRleCwgcyApO1xuXG4gICAgcmV0dXJuIFsgZmlyc3RIYWxmLCBzZWNvbmRIYWxmIF07XG4gIH1cblxuICBmdW5jdGlvbiByZW1vdmVBdCggYXJyLCBpbmRleCApIHtcbiAgICBhcnIuc3BsaWNlKCBpbmRleCwgMSApO1xuICB9XG5cbiAgcmV0dXJuIHRvcG9sb2d5R3JvdXBpbmc7XG59O1xuIiwiLy8gRXh0ZW5kcyBzYmdudml6LnVuZG9SZWRvQWN0aW9uRnVuY3Rpb25zXG52YXIgbGlicyA9IHJlcXVpcmUoJy4vbGliLXV0aWxpdGllcycpLmdldExpYnMoKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG5cbiAgdmFyIHNiZ252aXpJbnN0YW5jZSwgdW5kb1JlZG9BY3Rpb25GdW5jdGlvbnMsIGVsZW1lbnRVdGlsaXRpZXMsIGN5LCB0b3BvbG9neUdyb3VwaW5nO1xuXG4gIGZ1bmN0aW9uIHVuZG9SZWRvQWN0aW9uRnVuY3Rpb25zRXh0ZW5kZXIgKHBhcmFtKSB7XG5cbiAgICBzYmdudml6SW5zdGFuY2UgPSBwYXJhbS5zYmdudml6SW5zdGFuY2VVdGlsaXRpZXMuZ2V0SW5zdGFuY2UoKTtcbiAgICBjeSA9IHBhcmFtLnNiZ252aXpJbnN0YW5jZVV0aWxpdGllcy5nZXRDeSgpO1xuICAgIHVuZG9SZWRvQWN0aW9uRnVuY3Rpb25zID0gc2JnbnZpekluc3RhbmNlLnVuZG9SZWRvQWN0aW9uRnVuY3Rpb25zO1xuICAgIGVsZW1lbnRVdGlsaXRpZXMgPSBwYXJhbS5lbGVtZW50VXRpbGl0aWVzO1xuICAgIHRvcG9sb2d5R3JvdXBpbmcgPSBwYXJhbS5zaWZUb3BvbG9neUdyb3VwaW5nO1xuXG4gICAgZXh0ZW5kKCk7XG4gIH1cblxuICAvLyBFeHRlbmRzIHVuZG9SZWRvQWN0aW9uRnVuY3Rpb25zIHdpdGggY2hpc2Ugc3BlY2lmaWMgZmVhdHVyZXNcbiAgZnVuY3Rpb24gZXh0ZW5kICgpIHtcblxuICAgIHVuZG9SZWRvQWN0aW9uRnVuY3Rpb25zLmFwcGx5U0lGVG9wb2xvZ3lHcm91cGluZyA9IGZ1bmN0aW9uKHBhcmFtKSB7XG4gICAgICB2YXIgb2xkRWxlcywgbmV3RWxlcztcbiAgICAgIGlmICggcGFyYW0uZmlyc3RUaW1lICkge1xuICAgICAgICBvbGRFbGVzID0gY3kuZWxlbWVudHMoKTtcblxuICAgICAgICBpZiAocGFyYW0uYXBwbHkpIHtcbiAgICAgICAgICB0b3BvbG9neUdyb3VwaW5nLmFwcGx5KCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgdG9wb2xvZ3lHcm91cGluZy51bmFwcGx5KCk7XG4gICAgICAgIH1cblxuICAgICAgICBuZXdFbGVzID0gY3kuZWxlbWVudHMoKTtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICBvbGRFbGVzID0gcGFyYW0ub2xkRWxlcztcbiAgICAgICAgbmV3RWxlcyA9IHBhcmFtLm5ld0VsZXM7XG5cbiAgICAgICAgaWYgKCBlbGVtZW50VXRpbGl0aWVzLmlzR3JhcGhUb3BvbG9neUxvY2tlZCgpICkge1xuICAgICAgICAgIGVsZW1lbnRVdGlsaXRpZXMudW5sb2NrR3JhcGhUb3BvbG9neSgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIGVsZW1lbnRVdGlsaXRpZXMubG9ja0dyYXBoVG9wb2xvZ3koKTtcbiAgICAgICAgfVxuXG4gICAgICAgIG9sZEVsZXMucmVtb3ZlKCk7XG4gICAgICAgIG5ld0VsZXMucmVzdG9yZSgpO1xuXG4gICAgICAgIHRvcG9sb2d5R3JvdXBpbmcudG9nZ2xlQXBwbGllZEZsYWcoKTtcbiAgICAgIH1cblxuICAgICAgdmFyIHJlc3VsdCA9IHsgb2xkRWxlczogbmV3RWxlcywgbmV3RWxlczogb2xkRWxlcyB9O1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuXG4gICAgLy8gU2VjdGlvbiBTdGFydFxuICAgIC8vIGFkZC9yZW1vdmUgYWN0aW9uIGZ1bmN0aW9uc1xuXG4gICAgdW5kb1JlZG9BY3Rpb25GdW5jdGlvbnMuYWRkTm9kZSA9IGZ1bmN0aW9uIChwYXJhbSkge1xuICAgICAgdmFyIHJlc3VsdDtcbiAgICAgIGlmIChwYXJhbS5maXJzdFRpbWUpIHtcbiAgICAgICAgdmFyIG5ld05vZGUgPSBwYXJhbS5uZXdOb2RlO1xuICAgICAgICByZXN1bHQgPSBlbGVtZW50VXRpbGl0aWVzLmFkZE5vZGUobmV3Tm9kZS54LCBuZXdOb2RlLnksIG5ld05vZGUuY2xhc3MsIG5ld05vZGUuaWQsIG5ld05vZGUucGFyZW50LCBuZXdOb2RlLnZpc2liaWxpdHkpO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIHJlc3VsdCA9IGVsZW1lbnRVdGlsaXRpZXMucmVzdG9yZUVsZXMocGFyYW0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBlbGVzOiByZXN1bHRcbiAgICAgIH07XG4gICAgfTtcblxuICAgIHVuZG9SZWRvQWN0aW9uRnVuY3Rpb25zLmFkZEVkZ2UgPSBmdW5jdGlvbiAocGFyYW0pIHtcbiAgICAgIHZhciByZXN1bHQ7XG4gICAgICBpZiAocGFyYW0uZmlyc3RUaW1lKSB7XG4gICAgICAgIHZhciBuZXdFZGdlID0gcGFyYW0ubmV3RWRnZTtcbiAgICAgICAgcmVzdWx0ID0gZWxlbWVudFV0aWxpdGllcy5hZGRFZGdlKG5ld0VkZ2Uuc291cmNlLCBuZXdFZGdlLnRhcmdldCwgbmV3RWRnZS5jbGFzcywgbmV3RWRnZS5pZCwgbmV3RWRnZS52aXNpYmlsaXR5KTtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICByZXN1bHQgPSBlbGVtZW50VXRpbGl0aWVzLnJlc3RvcmVFbGVzKHBhcmFtKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZWxlczogcmVzdWx0XG4gICAgICB9O1xuICAgIH07XG5cbiAgICB1bmRvUmVkb0FjdGlvbkZ1bmN0aW9ucy5hZGRQcm9jZXNzV2l0aENvbnZlbmllbnRFZGdlcyA9IGZ1bmN0aW9uKHBhcmFtKSB7XG4gICAgICB2YXIgcmVzdWx0O1xuICAgICAgaWYgKHBhcmFtLmZpcnN0VGltZSkge1xuICAgICAgICByZXN1bHQgPSBlbGVtZW50VXRpbGl0aWVzLmFkZFByb2Nlc3NXaXRoQ29udmVuaWVudEVkZ2VzKHBhcmFtLnNvdXJjZSwgcGFyYW0udGFyZ2V0LCBwYXJhbS5wcm9jZXNzVHlwZSk7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgcmVzdWx0ID0gZWxlbWVudFV0aWxpdGllcy5yZXN0b3JlRWxlcyhwYXJhbSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGVsZXM6IHJlc3VsdFxuICAgICAgfTtcbiAgICB9O1xuXG4gICAgdW5kb1JlZG9BY3Rpb25GdW5jdGlvbnMuY3JlYXRlQ29tcG91bmRGb3JHaXZlbk5vZGVzID0gZnVuY3Rpb24gKHBhcmFtKSB7XG4gICAgICB2YXIgcmVzdWx0ID0ge307XG5cbiAgICAgIGlmIChwYXJhbS5maXJzdFRpbWUpIHtcbiAgICAgICAgLy8gTm9kZXMgdG8gbWFrZSBjb21wb3VuZCwgdGhlaXIgZGVzY2VuZGFudHMgYW5kIGVkZ2VzIGNvbm5lY3RlZCB0byB0aGVtIHdpbGwgYmUgcmVtb3ZlZCBkdXJpbmcgY3JlYXRlQ29tcG91bmRGb3JHaXZlbk5vZGVzIG9wZXJhdGlvblxuICAgICAgICAvLyAoaW50ZXJuYWxseSBieSBlbGVzLm1vdmUoKSBvcGVyYXRpb24pLCBzbyBtYXJrIHRoZW0gYXMgcmVtb3ZlZCBlbGVzIGZvciB1bmRvIG9wZXJhdGlvbi5cbiAgICAgICAgdmFyIG5vZGVzVG9NYWtlQ29tcG91bmQgPSBwYXJhbS5ub2Rlc1RvTWFrZUNvbXBvdW5kO1xuICAgICAgICB2YXIgcmVtb3ZlZEVsZXMgPSBub2Rlc1RvTWFrZUNvbXBvdW5kLnVuaW9uKG5vZGVzVG9NYWtlQ29tcG91bmQuZGVzY2VuZGFudHMoKSk7XG4gICAgICAgIHJlbW92ZWRFbGVzID0gcmVtb3ZlZEVsZXMudW5pb24ocmVtb3ZlZEVsZXMuY29ubmVjdGVkRWRnZXMoKSk7XG4gICAgICAgIHJlc3VsdC5yZW1vdmVkRWxlcyA9IHJlbW92ZWRFbGVzO1xuICAgICAgICAvLyBBc3N1bWUgdGhhdCBhbGwgbm9kZXMgdG8gbWFrZSBjb21wb3VuZCBoYXZlIHRoZSBzYW1lIHBhcmVudFxuICAgICAgICB2YXIgb2xkUGFyZW50SWQgPSBub2Rlc1RvTWFrZUNvbXBvdW5kWzBdLmRhdGEoXCJwYXJlbnRcIik7XG4gICAgICAgIC8vIFRoZSBwYXJlbnQgb2YgbmV3IGNvbXBvdW5kIHdpbGwgYmUgdGhlIG9sZCBwYXJlbnQgb2YgdGhlIG5vZGVzIHRvIG1ha2UgY29tcG91bmRcbiAgICAgICAgLy8gTmV3IGVsZXMgaW5jbHVkZXMgbmV3IGNvbXBvdW5kIGFuZCB0aGUgbW92ZWQgZWxlcyBhbmQgd2lsbCBiZSB1c2VkIGluIHVuZG8gb3BlcmF0aW9uLlxuICAgICAgICByZXN1bHQubmV3RWxlcyA9IGVsZW1lbnRVdGlsaXRpZXMuY3JlYXRlQ29tcG91bmRGb3JHaXZlbk5vZGVzKG5vZGVzVG9NYWtlQ29tcG91bmQsIHBhcmFtLmNvbXBvdW5kVHlwZSk7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgcmVzdWx0LnJlbW92ZWRFbGVzID0gcGFyYW0ubmV3RWxlcy5yZW1vdmUoKTtcbiAgICAgICAgcmVzdWx0Lm5ld0VsZXMgPSBwYXJhbS5yZW1vdmVkRWxlcy5yZXN0b3JlKCk7XG4gICAgICAgIGVsZW1lbnRVdGlsaXRpZXMubWFpbnRhaW5Qb2ludGVyKHJlc3VsdC5uZXdFbGVzKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuXG4gICAgLy8gU2VjdGlvbiBFbmRcbiAgICAvLyBhZGQvcmVtb3ZlIGFjdGlvbiBmdW5jdGlvbnNcblxuICAgIC8vIFNlY3Rpb24gU3RhcnRcbiAgICAvLyBlYXN5IGNyZWF0aW9uIGFjdGlvbiBmdW5jdGlvbnNcblxuICAgIHVuZG9SZWRvQWN0aW9uRnVuY3Rpb25zLmNyZWF0ZVRlbXBsYXRlUmVhY3Rpb24gPSBmdW5jdGlvbiAocGFyYW0pIHtcbiAgICAgIHZhciBmaXJzdFRpbWUgPSBwYXJhbS5maXJzdFRpbWU7XG4gICAgICB2YXIgZWxlcztcblxuICAgICAgaWYgKGZpcnN0VGltZSkge1xuICAgICAgICBlbGVzID0gZWxlbWVudFV0aWxpdGllcy5jcmVhdGVUZW1wbGF0ZVJlYWN0aW9uKHBhcmFtLnRlbXBsYXRlVHlwZSwgcGFyYW0ubWFjcm9tb2xlY3VsZUxpc3QsIHBhcmFtLmNvbXBsZXhOYW1lLCBwYXJhbS5wcm9jZXNzUG9zaXRpb24sIHBhcmFtLnRpbGluZ1BhZGRpbmdWZXJ0aWNhbCwgcGFyYW0udGlsaW5nUGFkZGluZ0hvcml6b250YWwsIHBhcmFtLmVkZ2VMZW5ndGgsIHBhcmFtLmxheW91dFBhcmFtKVxuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIGVsZXMgPSBwYXJhbTtcbiAgICAgICAgY3kuYWRkKGVsZXMpO1xuXG4gICAgICAgIGN5LmVsZW1lbnRzKCkudW5zZWxlY3QoKTtcbiAgICAgICAgZWxlcy5zZWxlY3QoKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZWxlczogZWxlc1xuICAgICAgfTtcbiAgICB9O1xuXG4gICAgdW5kb1JlZG9BY3Rpb25GdW5jdGlvbnMuY3JlYXRlQWN0aXZhdGlvblJlYWN0aW9uID0gZnVuY3Rpb24ocGFyYW0pIHtcbiAgICAgIHZhciBmaXJzdFRpbWUgPSBwYXJhbS5maXJzdFRpbWU7XG4gICAgICB2YXIgZWxlcztcblxuICAgICAgaWYgKGZpcnN0VGltZSkge1xuICAgICAgICBlbGVzID0gZWxlbWVudFV0aWxpdGllcy5jcmVhdGVBY3RpdmF0aW9uUmVhY3Rpb24ocGFyYW0ucHJvdGVpbk5hbWUsIHBhcmFtLnByb2Nlc3NQb3NpdGlvbiwgcGFyYW0uZWRnZUxlbmd0aCwgcGFyYW0ucmV2ZXJzZSlcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICBlbGVzID0gcGFyYW07XG4gICAgICAgIGN5LmFkZChlbGVzKTtcblxuICAgICAgICBjeS5lbGVtZW50cygpLnVuc2VsZWN0KCk7XG4gICAgICAgIGVsZXMuc2VsZWN0KCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGVsZXM6IGVsZXNcbiAgICAgIH07XG4gICAgfTtcblxuICAgIHVuZG9SZWRvQWN0aW9uRnVuY3Rpb25zLmNyZWF0ZVRyYW5zbGF0aW9uID0gZnVuY3Rpb24ocGFyYW0pIHtcbiAgICAgIGxldCBmaXJzdFRpbWUgPSBwYXJhbS5maXJzdFRpbWU7XG4gICAgICBsZXQgZWxlcztcblxuICAgICAgaWYgKGZpcnN0VGltZSkge1xuICAgICAgICBlbGVzID0gZWxlbWVudFV0aWxpdGllcy5jcmVhdGVUcmFuc2xhdGlvbihwYXJhbS5yZWd1bGF0b3JMYWJlbCwgcGFyYW0ub3V0cHV0TGFiZWwsIHBhcmFtLm9yaWVudGF0aW9uKTtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICBlbGVzID0gcGFyYW07XG4gICAgICAgIGN5LmFkZChlbGVzKTtcblxuICAgICAgICBjeS5lbGVtZW50cygpLnVuc2VsZWN0KCk7XG4gICAgICAgIGVsZXMuc2VsZWN0KCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGVsZXM6IGVsZXNcbiAgICAgIH07XG4gICAgfTtcblxuICAgIHVuZG9SZWRvQWN0aW9uRnVuY3Rpb25zLmNyZWF0ZVRyYW5zY3JpcHRpb24gPSBmdW5jdGlvbihwYXJhbSkge1xuICAgICAgbGV0IGZpcnN0VGltZSA9IHBhcmFtLmZpcnN0VGltZTtcbiAgICAgIGxldCBlbGVzO1xuXG4gICAgICBpZiAoZmlyc3RUaW1lKSB7XG4gICAgICAgIGVsZXMgPSBlbGVtZW50VXRpbGl0aWVzLmNyZWF0ZVRyYW5zY3JpcHRpb24ocGFyYW0ubGFiZWwsIHBhcmFtLm9yaWVudGF0aW9uKTtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICBlbGVzID0gcGFyYW07XG4gICAgICAgIGN5LmFkZChlbGVzKTtcblxuICAgICAgICBjeS5lbGVtZW50cygpLnVuc2VsZWN0KCk7XG4gICAgICAgIGVsZXMuc2VsZWN0KCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGVsZXM6IGVsZXNcbiAgICAgIH07XG4gICAgfTtcblxuICAgIHVuZG9SZWRvQWN0aW9uRnVuY3Rpb25zLmNyZWF0ZURlZ3JhZGF0aW9uID0gZnVuY3Rpb24ocGFyYW0pIHtcbiAgICAgIGxldCBmaXJzdFRpbWUgPSBwYXJhbS5maXJzdFRpbWU7XG4gICAgICBsZXQgZWxlcztcblxuICAgICAgaWYgKGZpcnN0VGltZSkge1xuICAgICAgICBlbGVzID0gZWxlbWVudFV0aWxpdGllcy5jcmVhdGVEZWdyYWRhdGlvbihwYXJhbS5tYWNyb21vbGVjdWxlLCBwYXJhbS5vcmllbnRhdGlvbik7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgZWxlcyA9IHBhcmFtO1xuICAgICAgICBjeS5hZGQoZWxlcyk7XG5cbiAgICAgICAgY3kuZWxlbWVudHMoKS51bnNlbGVjdCgpO1xuICAgICAgICBlbGVzLnNlbGVjdCgpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBlbGVzOiBlbGVzXG4gICAgICB9O1xuICAgIH07XG5cbiAgICB1bmRvUmVkb0FjdGlvbkZ1bmN0aW9ucy5jcmVhdGVDb21wbGV4UHJvdGVpbkZvcm1hdGlvbiA9IGZ1bmN0aW9uKHBhcmFtKSB7XG4gICAgICBsZXQgZmlyc3RUaW1lID0gcGFyYW0uZmlyc3RUaW1lO1xuICAgICAgbGV0IGVsZXM7XG5cbiAgICAgIGlmIChmaXJzdFRpbWUpIHtcbiAgICAgICAgZWxlcyA9IGVsZW1lbnRVdGlsaXRpZXMuY3JlYXRlQ29tcGxleFByb3RlaW5Gb3JtYXRpb24ocGFyYW0ucHJvdGVpbkxhYmVscywgcGFyYW0uY29tcGxleExhYmVsLCBwYXJhbS5yZWd1bGF0b3IsIHBhcmFtLm9yaWVudGF0aW9uLCBwYXJhbS5yZXZlcnNlKTtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICBlbGVzID0gcGFyYW07XG4gICAgICAgIGN5LmFkZChlbGVzKTtcblxuICAgICAgICBjeS5lbGVtZW50cygpLnVuc2VsZWN0KCk7XG4gICAgICAgIGVsZXMuc2VsZWN0KCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGVsZXM6IGVsZXNcbiAgICAgIH07XG4gICAgfTtcblxuICAgIHVuZG9SZWRvQWN0aW9uRnVuY3Rpb25zLmNyZWF0ZU11bHRpbWVyaXphdGlvbiA9IGZ1bmN0aW9uKHBhcmFtKSB7XG4gICAgICBsZXQgZmlyc3RUaW1lID0gcGFyYW0uZmlyc3RUaW1lO1xuICAgICAgbGV0IGVsZXM7XG5cbiAgICAgIGlmIChmaXJzdFRpbWUpIHtcbiAgICAgICAgZWxlcyA9IGVsZW1lbnRVdGlsaXRpZXMuY3JlYXRlTXVsdGltZXJpemF0aW9uKHBhcmFtLm1hY3JvbW9sZWN1bGUsIHBhcmFtLnJlZ3VsYXRvciwgcGFyYW0ucmVndWxhdG9yTXVsdGltZXIsIHBhcmFtLm9yaWVudGF0aW9uKTtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICBlbGVzID0gcGFyYW07XG4gICAgICAgIGN5LmFkZChlbGVzKTtcblxuICAgICAgICBjeS5lbGVtZW50cygpLnVuc2VsZWN0KCk7XG4gICAgICAgIGVsZXMuc2VsZWN0KCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGVsZXM6IGVsZXNcbiAgICAgIH07XG4gICAgfTtcblxuICAgIHVuZG9SZWRvQWN0aW9uRnVuY3Rpb25zLmNyZWF0ZUNvbnZlcnNpb24gPSBmdW5jdGlvbihwYXJhbSkge1xuICAgICAgbGV0IGZpcnN0VGltZSA9IHBhcmFtLmZpcnN0VGltZTtcbiAgICAgIGxldCBlbGVzO1xuXG4gICAgICBpZiAoZmlyc3RUaW1lKSB7XG4gICAgICAgIGVsZXMgPSBlbGVtZW50VXRpbGl0aWVzLmNyZWF0ZUNvbnZlcnNpb24ocGFyYW0ubWFjcm9tb2xlY3VsZSwgcGFyYW0ucmVndWxhdG9yLCBwYXJhbS5yZWd1bGF0b3JNdWx0aW1lciwgcGFyYW0ub3JpZW50YXRpb24sIHBhcmFtLmlucHV0SW5mb2JveExhYmVscywgcGFyYW0ub3V0cHV0SW5mb2JveExhYmVscyk7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgZWxlcyA9IHBhcmFtO1xuICAgICAgICBjeS5hZGQoZWxlcyk7XG5cbiAgICAgICAgY3kuZWxlbWVudHMoKS51bnNlbGVjdCgpO1xuICAgICAgICBlbGVzLnNlbGVjdCgpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBlbGVzOiBlbGVzXG4gICAgICB9O1xuICAgIH07XG5cbiAgICB1bmRvUmVkb0FjdGlvbkZ1bmN0aW9ucy5jcmVhdGVNZXRhYm9saWNSZWFjdGlvbiA9IGZ1bmN0aW9uKHBhcmFtKSB7XG4gICAgICBsZXQgZmlyc3RUaW1lID0gcGFyYW0uZmlyc3RUaW1lO1xuICAgICAgbGV0IGVsZXM7XG5cbiAgICAgIGlmIChmaXJzdFRpbWUpIHtcbiAgICAgICAgZWxlcyA9IGVsZW1lbnRVdGlsaXRpZXMuY3JlYXRlTWV0YWJvbGljUmVhY3Rpb24ocGFyYW0uaW5wdXRzLCBwYXJhbS5vdXRwdXRzLCBwYXJhbS5yZXZlcnNpYmxlLCBwYXJhbS5yZWd1bGF0b3IsIHBhcmFtLnJlZ3VsYXRvck11bHRpbWVyLCBwYXJhbS5vcmllbnRhdGlvbik7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgZWxlcyA9IHBhcmFtO1xuICAgICAgICBjeS5hZGQoZWxlcyk7XG5cbiAgICAgICAgY3kuZWxlbWVudHMoKS51bnNlbGVjdCgpO1xuICAgICAgICBlbGVzLnNlbGVjdCgpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBlbGVzOiBlbGVzXG4gICAgICB9O1xuICAgIH07XG5cbiAgICB1bmRvUmVkb0FjdGlvbkZ1bmN0aW9ucy5jcmVhdGVNZXRhYm9saWNDYXRhbHl0aWNBY3Rpdml0eSA9IGZ1bmN0aW9uKHBhcmFtKSB7XG4gICAgICB2YXIgZmlyc3RUaW1lID0gcGFyYW0uZmlyc3RUaW1lO1xuICAgICAgdmFyIGVsZXM7XG5cbiAgICAgIGlmIChmaXJzdFRpbWUpIHtcbiAgICAgICAgZWxlcyA9IGVsZW1lbnRVdGlsaXRpZXMuY3JlYXRlTWV0YWJvbGljQ2F0YWx5dGljQWN0aXZpdHkocGFyYW0uaW5wdXROb2RlTGlzdCwgcGFyYW0ub3V0cHV0Tm9kZUxpc3QsIHBhcmFtLmNhdGFseXN0TmFtZSwgcGFyYW0uY2F0YWx5c3RUeXBlLCBwYXJhbS5wcm9jZXNzUG9zaXRpb24sIHBhcmFtLnRpbGluZ1BhZGRpbmdWZXJ0aWNhbCwgcGFyYW0udGlsaW5nUGFkZGluZ0hvcml6b250YWwsIHBhcmFtLmVkZ2VMZW5ndGgpXG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgZWxlcyA9IHBhcmFtO1xuICAgICAgICBjeS5hZGQoZWxlcyk7XG5cbiAgICAgICAgY3kuZWxlbWVudHMoKS51bnNlbGVjdCgpO1xuICAgICAgICBlbGVzLnNlbGVjdCgpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBlbGVzOiBlbGVzXG4gICAgICB9O1xuICAgIH07XG5cbiAgICB1bmRvUmVkb0FjdGlvbkZ1bmN0aW9ucy5jcmVhdGVUcmFuc2NyaXB0aW9uUmVhY3Rpb24gPSBmdW5jdGlvbihwYXJhbSkge1xuICAgICAgdmFyIGZpcnN0VGltZSA9IHBhcmFtLmZpcnN0VGltZTtcbiAgICAgIHZhciBlbGVzO1xuXG4gICAgICBpZiAoZmlyc3RUaW1lKSB7XG4gICAgICAgIGVsZXMgPSBlbGVtZW50VXRpbGl0aWVzLmNyZWF0ZVRyYW5zY3JpcHRpb25SZWFjdGlvbihwYXJhbS5nZW5lTmFtZSwgcGFyYW0ubVJuYU5hbWUsIHBhcmFtLnByb2Nlc3NQb3NpdGlvbiwgcGFyYW0uZWRnZUxlbmd0aClcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICBlbGVzID0gcGFyYW07XG4gICAgICAgIGN5LmFkZChlbGVzKTtcblxuICAgICAgICBjeS5lbGVtZW50cygpLnVuc2VsZWN0KCk7XG4gICAgICAgIGVsZXMuc2VsZWN0KCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGVsZXM6IGVsZXNcbiAgICAgIH07XG4gICAgfTtcblxuICAgIHVuZG9SZWRvQWN0aW9uRnVuY3Rpb25zLmNyZWF0ZVRyYW5zbGF0aW9uUmVhY3Rpb24gPSBmdW5jdGlvbihwYXJhbSkge1xuICAgICAgdmFyIGZpcnN0VGltZSA9IHBhcmFtLmZpcnN0VGltZTtcbiAgICAgIHZhciBlbGVzO1xuXG4gICAgICBpZiAoZmlyc3RUaW1lKSB7XG4gICAgICAgIGVsZXMgPSBlbGVtZW50VXRpbGl0aWVzLmNyZWF0ZVRyYW5zbGF0aW9uUmVhY3Rpb24ocGFyYW0ubVJuYU5hbWUsIHBhcmFtLnByb3RlaW5OYW1lLCBwYXJhbS5wcm9jZXNzUG9zaXRpb24sIHBhcmFtLmVkZ2VMZW5ndGgpXG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgZWxlcyA9IHBhcmFtO1xuICAgICAgICBjeS5hZGQoZWxlcyk7XG5cbiAgICAgICAgY3kuZWxlbWVudHMoKS51bnNlbGVjdCgpO1xuICAgICAgICBlbGVzLnNlbGVjdCgpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBlbGVzOiBlbGVzXG4gICAgICB9O1xuICAgIH07XG5cbiAgICAvLyBTZWN0aW9uIEVuZFxuICAgIC8vIGVhc3kgY3JlYXRpb24gYWN0aW9uIGZ1bmN0aW9uc1xuXG4gICAgLy8gU2VjdGlvbiBTdGFydFxuICAgIC8vIGdlbmVyYWwgYWN0aW9uIGZ1bmN0aW9uc1xuXG4gICAgdW5kb1JlZG9BY3Rpb25GdW5jdGlvbnMuZ2V0Tm9kZVBvc2l0aW9ucyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBwb3NpdGlvbnMgPSB7fTtcbiAgICAgIHZhciBub2RlcyA9IGN5Lm5vZGVzKCk7XG5cbiAgICAgIG5vZGVzLmVhY2goZnVuY3Rpb24oZWxlLCBpKSB7XG4gICAgICAgIGlmKHR5cGVvZiBlbGUgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICBlbGUgPSBpO1xuICAgICAgICB9XG5cbiAgICAgICAgcG9zaXRpb25zW2VsZS5pZCgpXSA9IHtcbiAgICAgICAgICB4OiBlbGUucG9zaXRpb24oXCJ4XCIpLFxuICAgICAgICAgIHk6IGVsZS5wb3NpdGlvbihcInlcIilcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gcG9zaXRpb25zO1xuICAgIH07XG5cbiAgICB1bmRvUmVkb0FjdGlvbkZ1bmN0aW9ucy5yZXR1cm5Ub1Bvc2l0aW9ucyA9IGZ1bmN0aW9uIChwb3NpdGlvbnMpIHtcbiAgICAgIHZhciBjdXJyZW50UG9zaXRpb25zID0ge307XG4gICAgICBjeS5ub2RlcygpLnBvc2l0aW9ucyhmdW5jdGlvbiAoZWxlLCBpKSB7XG4gICAgICAgIGlmKHR5cGVvZiBlbGUgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICBlbGUgPSBpO1xuICAgICAgICB9XG5cbiAgICAgICAgY3VycmVudFBvc2l0aW9uc1tlbGUuaWQoKV0gPSB7XG4gICAgICAgICAgeDogZWxlLnBvc2l0aW9uKFwieFwiKSxcbiAgICAgICAgICB5OiBlbGUucG9zaXRpb24oXCJ5XCIpXG4gICAgICAgIH07XG5cbiAgICAgICAgdmFyIHBvcyA9IHBvc2l0aW9uc1tlbGUuaWQoKV07XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgeDogcG9zLngsXG4gICAgICAgICAgeTogcG9zLnlcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gY3VycmVudFBvc2l0aW9ucztcbiAgICB9O1xuXG4gICAgdW5kb1JlZG9BY3Rpb25GdW5jdGlvbnMucmVzaXplTm9kZXMgPSBmdW5jdGlvbiAocGFyYW0pIHtcbiAgICAgIHZhciByZXN1bHQgPSB7XG4gICAgICAgIHBlcmZvcm1PcGVyYXRpb246IHRydWVcbiAgICAgIH07XG5cbiAgICAgIHZhciBub2RlcyA9IHBhcmFtLm5vZGVzO1xuXG4gICAgICByZXN1bHQuc2l6ZU1hcCA9IHt9O1xuICAgICAgcmVzdWx0LnVzZUFzcGVjdFJhdGlvID0gZmFsc2U7XG4gICAgICByZXN1bHQucHJlc2VydmVSZWxhdGl2ZVBvcyA9IHBhcmFtLnByZXNlcnZlUmVsYXRpdmVQb3M7XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIG5vZGUgPSBub2Rlc1tpXTtcbiAgICAgICAgaWYobm9kZS5pc1BhcmVudCgpKXtcbiAgICAgICAgICByZXN1bHQuc2l6ZU1hcFtub2RlLmlkKCldID0ge1xuICAgICAgICAgICAgdzogbm9kZS5kYXRhKFwibWluV2lkdGhcIikgfHwgMCxcbiAgICAgICAgICAgIGg6IG5vZGUuZGF0YShcIm1pbkhlaWdodFwiKSB8fCAwLFxuICAgICAgICAgICAgYmlhc0wgOiBub2RlLmRhdGEoXCJtaW5XaWR0aEJpYXNMZWZ0XCIpIHx8IDAsXG4gICAgICAgICAgICBiaWFzUiA6IG5vZGUuZGF0YShcIm1pbldpZHRoQmlhc1JpZ2h0XCIpIHx8IDAsXG4gICAgICAgICAgICBiaWFzVCA6IG5vZGUuZGF0YShcIm1pbkhlaWdodEJpYXNUb3BcIikgfHwgMCxcbiAgICAgICAgICAgIGJpYXNCIDogbm9kZS5kYXRhKFwibWluSGVpZ2h0Qmlhc0JvdHRvbVwiKSB8fCAwXG4gICAgICAgICAgIC8vIHc6IG5vZGUuY3NzKFwibWluV2lkdGhcIikgIT0gMD8gIG5vZGUuZGF0YShcIm1pbldpZHRoXCIpIDogbm9kZS5jaGlsZHJlbigpLmJvdW5kaW5nQm94KCkudyxcbiAgICAgICAgICAgIC8vaDogbm9kZS5jc3MoXCJtaW4taGVpZ2h0XCIpICE9IDA/ICBub2RlLmRhdGEoXCJtaW5IZWlnaHRcIikgOiBub2RlLmNoaWxkcmVuKCkuYm91bmRpbmdCb3goKS5oXG4gICAgICAgICAgfTtcbiAgICAgICAgfWVsc2V7XG4gICAgICAgICAgcmVzdWx0LnNpemVNYXBbbm9kZS5pZCgpXSA9IHtcbiAgICAgICAgICAgIHc6IG5vZGUud2lkdGgoKSxcbiAgICAgICAgICAgIGg6IG5vZGUuaGVpZ2h0KClcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgfVxuXG4gICAgICByZXN1bHQubm9kZXMgPSBub2RlcztcblxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2Rlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgbm9kZSA9IG5vZGVzW2ldO1xuXG4gICAgICAgIGlmIChwYXJhbS5wZXJmb3JtT3BlcmF0aW9uKSB7XG4gICAgICAgICAgaWYgKHBhcmFtLnNpemVNYXApIHtcbiAgICAgICAgICAgIC8qIGlmIChwYXJhbS5wcmVzZXJ2ZVJlbGF0aXZlUG9zID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgIHZhciBvbGRXaWR0aCA9IG5vZGUuZGF0YShcImJib3hcIikudztcbiAgICAgICAgICAgICAgdmFyIG9sZEhlaWdodCA9IG5vZGUuZGF0YShcImJib3hcIikuaDtcbiAgICAgICAgICAgIH0gKi9cblxuICAgICAgICAgICAgaWYobm9kZS5pc1BhcmVudCgpKXtcbiAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgIG5vZGUuZGF0YShcIm1pbkhlaWdodFwiICwgcGFyYW0uc2l6ZU1hcFtub2RlLmlkKCldLmgpO1xuICAgICAgICAgICAgICBub2RlLmRhdGEoXCJtaW5XaWR0aFwiICwgcGFyYW0uc2l6ZU1hcFtub2RlLmlkKCldLncpO1xuICAgICAgICAgICAgICBub2RlLmRhdGEoXCJtaW5XaWR0aEJpYXNMZWZ0XCIsIHBhcmFtLnNpemVNYXBbbm9kZS5pZCgpXS5iaWFzTCk7XG4gICAgICAgICAgICAgIG5vZGUuZGF0YShcIm1pbldpZHRoQmlhc1JpZ2h0XCIsIHBhcmFtLnNpemVNYXBbbm9kZS5pZCgpXS5iaWFzUik7XG4gICAgICAgICAgICAgIG5vZGUuZGF0YShcIm1pbkhlaWdodEJpYXNUb3BcIiwgcGFyYW0uc2l6ZU1hcFtub2RlLmlkKCldLmJpYXNUKTtcbiAgICAgICAgICAgICAgbm9kZS5kYXRhKFwibWluSGVpZ2h0Qmlhc0JvdHRvbVwiLCBwYXJhbS5zaXplTWFwW25vZGUuaWQoKV0uYmlhc0IpO1xuXG4gICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAgbm9kZS5kYXRhKFwiYmJveFwiKS53ID0gcGFyYW0uc2l6ZU1hcFtub2RlLmlkKCldLnc7XG4gICAgICAgICAgICAgIG5vZGUuZGF0YShcImJib3hcIikuaCA9IHBhcmFtLnNpemVNYXBbbm9kZS5pZCgpXS5oO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICBcblxuICAgICAgICAgICAgLyogaWYgKHBhcmFtLnByZXNlcnZlUmVsYXRpdmVQb3MgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgdmFyIHN0YXRlc2FuZGluZm9zID0gbm9kZS5kYXRhKCdzdGF0ZXNhbmRpbmZvcycpO1xuICAgICAgICAgICAgICB2YXIgdG9wQm90dG9tID0gc3RhdGVzYW5kaW5mb3MuZmlsdGVyKGJveCA9PiAoYm94LmFuY2hvclNpZGUgPT09IFwidG9wXCIgfHwgYm94LmFuY2hvclNpZGUgPT09IFwiYm90dG9tXCIpKTtcbiAgICAgICAgICAgICAgdmFyIHJpZ2h0TGVmdCA9IHN0YXRlc2FuZGluZm9zLmZpbHRlcihib3ggPT4gKGJveC5hbmNob3JTaWRlID09PSBcInJpZ2h0XCIgfHwgYm94LmFuY2hvclNpZGUgPT09IFwibGVmdFwiKSk7XG5cbiAgICAgICAgICAgICAgdG9wQm90dG9tLmZvckVhY2goZnVuY3Rpb24oYm94KXtcbiAgICAgICAgICAgICAgICBpZiAoYm94LmJib3gueCA8IDApIHtcbiAgICAgICAgICAgICAgICAgIGJveC5iYm94LnggPSAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChib3guYmJveC54ID4gb2xkV2lkdGgpIHtcbiAgICAgICAgICAgICAgICAgIGJveC5iYm94LnggPSBvbGRXaWR0aDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYm94LmJib3gueCA9IG5vZGUuZGF0YShcImJib3hcIikudyAqIGJveC5iYm94LnggLyBvbGRXaWR0aDtcbiAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgcmlnaHRMZWZ0LmZvckVhY2goZnVuY3Rpb24oYm94KXtcbiAgICAgICAgICAgICAgICBpZiAoYm94LmJib3gueSA8IDApIHtcbiAgICAgICAgICAgICAgICAgIGJveC5iYm94LnkgPSAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChib3guYmJveC55ID4gb2xkSGVpZ2h0KSB7XG4gICAgICAgICAgICAgICAgICBib3guYmJveC55ID0gb2xkSGVpZ2h0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBib3guYmJveC55ID0gbm9kZS5kYXRhKFwiYmJveFwiKS5oICogYm94LmJib3gueSAvIG9sZEhlaWdodDtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9ICovXG4gICAgICAgICAgfVxuICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZWxlbWVudFV0aWxpdGllcy5yZXNpemVOb2RlcyhwYXJhbS5ub2RlcywgcGFyYW0ud2lkdGgsIHBhcmFtLmhlaWdodCwgcGFyYW0udXNlQXNwZWN0UmF0aW8sIHBhcmFtLnByZXNlcnZlUmVsYXRpdmVQb3MpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY3kuc3R5bGUoKS51cGRhdGUoKTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfTtcblxuICAgIHVuZG9SZWRvQWN0aW9uRnVuY3Rpb25zLmNoYW5nZU5vZGVMYWJlbCA9IGZ1bmN0aW9uIChwYXJhbSkge1xuICAgICAgdmFyIHJlc3VsdCA9IHtcbiAgICAgIH07XG4gICAgICB2YXIgbm9kZXMgPSBwYXJhbS5ub2RlcztcbiAgICAgIHJlc3VsdC5ub2RlcyA9IG5vZGVzO1xuICAgICAgcmVzdWx0LmxhYmVsID0ge307XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIG5vZGUgPSBub2Rlc1tpXTtcbiAgICAgICAgcmVzdWx0LmxhYmVsW25vZGUuaWQoKV0gPSBub2RlLl9wcml2YXRlLmRhdGEubGFiZWw7XG4gICAgICB9XG5cbiAgICAgIGlmIChwYXJhbS5maXJzdFRpbWUpIHtcbiAgICAgICAgbm9kZXMuZGF0YSgnbGFiZWwnLCBwYXJhbS5sYWJlbCk7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2Rlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIHZhciBub2RlID0gbm9kZXNbaV07XG4gICAgICAgICAgbm9kZS5fcHJpdmF0ZS5kYXRhLmxhYmVsID0gcGFyYW0ubGFiZWxbbm9kZS5pZCgpXTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH07XG5cbiAgICB1bmRvUmVkb0FjdGlvbkZ1bmN0aW9ucy51cGRhdGVJbmZvYm94U3R5bGUgPSBmdW5jdGlvbiAocGFyYW0pIHtcbiAgICAgIHZhciByZXN1bHQgPSB7XG4gICAgICB9O1xuICAgICAgdmFyIHN0eWxlID0gcGFyYW0ubm9kZS5kYXRhKCdzdGF0ZXNhbmRpbmZvcycpW3BhcmFtLmluZGV4XS5zdHlsZTtcbiAgICAgIHJlc3VsdC5uZXdQcm9wcyA9ICQuZXh0ZW5kKCB7fSwgc3R5bGUgKTtcbiAgICAgIHJlc3VsdC5ub2RlID0gcGFyYW0ubm9kZTtcbiAgICAgIHJlc3VsdC5pbmRleCA9IHBhcmFtLmluZGV4O1xuXG4gICAgICBlbGVtZW50VXRpbGl0aWVzLnVwZGF0ZUluZm9ib3hTdHlsZSggcGFyYW0ubm9kZSwgcGFyYW0uaW5kZXgsIHBhcmFtLm5ld1Byb3BzICk7XG5cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfTtcblxuICAgIHVuZG9SZWRvQWN0aW9uRnVuY3Rpb25zLnVwZGF0ZUluZm9ib3hPYmogPSBmdW5jdGlvbiAocGFyYW0pIHtcbiAgICAgIHZhciByZXN1bHQgPSB7XG4gICAgICB9O1xuICAgICAgdmFyIG9iaiA9IHBhcmFtLm5vZGUuZGF0YSgnc3RhdGVzYW5kaW5mb3MnKVtwYXJhbS5pbmRleF07XG4gICAgICByZXN1bHQubmV3UHJvcHMgPSAkLmV4dGVuZCgge30sIG9iaiApO1xuICAgICAgcmVzdWx0Lm5vZGUgPSBwYXJhbS5ub2RlO1xuICAgICAgcmVzdWx0LmluZGV4ID0gcGFyYW0uaW5kZXg7XG5cbiAgICAgIGVsZW1lbnRVdGlsaXRpZXMudXBkYXRlSW5mb2JveE9iaiggcGFyYW0ubm9kZSwgcGFyYW0uaW5kZXgsIHBhcmFtLm5ld1Byb3BzICk7XG5cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfTtcblxuICAgIHVuZG9SZWRvQWN0aW9uRnVuY3Rpb25zLmNoYW5nZURhdGEgPSBmdW5jdGlvbiAocGFyYW0pIHtcbiAgICAgIHZhciByZXN1bHQgPSB7XG4gICAgICB9O1xuICAgICAgdmFyIGVsZXMgPSBwYXJhbS5lbGVzO1xuICAgICAgcmVzdWx0Lm5hbWUgPSBwYXJhbS5uYW1lO1xuICAgICAgcmVzdWx0LnZhbHVlTWFwID0ge307XG4gICAgICByZXN1bHQuZWxlcyA9IGVsZXM7XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZWxlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgZWxlID0gZWxlc1tpXTtcbiAgICAgICAgcmVzdWx0LnZhbHVlTWFwW2VsZS5pZCgpXSA9IGVsZS5kYXRhKHBhcmFtLm5hbWUpO1xuICAgICAgfVxuXG4gICAgICBlbGVtZW50VXRpbGl0aWVzLmNoYW5nZURhdGEocGFyYW0uZWxlcywgcGFyYW0ubmFtZSwgcGFyYW0udmFsdWVNYXApO1xuXG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH07XG5cbiAgICB1bmRvUmVkb0FjdGlvbkZ1bmN0aW9ucy51cGRhdGVTZXRGaWVsZCA9IGZ1bmN0aW9uKCBwYXJhbSApIHtcbiAgICAgIHZhciB1cGRhdGVzID0gZWxlbWVudFV0aWxpdGllcy51cGRhdGVTZXRGaWVsZCggcGFyYW0uZWxlLCBwYXJhbS5maWVsZE5hbWUsIHBhcmFtLnRvRGVsZXRlLCBwYXJhbS50b0FkZCwgcGFyYW0uY2FsbGJhY2sgKTtcblxuICAgICAgdmFyIHJlc3VsdCA9IHtcbiAgICAgICAgZWxlOiBwYXJhbS5lbGUsXG4gICAgICAgIGZpZWxkTmFtZTogcGFyYW0uZmllbGROYW1lLFxuICAgICAgICBjYWxsYmFjazogcGFyYW0uY2FsbGJhY2ssXG4gICAgICAgIHRvRGVsZXRlOiB1cGRhdGVzLmFkZGVkLFxuICAgICAgICB0b0FkZDogdXBkYXRlcy5kZWxldGVkXG4gICAgICB9O1xuXG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH07XG5cbiAgICB1bmRvUmVkb0FjdGlvbkZ1bmN0aW9ucy5jaGFuZ2VDc3MgPSBmdW5jdGlvbiAocGFyYW0pIHtcbiAgICAgIHZhciByZXN1bHQgPSB7XG4gICAgICB9O1xuICAgICAgdmFyIGVsZXMgPSBwYXJhbS5lbGVzO1xuICAgICAgcmVzdWx0Lm5hbWUgPSBwYXJhbS5uYW1lO1xuICAgICAgcmVzdWx0LnZhbHVlTWFwID0ge307XG4gICAgICByZXN1bHQuZWxlcyA9IGVsZXM7XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZWxlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgZWxlID0gZWxlc1tpXTtcbiAgICAgICAgcmVzdWx0LnZhbHVlTWFwW2VsZS5pZCgpXSA9IGVsZS5jc3MocGFyYW0ubmFtZSk7XG4gICAgICB9XG5cbiAgICAgIGVsZW1lbnRVdGlsaXRpZXMuY2hhbmdlQ3NzKHBhcmFtLmVsZXMsIHBhcmFtLm5hbWUsIHBhcmFtLnZhbHVlTWFwKTtcblxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuXG4gICAgdW5kb1JlZG9BY3Rpb25GdW5jdGlvbnMuY2hhbmdlRm9udFByb3BlcnRpZXMgPSBmdW5jdGlvbiAocGFyYW0pIHtcbiAgICAgIHZhciByZXN1bHQgPSB7XG4gICAgICB9O1xuXG4gICAgICB2YXIgZWxlcyA9IHBhcmFtLmVsZXM7XG4gICAgICByZXN1bHQuZGF0YSA9IHt9O1xuICAgICAgcmVzdWx0LmVsZXMgPSBlbGVzO1xuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVsZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGVsZSA9IGVsZXNbaV07XG5cbiAgICAgICAgcmVzdWx0LmRhdGFbZWxlLmlkKCldID0ge307XG5cbiAgICAgICAgdmFyIGRhdGEgPSBwYXJhbS5maXJzdFRpbWUgPyBwYXJhbS5kYXRhIDogcGFyYW0uZGF0YVtlbGUuaWQoKV07XG5cbiAgICAgICAgZm9yICh2YXIgcHJvcCBpbiBkYXRhKSB7XG4gICAgICAgICAgcmVzdWx0LmRhdGFbZWxlLmlkKCldW3Byb3BdID0gZWxlLmRhdGEocHJvcCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHBhcmFtLmZpcnN0VGltZSkge1xuICAgICAgICBlbGVtZW50VXRpbGl0aWVzLmNoYW5nZUZvbnRQcm9wZXJ0aWVzKGVsZXMsIGRhdGEpO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZWxlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIHZhciBlbGUgPSBlbGVzW2ldO1xuXG4gICAgICAgICAgZWxlbWVudFV0aWxpdGllcy5jaGFuZ2VGb250UHJvcGVydGllcyhlbGUsIGRhdGEpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfTtcblxuICAgIC8qXG4gICAgICogU2hvdyBlbGVzIGFuZCBwZXJmb3JtIGxheW91dC5cbiAgICAgKi9cbiAgICB1bmRvUmVkb0FjdGlvbkZ1bmN0aW9ucy5zaG93QW5kUGVyZm9ybUxheW91dCA9IGZ1bmN0aW9uIChwYXJhbSkge1xuICAgICAgdmFyIGVsZXMgPSBwYXJhbS5lbGVzO1xuXG4gICAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgICByZXN1bHQucG9zaXRpb25zID0gdW5kb1JlZG9BY3Rpb25GdW5jdGlvbnMuZ2V0Tm9kZVBvc2l0aW9ucygpO1xuXG4gICAgICBpZiAocGFyYW0uZmlyc3RUaW1lKSB7XG4gICAgICAgIHJlc3VsdC5lbGVzID0gZWxlbWVudFV0aWxpdGllcy5zaG93QW5kUGVyZm9ybUxheW91dChwYXJhbS5lbGVzLCBwYXJhbS5sYXlvdXRwYXJhbSk7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgcmVzdWx0LmVsZXMgPSBjeS52aWV3VXRpbGl0aWVzKCkuc2hvdyhlbGVzKTsgLy8gU2hvdyBnaXZlbiBlbGVzXG4gICAgICAgIHVuZG9SZWRvQWN0aW9uRnVuY3Rpb25zLnJldHVyblRvUG9zaXRpb25zKHBhcmFtLnBvc2l0aW9ucyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfTtcblxuICAgIHVuZG9SZWRvQWN0aW9uRnVuY3Rpb25zLnVuZG9TaG93QW5kUGVyZm9ybUxheW91dCA9IGZ1bmN0aW9uIChwYXJhbSkge1xuICAgICAgdmFyIGVsZXMgPSBwYXJhbS5lbGVzO1xuXG4gICAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgICByZXN1bHQucG9zaXRpb25zID0gdW5kb1JlZG9BY3Rpb25GdW5jdGlvbnMuZ2V0Tm9kZVBvc2l0aW9ucygpO1xuICAgICAgcmVzdWx0LmVsZXMgPSBjeS52aWV3VXRpbGl0aWVzKCkuaGlkZShlbGVzKTsgLy8gSGlkZSBwcmV2aW91c2x5IHVuaGlkZGVuIGVsZXM7XG5cbiAgICAgIHVuZG9SZWRvQWN0aW9uRnVuY3Rpb25zLnJldHVyblRvUG9zaXRpb25zKHBhcmFtLnBvc2l0aW9ucyk7XG5cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfTtcblxuICAgIC8qXG4gICAgICogSGlkZSBlbGVzIGFuZCBwZXJmb3JtIGxheW91dC5cbiAgICAgKi9cbiAgICB1bmRvUmVkb0FjdGlvbkZ1bmN0aW9ucy5oaWRlQW5kUGVyZm9ybUxheW91dCA9IGZ1bmN0aW9uIChwYXJhbSkge1xuICAgICAgICB2YXIgZWxlcyA9IHBhcmFtLmVsZXM7XG5cbiAgICAgICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgICAgICByZXN1bHQucG9zaXRpb25zID0gdW5kb1JlZG9BY3Rpb25GdW5jdGlvbnMuZ2V0Tm9kZVBvc2l0aW9ucygpO1xuXG4gICAgICAgIGlmIChwYXJhbS5maXJzdFRpbWUpIHtcbiAgICAgICAgICAgIHJlc3VsdC5lbGVzID0gZWxlbWVudFV0aWxpdGllcy5oaWRlQW5kUGVyZm9ybUxheW91dChwYXJhbS5lbGVzLCBwYXJhbS5sYXlvdXRwYXJhbSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXN1bHQuZWxlcyA9IGN5LnZpZXdVdGlsaXRpZXMoKS5oaWRlKGVsZXMpOyAvLyBIaWRlIGdpdmVuIGVsZXNcbiAgICAgICAgICAgIHVuZG9SZWRvQWN0aW9uRnVuY3Rpb25zLnJldHVyblRvUG9zaXRpb25zKHBhcmFtLnBvc2l0aW9ucyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH07XG5cbiAgICB1bmRvUmVkb0FjdGlvbkZ1bmN0aW9ucy51bmRvSGlkZUFuZFBlcmZvcm1MYXlvdXQgPSBmdW5jdGlvbiAocGFyYW0pIHtcbiAgICAgICAgdmFyIGVsZXMgPSBwYXJhbS5lbGVzO1xuXG4gICAgICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICAgICAgcmVzdWx0LnBvc2l0aW9ucyA9IHVuZG9SZWRvQWN0aW9uRnVuY3Rpb25zLmdldE5vZGVQb3NpdGlvbnMoKTtcbiAgICAgICAgcmVzdWx0LmVsZXMgPSBjeS52aWV3VXRpbGl0aWVzKCkuc2hvdyhlbGVzKTsgLy8gU2hvdyBwcmV2aW91c2x5IGhpZGRlbiBlbGVzXG5cbiAgICAgICAgdW5kb1JlZG9BY3Rpb25GdW5jdGlvbnMucmV0dXJuVG9Qb3NpdGlvbnMocGFyYW0ucG9zaXRpb25zKTtcblxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH07XG5cbiAgICAvKlxuICAgICAqIERlbGV0ZSBlbGVzIGFuZCBwZXJmb3JtIGxheW91dC5cbiAgICAgKi9cbiAgICB1bmRvUmVkb0FjdGlvbkZ1bmN0aW9ucy5kZWxldGVBbmRQZXJmb3JtTGF5b3V0ID0gZnVuY3Rpb24gKHBhcmFtKSB7XG4gICAgICB2YXIgZWxlcyA9IHBhcmFtLmVsZXM7XG5cbiAgICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICAgIHJlc3VsdC5wb3NpdGlvbnMgPSB1bmRvUmVkb0FjdGlvbkZ1bmN0aW9ucy5nZXROb2RlUG9zaXRpb25zKCk7XG5cbiAgICAgIGlmIChwYXJhbS5maXJzdFRpbWUpIHtcbiAgICAgICAgICByZXN1bHQuZWxlcyA9IGVsZW1lbnRVdGlsaXRpZXMuZGVsZXRlQW5kUGVyZm9ybUxheW91dChwYXJhbS5lbGVzLCBwYXJhbS5sYXlvdXRwYXJhbSk7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgICByZXN1bHQuZWxlcyA9IGVsZXMucmVtb3ZlKCk7XG4gICAgICAgICAgdW5kb1JlZG9BY3Rpb25GdW5jdGlvbnMucmV0dXJuVG9Qb3NpdGlvbnMocGFyYW0ucG9zaXRpb25zKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICB1bmRvUmVkb0FjdGlvbkZ1bmN0aW9ucy51bmRvRGVsZXRlQW5kUGVyZm9ybUxheW91dCA9IGZ1bmN0aW9uIChwYXJhbSkge1xuICAgICAgdmFyIGVsZXMgPSBwYXJhbS5lbGVzO1xuXG4gICAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgICByZXN1bHQucG9zaXRpb25zID0gdW5kb1JlZG9BY3Rpb25GdW5jdGlvbnMuZ2V0Tm9kZVBvc2l0aW9ucygpO1xuICAgICAgcmVzdWx0LmVsZXMgPSBlbGVtZW50VXRpbGl0aWVzLnJlc3RvcmVFbGVzKGVsZXMpOyBcblxuICAgICAgdW5kb1JlZG9BY3Rpb25GdW5jdGlvbnMucmV0dXJuVG9Qb3NpdGlvbnMocGFyYW0ucG9zaXRpb25zKTtcblxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICAgIC8vIFNlY3Rpb24gRW5kXG4gICAgLy8gZ2VuZXJhbCBhY3Rpb24gZnVuY3Rpb25zXG5cbiAgICAvLyBTZWN0aW9uIFN0YXJ0XG4gICAgLy8gc2JnbiBhY3Rpb24gZnVuY3Rpb25zXG5cbiAgICB1bmRvUmVkb0FjdGlvbkZ1bmN0aW9ucy5jaGFuZ2VTdGF0ZU9ySW5mb0JveCA9IGZ1bmN0aW9uIChwYXJhbSkge1xuICAgICAgdmFyIHJlc3VsdCA9IHtcbiAgICAgIH07XG4gICAgICByZXN1bHQudHlwZSA9IHBhcmFtLnR5cGU7XG4gICAgICByZXN1bHQubm9kZXMgPSBwYXJhbS5ub2RlcztcbiAgICAgIHJlc3VsdC5pbmRleCA9IHBhcmFtLmluZGV4O1xuICAgICAgdmFyIGRhdGEgPSBwYXJhbS5kYXRhO1xuXG4gICAgICB2YXIgdGVtcERhdGEgPSBlbGVtZW50VXRpbGl0aWVzLnNhdmVVbml0cyhwYXJhbS5ub2Rlcyk7XG4gICAgICByZXN1bHQudmFsdWUgPSBlbGVtZW50VXRpbGl0aWVzLmNoYW5nZVN0YXRlT3JJbmZvQm94KHBhcmFtLm5vZGVzLCBwYXJhbS5pbmRleCwgcGFyYW0udmFsdWUsIHBhcmFtLnR5cGUpO1xuICAgICAgLyogdmFyIGxvY2F0aW9ucyA9IGVsZW1lbnRVdGlsaXRpZXMuY2hlY2tGaXQocGFyYW0ubm9kZXMpO1xuICAgICAgaWYgKGxvY2F0aW9ucyAhPT0gdW5kZWZpbmVkICYmIGxvY2F0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGVsZW1lbnRVdGlsaXRpZXMuZml0VW5pdHMocGFyYW0ubm9kZXMsIGxvY2F0aW9ucyk7XG4gICAgICB9ICovXG4gICAgICBpZiAoZGF0YSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGVsZW1lbnRVdGlsaXRpZXMucmVzdG9yZVVuaXRzKHBhcmFtLm5vZGVzLCBkYXRhKTtcbiAgICAgIH1cblxuICAgICAgY3kuZm9yY2VSZW5kZXIoKTtcbiAgICAgIHJlc3VsdC5kYXRhID0gdGVtcERhdGE7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH07XG5cbiAgICB1bmRvUmVkb0FjdGlvbkZ1bmN0aW9ucy5hZGRTdGF0ZU9ySW5mb0JveCA9IGZ1bmN0aW9uIChwYXJhbSkge1xuICAgICAgdmFyIG9iaiA9IHBhcmFtLm9iajtcbiAgICAgIHZhciBub2RlcyA9IHBhcmFtLm5vZGVzO1xuICAgICAgdmFyIGRhdGEgPSBwYXJhbS5kYXRhO1xuXG4gICAgICB2YXIgdGVtcERhdGEgPSBlbGVtZW50VXRpbGl0aWVzLnNhdmVVbml0cyhub2Rlcyk7XG4gICAgICB2YXIgbG9jYXRpb25PYmogPSBlbGVtZW50VXRpbGl0aWVzLmFkZFN0YXRlT3JJbmZvQm94KG5vZGVzLCBvYmopO1xuICAgICAvKiAgdmFyIGxvY2F0aW9ucyA9IGVsZW1lbnRVdGlsaXRpZXMuY2hlY2tGaXQobm9kZXMpO1xuICAgICAgaWYgKGxvY2F0aW9ucyAhPT0gdW5kZWZpbmVkICYmIGxvY2F0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGVsZW1lbnRVdGlsaXRpZXMuZml0VW5pdHMobm9kZXMsIGxvY2F0aW9ucyk7XG4gICAgICB9ICovXG4gICAgICBpZiAoZGF0YSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGVsZW1lbnRVdGlsaXRpZXMucmVzdG9yZVVuaXRzKG5vZGVzLCBkYXRhKTtcbiAgICAgIH1cblxuICAgICAgY3kuZm9yY2VSZW5kZXIoKTtcblxuICAgICAgdmFyIHJlc3VsdCA9IHtcbiAgICAgICAgbm9kZXM6IG5vZGVzLFxuICAgICAgICBsb2NhdGlvbk9iajogbG9jYXRpb25PYmosXG4gICAgICAgIG9iajogb2JqLFxuICAgICAgICBkYXRhOiB0ZW1wRGF0YVxuICAgICAgfTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfTtcblxuICAgIHVuZG9SZWRvQWN0aW9uRnVuY3Rpb25zLnJlbW92ZVN0YXRlT3JJbmZvQm94ID0gZnVuY3Rpb24gKHBhcmFtKSB7XG4gICAgICB2YXIgbG9jYXRpb25PYmogPSBwYXJhbS5sb2NhdGlvbk9iajtcbiAgICAgIHZhciBub2RlcyA9IHBhcmFtLm5vZGVzO1xuICAgICAgdmFyIGRhdGEgPSBwYXJhbS5kYXRhO1xuXG4gICAgICB2YXIgdGVtcERhdGEgPSBlbGVtZW50VXRpbGl0aWVzLnNhdmVVbml0cyhub2Rlcyk7XG4gICAgICB2YXIgb2JqID0gZWxlbWVudFV0aWxpdGllcy5yZW1vdmVTdGF0ZU9ySW5mb0JveChub2RlcywgbG9jYXRpb25PYmopO1xuICAgICAgaWYgKGRhdGEgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBlbGVtZW50VXRpbGl0aWVzLnJlc3RvcmVVbml0cyhub2RlcywgZGF0YSk7XG4gICAgICB9XG5cbiAgICAgIGN5LmZvcmNlUmVuZGVyKCk7XG5cbiAgICAgIHZhciByZXN1bHQgPSB7XG4gICAgICAgIG5vZGVzOiBub2RlcyxcbiAgICAgICAgb2JqOiBvYmosXG4gICAgICAgIGRhdGE6IHRlbXBEYXRhXG4gICAgICB9O1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuXG4gICAgdW5kb1JlZG9BY3Rpb25GdW5jdGlvbnMuZml0VW5pdHMgPSBmdW5jdGlvbiAocGFyYW0pIHtcbiAgICAgIHZhciBub2RlID0gcGFyYW0ubm9kZTtcbiAgICAgIHZhciBsb2NhdGlvbnMgPSBwYXJhbS5sb2NhdGlvbnM7XG4gICAgICB2YXIgb2JqID0gZWxlbWVudFV0aWxpdGllcy5maXRVbml0cyhub2RlLCBsb2NhdGlvbnMpO1xuXG4gICAgICBjeS5mb3JjZVJlbmRlcigpO1xuXG4gICAgICB2YXIgcmVzdWx0ID0ge1xuICAgICAgICBub2RlOiBub2RlLFxuICAgICAgICBvYmo6IG9iaixcbiAgICAgICAgbG9jYXRpb25zOiBsb2NhdGlvbnNcbiAgICAgIH07XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH07XG5cbiAgICB1bmRvUmVkb0FjdGlvbkZ1bmN0aW9ucy5yZXN0b3JlVW5pdHMgPSBmdW5jdGlvbiAocGFyYW0pIHtcbiAgICAgIHZhciBub2RlID0gcGFyYW0ubm9kZTtcbiAgICAgIHZhciBsb2NhdGlvbnMgPSBwYXJhbS5sb2NhdGlvbnM7XG4gICAgICB2YXIgb2JqID0gcGFyYW0ub2JqO1xuICAgICAgdmFyIGluZGV4ID0gMDtcbiAgICAgIG5vZGUuZGF0YSgnc3RhdGVzYW5kaW5mb3MnKS5mb3JFYWNoKCBmdW5jdGlvbiAoZWxlKSB7XG4gICAgICAgIHZhciBib3ggPSBvYmpbaW5kZXgrK107XG4gICAgICAgIGVsZS5iYm94LnggPSBib3gueDtcbiAgICAgICAgZWxlLmJib3gueSA9IGJveC55O1xuICAgICAgICB2YXIgb2xkU2lkZSA9IGVsZS5hbmNob3JTaWRlO1xuICAgICAgICBlbGUuYW5jaG9yU2lkZSA9IGJveC5hbmNob3JTaWRlO1xuICAgICAgICBlbGVtZW50VXRpbGl0aWVzLm1vZGlmeVVuaXRzKG5vZGUsIGVsZSwgb2xkU2lkZSk7XG4gICAgICB9KTtcblxuICAgICAgY3kuZm9yY2VSZW5kZXIoKTtcblxuICAgICAgdmFyIHJlc3VsdCA9IHtcbiAgICAgICAgbm9kZTogbm9kZSxcbiAgICAgICAgbG9jYXRpb25zOiBsb2NhdGlvbnNcbiAgICAgIH07XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH07XG5cbiAgICB1bmRvUmVkb0FjdGlvbkZ1bmN0aW9ucy5zZXRNdWx0aW1lclN0YXR1cyA9IGZ1bmN0aW9uIChwYXJhbSkge1xuICAgICAgdmFyIGZpcnN0VGltZSA9IHBhcmFtLmZpcnN0VGltZTtcbiAgICAgIHZhciBub2RlcyA9IHBhcmFtLm5vZGVzO1xuICAgICAgdmFyIHN0YXR1cyA9IHBhcmFtLnN0YXR1cztcbiAgICAgIHZhciByZXN1bHRTdGF0dXMgPSB7fTtcblxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2Rlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgbm9kZSA9IG5vZGVzW2ldO1xuICAgICAgICB2YXIgaXNNdWx0aW1lciA9IG5vZGUuZGF0YSgnY2xhc3MnKS5lbmRzV2l0aCgnIG11bHRpbWVyJyk7XG5cbiAgICAgICAgcmVzdWx0U3RhdHVzW25vZGUuaWQoKV0gPSBpc011bHRpbWVyO1xuICAgICAgfVxuXG4gICAgICAvLyBJZiB0aGlzIGlzIHRoZSBmaXJzdCB0aW1lIGNoYW5nZSB0aGUgc3RhdHVzIG9mIGFsbCBub2RlcyBhdCBvbmNlLlxuICAgICAgLy8gSWYgbm90IGNoYW5nZSBzdGF0dXMgb2YgZWFjaCBzZXBlcmF0ZWx5IHRvIHRoZSB2YWx1ZXMgbWFwcGVkIHRvIHRoZWlyIGlkLlxuICAgICAgaWYgKGZpcnN0VGltZSkge1xuICAgICAgICBlbGVtZW50VXRpbGl0aWVzLnNldE11bHRpbWVyU3RhdHVzKG5vZGVzLCBzdGF0dXMpO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICB2YXIgbm9kZSA9IG5vZGVzW2ldO1xuICAgICAgICAgIGVsZW1lbnRVdGlsaXRpZXMuc2V0TXVsdGltZXJTdGF0dXMobm9kZSwgc3RhdHVzW25vZGUuaWQoKV0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAvLyAgaWYgKCFmaXJzdFRpbWUgJiYgXy5pc0VxdWFsKG5vZGVzLCBjeS5ub2RlcygnOnNlbGVjdGVkJykpKSB7XG4gICAgLy8gICAgJCgnI2luc3BlY3Rvci1pcy1tdWx0aW1lcicpLmF0dHIoXCJjaGVja2VkXCIsICEkKCcjaW5zcGVjdG9yLWlzLW11bHRpbWVyJykuYXR0cihcImNoZWNrZWRcIikpO1xuICAgIC8vICB9XG5cbiAgICAgIHZhciByZXN1bHQgPSB7XG4gICAgICAgIHN0YXR1czogcmVzdWx0U3RhdHVzLFxuICAgICAgICBub2Rlczogbm9kZXNcbiAgICAgIH07XG5cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfTtcblxuICAgIHVuZG9SZWRvQWN0aW9uRnVuY3Rpb25zLnNldENsb25lTWFya2VyU3RhdHVzID0gZnVuY3Rpb24gKHBhcmFtKSB7XG4gICAgICB2YXIgbm9kZXMgPSBwYXJhbS5ub2RlcztcbiAgICAgIHZhciBzdGF0dXMgPSBwYXJhbS5zdGF0dXM7XG4gICAgICB2YXIgZmlyc3RUaW1lID0gcGFyYW0uZmlyc3RUaW1lO1xuICAgICAgdmFyIHJlc3VsdFN0YXR1cyA9IHt9O1xuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBub2RlID0gbm9kZXNbaV07XG4gICAgICAgIHJlc3VsdFN0YXR1c1tub2RlLmlkKCldID0gbm9kZS5kYXRhKCdjbG9uZW1hcmtlcicpO1xuICAgICAgICB2YXIgY3VycmVudFN0YXR1cyA9IGZpcnN0VGltZSA/IHN0YXR1cyA6IHN0YXR1c1tub2RlLmlkKCldO1xuICAgICAgICBlbGVtZW50VXRpbGl0aWVzLnNldENsb25lTWFya2VyU3RhdHVzKG5vZGUsIGN1cnJlbnRTdGF0dXMpO1xuICAgICAgfVxuXG4gICAgLy8gIGlmICghZmlyc3RUaW1lICYmIF8uaXNFcXVhbChub2RlcywgY3kubm9kZXMoJzpzZWxlY3RlZCcpKSkge1xuICAgIC8vICAgICQoJyNpbnNwZWN0b3ItaXMtY2xvbmUtbWFya2VyJykuYXR0cihcImNoZWNrZWRcIiwgISQoJyNpbnNwZWN0b3ItaXMtY2xvbmUtbWFya2VyJykuYXR0cihcImNoZWNrZWRcIikpO1xuICAgIC8vICB9XG5cbiAgICAgIHZhciByZXN1bHQgPSB7XG4gICAgICAgIHN0YXR1czogcmVzdWx0U3RhdHVzLFxuICAgICAgICBub2Rlczogbm9kZXNcbiAgICAgIH07XG5cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfTtcblxuICAgIC8vIHBhcmFtOiB7Y2xhc3M6IHNiZ25jbGFzcywgbmFtZTogcHJvcGVydHlOYW1lLCB2YWx1ZTogdmFsdWV9XG4gICAgdW5kb1JlZG9BY3Rpb25GdW5jdGlvbnMuc2V0RGVmYXVsdFByb3BlcnR5ID0gZnVuY3Rpb24gKHBhcmFtKSB7XG4gICAgICB2YXIgc2JnbmNsYXNzID0gcGFyYW0uY2xhc3M7XG4gICAgICB2YXIgbmFtZSA9IHBhcmFtLm5hbWU7XG4gICAgICB2YXIgdmFsdWUgPSBwYXJhbS52YWx1ZTtcbiAgICAgIHZhciBjbGFzc0RlZmF1bHRzID0gZWxlbWVudFV0aWxpdGllcy5nZXREZWZhdWx0UHJvcGVydGllcyhzYmduY2xhc3MpO1xuICAgICAgdmFyIHJlc3VsdCA9IHtcbiAgICAgICAgY2xhc3M6IHNiZ25jbGFzcyxcbiAgICAgICAgbmFtZTogbmFtZSxcbiAgICAgICAgdmFsdWU6IGNsYXNzRGVmYXVsdHMuaGFzT3duUHJvcGVydHkobmFtZSkgPyBjbGFzc0RlZmF1bHRzW25hbWVdIDogdW5kZWZpbmVkXG4gICAgICB9O1xuXG4gICAgICB2YXIgcHJvcE1hcCA9IHt9O1xuICAgICAgcHJvcE1hcFsgbmFtZSBdID0gdmFsdWU7XG5cbiAgICAgIGVsZW1lbnRVdGlsaXRpZXMuc2V0RGVmYXVsdFByb3BlcnRpZXMoIHNiZ25jbGFzcywgcHJvcE1hcCApO1xuXG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH07XG5cbiAgICB1bmRvUmVkb0FjdGlvbkZ1bmN0aW9ucy5hZGRCYWNrZ3JvdW5kSW1hZ2UgPSBmdW5jdGlvbiAocGFyYW0pIHtcbiAgICAgIHZhciBiZ09iaiA9IHBhcmFtLmJnT2JqO1xuICAgICAgdmFyIG5vZGVzID0gcGFyYW0ubm9kZXM7XG4gICAgICB2YXIgdXBkYXRlSW5mbyA9IHBhcmFtLnVwZGF0ZUluZm87XG4gICAgICB2YXIgcHJvbXB0SW52YWxpZEltYWdlID0gcGFyYW0ucHJvbXB0SW52YWxpZEltYWdlO1xuICAgICAgdmFyIHZhbGlkYXRlVVJMID0gcGFyYW0udmFsaWRhdGVVUkw7XG5cbiAgICAgIGVsZW1lbnRVdGlsaXRpZXMuYWRkQmFja2dyb3VuZEltYWdlKG5vZGVzLCBiZ09iaiwgdXBkYXRlSW5mbywgcHJvbXB0SW52YWxpZEltYWdlLCB2YWxpZGF0ZVVSTCk7XG5cbiAgICAgIGN5LmZvcmNlUmVuZGVyKCk7XG5cbiAgICAgIHZhciByZXN1bHQgPSB7XG4gICAgICAgIG5vZGVzOiBub2RlcyxcbiAgICAgICAgYmdPYmo6IGJnT2JqLFxuICAgICAgICB1cGRhdGVJbmZvOiB1cGRhdGVJbmZvLFxuICAgICAgICBwcm9tcHRJbnZhbGlkSW1hZ2U6IHByb21wdEludmFsaWRJbWFnZSxcbiAgICAgICAgdmFsaWRhdGVVUkw6IHZhbGlkYXRlVVJMXG4gICAgICB9O1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuXG4gICAgdW5kb1JlZG9BY3Rpb25GdW5jdGlvbnMucmVtb3ZlQmFja2dyb3VuZEltYWdlID0gZnVuY3Rpb24gKHBhcmFtKSB7XG4gICAgICB2YXIgYmdPYmogPSBwYXJhbS5iZ09iajtcbiAgICAgIHZhciBub2RlcyA9IHBhcmFtLm5vZGVzO1xuXG4gICAgICBlbGVtZW50VXRpbGl0aWVzLnJlbW92ZUJhY2tncm91bmRJbWFnZShub2RlcywgYmdPYmopO1xuXG4gICAgICBjeS5mb3JjZVJlbmRlcigpO1xuXG4gICAgICB2YXIgcmVzdWx0ID0ge1xuICAgICAgICBub2Rlczogbm9kZXMsXG4gICAgICAgIGJnT2JqOiBiZ09ialxuICAgICAgfTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfTtcblxuICAgIHVuZG9SZWRvQWN0aW9uRnVuY3Rpb25zLnVwZGF0ZUJhY2tncm91bmRJbWFnZSA9IGZ1bmN0aW9uIChwYXJhbSkge1xuICAgICAgdmFyIGJnT2JqID0gcGFyYW0uYmdPYmo7XG4gICAgICB2YXIgbm9kZXMgPSBwYXJhbS5ub2RlcztcblxuICAgICAgdmFyIG9sZEJnT2JqID0gZWxlbWVudFV0aWxpdGllcy51cGRhdGVCYWNrZ3JvdW5kSW1hZ2Uobm9kZXMsIGJnT2JqKTtcblxuICAgICAgY3kuZm9yY2VSZW5kZXIoKTtcblxuICAgICAgdmFyIHJlc3VsdCA9IHtcbiAgICAgICAgbm9kZXM6IG5vZGVzLFxuICAgICAgICBiZ09iajogb2xkQmdPYmpcbiAgICAgIH07XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH07XG5cbiAgICB1bmRvUmVkb0FjdGlvbkZ1bmN0aW9ucy5jaGFuZ2VCYWNrZ3JvdW5kSW1hZ2UgPSBmdW5jdGlvbiAocGFyYW0pIHtcbiAgICAgIHZhciBvbGRJbWcgPSBwYXJhbS5vbGRJbWc7XG4gICAgICB2YXIgbmV3SW1nID0gcGFyYW0ubmV3SW1nO1xuICAgICAgdmFyIG5vZGVzID0gcGFyYW0ubm9kZXM7XG4gICAgICB2YXIgZmlyc3RUaW1lID0gcGFyYW0uZmlyc3RUaW1lO1xuICAgICAgdmFyIHVwZGF0ZUluZm8gPSBwYXJhbS51cGRhdGVJbmZvO1xuICAgICAgdmFyIHByb21wdEludmFsaWRJbWFnZSA9IHBhcmFtLnByb21wdEludmFsaWRJbWFnZTtcbiAgICAgIHZhciB2YWxpZGF0ZVVSTD0gcGFyYW0udmFsaWRhdGVVUkw7XG5cbiAgICAgIHZhciByZXN1bHQgPSBlbGVtZW50VXRpbGl0aWVzLmNoYW5nZUJhY2tncm91bmRJbWFnZShub2Rlcywgb2xkSW1nLCBuZXdJbWcsIGZpcnN0VGltZSwgdXBkYXRlSW5mbywgcHJvbXB0SW52YWxpZEltYWdlLCB2YWxpZGF0ZVVSTCk7XG5cbiAgICAgIGN5LmZvcmNlUmVuZGVyKCk7XG5cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfTtcblxuICAgIC8vIFNlY3Rpb24gRW5kXG4gICAgLy8gc2JnbiBhY3Rpb24gZnVuY3Rpb25zXG4gICAgdW5kb1JlZG9BY3Rpb25GdW5jdGlvbnMuY29udmVydEludG9SZXZlcnNpYmxlUmVhY3Rpb24gPSBmdW5jdGlvbiAocGFyYW0pIHtcbiAgICAgIGxldCBjb2xsZWN0aW9uID0gY3kuY29sbGVjdGlvbigpO1xuICAgICAgbGV0IG1hcFR5cGUgPSBlbGVtZW50VXRpbGl0aWVzLmdldE1hcFR5cGUoKTtcbiAgICAgIGVsZW1lbnRVdGlsaXRpZXMuc2V0TWFwVHlwZShwYXJhbS5tYXBUeXBlKTtcbiAgICAgICQoJyNtYXAtdHlwZScpLnZhbChwYXJhbS5tYXBUeXBlKTtcblxuICAgICAgcGFyYW0uY29sbGVjdGlvbi5mb3JFYWNoKGZ1bmN0aW9uKGVkZ2UpIHtcbiAgICAgICAgdmFyIHNvdXJjZU5vZGUgPSBlZGdlLl9wcml2YXRlLmRhdGEuc291cmNlO1xuICAgICAgICB2YXIgdGFyZ2V0Tm9kZSA9IGVkZ2UuX3ByaXZhdGUuZGF0YS50YXJnZXQ7XG5cbiAgICAgICAgZWRnZS5tb3ZlKHtzb3VyY2U6IHRhcmdldE5vZGUsIHRhcmdldDogc291cmNlTm9kZX0pO1xuXG4gICAgICAgIGxldCBjb252ZXJ0ZWRFZGdlID0gY3kuZ2V0RWxlbWVudEJ5SWQoZWRnZS5pZCgpKTtcblxuICAgICAgICBpZihjb252ZXJ0ZWRFZGdlLmRhdGEoXCJjeWVkZ2ViZW5kZWRpdGluZ0Rpc3RhbmNlc1wiKSl7XG4gICAgICAgICAgbGV0IGRpc3RhbmNlID0gY29udmVydGVkRWRnZS5kYXRhKFwiY3llZGdlYmVuZGVkaXRpbmdEaXN0YW5jZXNcIik7XG4gICAgICAgICAgZGlzdGFuY2UgPSBkaXN0YW5jZS5tYXAoZnVuY3Rpb24oZWxlbWVudCkge1xuICAgICAgICAgICAgcmV0dXJuIC0xKmVsZW1lbnQ7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgY29udmVydGVkRWRnZS5kYXRhKFwiY3llZGdlYmVuZGVkaXRpbmdEaXN0YW5jZXNcIiwgZGlzdGFuY2UucmV2ZXJzZSgpKTtcblxuICAgICAgICAgIGxldCB3ZWlnaHQgPSBjb252ZXJ0ZWRFZGdlLmRhdGEoXCJjeWVkZ2ViZW5kZWRpdGluZ1dlaWdodHNcIik7XG4gICAgICAgICAgd2VpZ2h0ID0gd2VpZ2h0Lm1hcChmdW5jdGlvbihlbGVtZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gMS1lbGVtZW50O1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIGNvbnZlcnRlZEVkZ2UuZGF0YShcImN5ZWRnZWJlbmRlZGl0aW5nV2VpZ2h0c1wiLCB3ZWlnaHQucmV2ZXJzZSgpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmKGNvbnZlcnRlZEVkZ2UuZGF0YShcImN5ZWRnZWNvbnRyb2xlZGl0aW5nRGlzdGFuY2VzXCIpKXtcbiAgICAgICAgICBsZXQgZGlzdGFuY2UgPSBjb252ZXJ0ZWRFZGdlLmRhdGEoXCJjeWVkZ2Vjb250cm9sZWRpdGluZ0Rpc3RhbmNlc1wiKTtcbiAgICAgICAgICBkaXN0YW5jZSA9IGRpc3RhbmNlLm1hcChmdW5jdGlvbihlbGVtZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gLTEqZWxlbWVudDtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBjb252ZXJ0ZWRFZGdlLmRhdGEoXCJjeWVkZ2Vjb250cm9sZWRpdGluZ0Rpc3RhbmNlc1wiLCBkaXN0YW5jZS5yZXZlcnNlKCkpO1xuXG4gICAgICAgICAgbGV0IHdlaWdodCA9IGNvbnZlcnRlZEVkZ2UuZGF0YShcImN5ZWRnZWNvbnRyb2xlZGl0aW5nV2VpZ3Roc1wiKTtcbiAgICAgICAgICB3ZWlnaHQgPSB3ZWlnaHQubWFwKGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgICAgICAgICAgIHJldHVybiAxLWVsZW1lbnQ7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgY29udmVydGVkRWRnZS5kYXRhKFwiY3llZGdlY29udHJvbGVkaXRpbmdXZWlndGhzXCIsIHdlaWdodC5yZXZlcnNlKCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvbnZlcnRlZEVkZ2UuX3ByaXZhdGUuZGF0YS5jbGFzcyA9PT0gXCJjb25zdW1wdGlvblwiKSB7XG4gICAgICAgICAgY29udmVydGVkRWRnZS5fcHJpdmF0ZS5kYXRhLmNsYXNzID0gXCJwcm9kdWN0aW9uXCI7XG4gICAgICAgICAgY29udmVydGVkRWRnZS5fcHJpdmF0ZS5kYXRhLnBvcnRzb3VyY2UgPSB0YXJnZXROb2RlICsgXCIuMVwiO1xuICAgICAgICAgIGNvbnZlcnRlZEVkZ2UuX3ByaXZhdGUuZGF0YS5wb3J0dGFyZ2V0ID0gc291cmNlTm9kZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChjb252ZXJ0ZWRFZGdlLl9wcml2YXRlLmRhdGEuY2xhc3MgPT09IFwicHJvZHVjdGlvblwiKSB7XG4gICAgICAgICAgY29udmVydGVkRWRnZS5fcHJpdmF0ZS5kYXRhLmNsYXNzID0gXCJjb25zdW1wdGlvblwiO1xuICAgICAgICAgIGNvbnZlcnRlZEVkZ2UuX3ByaXZhdGUuZGF0YS5wb3J0c291cmNlID0gdGFyZ2V0Tm9kZTtcbiAgICAgICAgICBjb252ZXJ0ZWRFZGdlLl9wcml2YXRlLmRhdGEucG9ydHRhcmdldCA9IHNvdXJjZU5vZGUgKyBcIi4xXCI7XG4gICAgICAgIH1cblxuICAgICAgICBjb2xsZWN0aW9uID0gY29sbGVjdGlvbi5hZGQoY29udmVydGVkRWRnZSk7XG4gICAgICAgIGN5LnN0eWxlKCkudXBkYXRlKCk7XG4gICAgICB9KTtcblxuICAgICAgdmFyIHJlc3VsdCA9IHtcbiAgICAgICAgY29sbGVjdGlvbjogY29sbGVjdGlvbixcbiAgICAgICAgbWFwVHlwZTogbWFwVHlwZSxcbiAgICAgICAgcHJvY2Vzc0lkOiBwYXJhbS5wcm9jZXNzSWRcbiAgICAgIH07XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHVuZG9SZWRvQWN0aW9uRnVuY3Rpb25zLm1vdmVFZGdlID0gZnVuY3Rpb24gKHBhcmFtKSB7XG4gICAgICB2YXIgcmVzdWx0ID0ge1xuICAgICAgfTtcbiAgICAgIHZhciBlZGdlID0gcGFyYW0uZWRnZTtcbiAgICAgIHJlc3VsdC5uYW1lID0gcGFyYW0ubmFtZTsgICAgICBcbiAgICAgXG5cbiAgICAgIHJlc3VsdC5zb3VyY2UgPSBlZGdlLnNvdXJjZSgpLmlkKCk7XG4gICAgICByZXN1bHQudGFyZ2V0ID0gZWRnZS50YXJnZXQoKS5pZCgpOyAgICAgIFxuICAgICAgcmVzdWx0LnBvcnRzb3VyY2UgID1lZGdlLmRhdGEoXCJwb3J0c291cmNlXCIpO1xuICAgICAgcmVzdWx0LnBvcnR0YXJnZXQgPSBlZGdlLmRhdGEoXCJwb3J0dGFyZ2V0XCIpO1xuICAgICAgZWxlbWVudFV0aWxpdGllcy5jaGFuZ2VEYXRhKGVkZ2UsICdzb3VyY2UnLCBwYXJhbS5zb3VyY2UpO1xuICAgICAgZWxlbWVudFV0aWxpdGllcy5jaGFuZ2VEYXRhKGVkZ2UsICd0YXJnZXQnLCBwYXJhbS50YXJnZXQpO1xuICAgICAgZWxlbWVudFV0aWxpdGllcy5jaGFuZ2VEYXRhKGVkZ2UsICdwb3J0c291cmNlJywgcGFyYW0ucG9ydHNvdXJjZSk7XG4gICAgICBlbGVtZW50VXRpbGl0aWVzLmNoYW5nZURhdGEoZWRnZSwgJ3BvcnR0YXJnZXQnLCBwYXJhbS5wb3J0dGFyZ2V0KTsgXG4gICAgICBlZGdlID0gZWRnZS5tb3ZlKHtcbiAgICAgICAgdGFyZ2V0OiBwYXJhbS50YXJnZXQsXG4gICAgICAgIHNvdXJjZSA6IHBhcmFtLnNvdXJjZVxuICAgIFxuICAgICB9KTtcblxuICAgICByZXN1bHQuZWRnZSA9IGVkZ2U7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH07XG5cbiAgICB1bmRvUmVkb0FjdGlvbkZ1bmN0aW9ucy5maXhFcnJvciA9IGZ1bmN0aW9uKHBhcmFtKXtcbiAgICAgIFxuICAgICAgdmFyIGVycm9yQ29kZSA9IHBhcmFtLmVycm9yQ29kZTtcbiAgICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICAgIHJlc3VsdC5lcnJvckNvZGUgPSBlcnJvckNvZGU7XG4gICAgICBpZihlcnJvckNvZGUgPT0gXCJwZDEwMTAxXCIgfHwgZXJyb3JDb2RlID09ICdwZDEwMTAyJyl7XG5cbiAgICAgICAgcmVzdWx0LmVkZ2UgPSBlbGVtZW50VXRpbGl0aWVzLnJldmVyc2VFZGdlKHBhcmFtLmVkZ2UpO1xuXG4gICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfWVsc2UgaWYoZXJyb3JDb2RlID09IFwicGQxMDEwM1wiIHx8IGVycm9yQ29kZSA9PSAncGQxMDEwNycpe1xuXG4gICAgICAgXG4gICAgICAgIFxuICAgICAgICBwYXJhbS5uZXdOb2Rlcy5mb3JFYWNoKGZ1bmN0aW9uKG5ld05vZGUpe1xuICAgICAgICAgZWxlbWVudFV0aWxpdGllcy5hZGROb2RlKG5ld05vZGUueCwgbmV3Tm9kZS55LCBuZXdOb2RlLmNsYXNzLCBuZXdOb2RlLmlkLCB1bmRlZmluZWQpO1xuXG4gICAgICAgICAgXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHBhcmFtLm5ld0VkZ2VzLmZvckVhY2goZnVuY3Rpb24obmV3RWRnZSl7ICAgICAgICAgIFxuICAgICAgICAgIGVsZW1lbnRVdGlsaXRpZXMuYWRkRWRnZShuZXdFZGdlLnNvdXJjZSxuZXdFZGdlLnRhcmdldCxuZXdFZGdlLmNsYXNzKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcGFyYW0ub2xkRWRnZXMuZm9yRWFjaChmdW5jdGlvbihvbGRFZGdlKXtcbiAgICAgICAgICBjeS5lbGVtZW50cygpLnVuc2VsZWN0KCk7XG4gICAgICAgICAgLy9yZXR1cm4gXG4gICAgICAgICAgb2xkRWRnZS5yZW1vdmUoKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcGFyYW0ubm9kZS5yZW1vdmUoKTtcblxuICAgICAgICByZXR1cm4gcGFyYW07XG5cbiAgICAgIH1lbHNlIGlmKGVycm9yQ29kZSA9PSBcInBkMTAxMDVcIiB8fCBlcnJvckNvZGUgPT0gJ3BkMTAxMDYnKXtcbiAgIFxuICAgICAgICByZXN1bHQuZWRnZSA9IGVsZW1lbnRVdGlsaXRpZXMucmV2ZXJzZUVkZ2UocGFyYW0uZWRnZSk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9ZWxzZSBpZihlcnJvckNvZGUgPT0gXCJwZDEwMTQwXCIpe1xuICAgICAgICBwYXJhbS5ub2RlLnJlbW92ZSgpO1xuICAgICAgICByZXR1cm4gcGFyYW07XG4gICAgICB9ZWxzZSBpZihlcnJvckNvZGUgPT0gXCJwZDEwMTA0XCIpIHtcbiAgICAgICAgXG4gICAgICAgIHBhcmFtLmVkZ2VzLmZvckVhY2goZnVuY3Rpb24oZWRnZSl7XG4gICAgICAgICAgZWRnZS5yZW1vdmUoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHBhcmFtLm5vZGVzLmZvckVhY2goZnVuY3Rpb24obm9kZSl7XG4gICAgICAgICAgbm9kZS5yZW1vdmUoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBwYXJhbTtcbiAgICAgIH1lbHNlIGlmKGVycm9yQ29kZSA9PSBcInBkMTAxMDhcIil7XG4gICAgICAgIHBhcmFtLmVkZ2VzLmZvckVhY2goZnVuY3Rpb24oZWRnZSl7XG4gICAgICAgICAgZWRnZS5yZW1vdmUoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHBhcmFtLm5vZGVzLmZvckVhY2goZnVuY3Rpb24obm9kZSl7XG4gICAgICAgICAgbm9kZS5yZW1vdmUoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBwYXJhbTtcbiAgICAgIH1lbHNlIGlmKGVycm9yQ29kZSA9PSBcInBkMTAxMTFcIil7XG4gICAgICAgIHBhcmFtLmVkZ2VzLmZvckVhY2goZnVuY3Rpb24oZWRnZSl7XG4gICAgICAgICAgZWRnZS5yZW1vdmUoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBwYXJhbTtcbiAgICAgIH1lbHNlIGlmKGVycm9yQ29kZSA9PSBcInBkMTAxMjZcIil7XG4gICAgICAgIHBhcmFtLmVkZ2VzLmZvckVhY2goZnVuY3Rpb24oZWRnZSl7XG4gICAgICAgICAgZWRnZS5yZW1vdmUoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHBhcmFtLm5vZGVzLmZvckVhY2goZnVuY3Rpb24obm9kZSl7XG4gICAgICAgICAgbm9kZS5yZW1vdmUoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBwYXJhbTtcbiAgICAgIH1lbHNlIGlmKGVycm9yQ29kZSA9PSBcInBkMTAxMDlcIiB8fCBlcnJvckNvZGUgPT0gXCJwZDEwMTI0XCIpIHtcbiAgICAgICAgXG4gICAgICAgIHJlc3VsdC5uZXdTb3VyY2UgPSBwYXJhbS5lZGdlLmRhdGEoKS5zb3VyY2U7XG4gICAgICAgIHJlc3VsdC5uZXdUYXJnZXQgPSBwYXJhbS5lZGdlLmRhdGEoKS50YXJnZXQ7XG4gICAgICAgIHJlc3VsdC5wb3J0c291cmNlID0gcGFyYW0uZWRnZS5kYXRhKCkucG9ydHNvdXJjZTtcbiAgICAgICAgdmFyIGNsb25lZEVkZ2UgPSBwYXJhbS5lZGdlLmNsb25lKCk7XG4gICAgICAgXG4gICAgICAgIHZhciBlZGdlUGFyYW1zID0ge2NsYXNzIDogY2xvbmVkRWRnZS5kYXRhKCkuY2xhc3MsIGxhbmd1YWdlIDpjbG9uZWRFZGdlLmRhdGEoKS5sYW5ndWFnZX07XG4gICAgICAgIGNsb25lZEVkZ2UuZGF0YSgpLnNvdXJjZSA9IHBhcmFtLm5ld1NvdXJjZTtcbiAgICAgICAgY2xvbmVkRWRnZS5kYXRhKCkudGFyZ2V0ID0gcGFyYW0ubmV3VGFyZ2V0O1xuICAgICAgICBjeS5yZW1vdmUocGFyYW0uZWRnZSk7XG4gICAgICAgIHJlc3VsdC5lZGdlID0gZWxlbWVudFV0aWxpdGllcy5hZGRFZGdlKHBhcmFtLm5ld1NvdXJjZSxwYXJhbS5uZXdUYXJnZXQsZWRnZVBhcmFtcywgY2xvbmVkRWRnZS5kYXRhKCkuaWQpOyAgICAgIFxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuXG4gICAgICB9ZWxzZSBpZihlcnJvckNvZGUgPT0gXCJwZDEwMTEyXCIpIHsgICAgXG4gICAgICAgIFxuICAgICAgICBwYXJhbS5jYWxsYmFjayA9IGVsZW1lbnRVdGlsaXRpZXMubWFpbnRhaW5Qb2ludGVyOyAgXG4gICAgICAgIC8vIElmIHRoaXMgaXMgZmlyc3QgdGltZSB3ZSBzaG91bGQgbW92ZSB0aGUgbm9kZSB0byBpdHMgbmV3IHBhcmVudCBhbmQgcmVsb2NhdGUgaXQgYnkgZ2l2ZW4gcG9zRGlmZiBwYXJhbXNcbiAgICAgICAgLy8gZWxzZSB3ZSBzaG91bGQgcmVtb3ZlIHRoZSBtb3ZlZCBlbGVzIGFuZCByZXN0b3JlIHRoZSBlbGVzIHRvIHJlc3RvcmVcbiAgICAgICAgaWYgKHBhcmFtLmZpcnN0VGltZSkge1xuICAgICAgICAgIHZhciBuZXdQYXJlbnRJZCA9IHBhcmFtLnBhcmVudERhdGEgPT0gdW5kZWZpbmVkID8gbnVsbCA6IHBhcmFtLnBhcmVudERhdGE7XG4gICAgICAgICAgLy8gVGhlc2UgZWxlcyBpbmNsdWRlcyB0aGUgbm9kZXMgYW5kIHRoZWlyIGNvbm5lY3RlZCBlZGdlcyBhbmQgd2lsbCBiZSByZW1vdmVkIGluIG5vZGVzLm1vdmUoKS5cbiAgICAgICAgICAvLyBUaGV5IHNob3VsZCBiZSByZXN0b3JlZCBpbiB1bmRvXG4gICAgICAgICAgdmFyIHdpdGhEZXNjZW5kYW50ID0gcGFyYW0ubm9kZXMudW5pb24ocGFyYW0ubm9kZXMuZGVzY2VuZGFudHMoKSk7XG4gICAgICAgICAgcmVzdWx0LmVsZXNUb1Jlc3RvcmUgPSB3aXRoRGVzY2VuZGFudC51bmlvbih3aXRoRGVzY2VuZGFudC5jb25uZWN0ZWRFZGdlcygpKTtcbiAgICAgICAgICAvLyBUaGVzZSBhcmUgdGhlIGVsZXMgY3JlYXRlZCBieSBub2Rlcy5tb3ZlKCksIHRoZXkgc2hvdWxkIGJlIHJlbW92ZWQgaW4gdW5kby5cbiAgICAgICAgICByZXN1bHQubW92ZWRFbGVzID0gcGFyYW0ubm9kZXMubW92ZSh7XCJwYXJlbnRcIjogbmV3UGFyZW50SWR9KTtcblxuICAgICAgICAgIHZhciBwb3NEaWZmID0ge1xuICAgICAgICAgICAgeDogcGFyYW0ucG9zRGlmZlgsXG4gICAgICAgICAgICB5OiBwYXJhbS5wb3NEaWZmWVxuICAgICAgICAgIH07XG5cbiAgICAgICAgICBlbGVtZW50VXRpbGl0aWVzLm1vdmVOb2Rlcyhwb3NEaWZmLCByZXN1bHQubW92ZWRFbGVzKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICByZXN1bHQuZWxlc1RvUmVzdG9yZSA9IHBhcmFtLm1vdmVkRWxlcy5yZW1vdmUoKTtcbiAgICAgICAgICByZXN1bHQubW92ZWRFbGVzID0gcGFyYW0uZWxlc1RvUmVzdG9yZS5yZXN0b3JlKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocGFyYW0uY2FsbGJhY2spIHtcbiAgICAgICAgICByZXN1bHQuY2FsbGJhY2sgPSBwYXJhbS5jYWxsYmFjazsgLy8ga2VlcCB0aGUgcHJvdmlkZWQgY2FsbGJhY2sgc28gaXQgY2FuIGJlIHJldXNlZCBhZnRlciB1bmRvL3JlZG9cbiAgICAgICAgICBwYXJhbS5jYWxsYmFjayhyZXN1bHQubW92ZWRFbGVzKTsgLy8gYXBwbHkgdGhlIGNhbGxiYWNrIG9uIG5ld2x5IGNyZWF0ZWQgZWxlbWVudHNcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICBcbiAgICAgIH1lbHNlIGlmKGVycm9yQ29kZSA9PSBcInBkMTAxMjVcIikge1xuXG4gICAgICAgcmVzdWx0LmVkZ2UgPSBwYXJhbS5lZGdlLnJlbW92ZSgpOyAgICAgICBcbiAgICAgICByZXN1bHQubmV3RWRnZSA9e307XG4gICAgICAgdmFyIGVkZ2VjbGFzcyA9IHBhcmFtLm5ld0VkZ2UuZWRnZVBhcmFtcy5jbGFzcyA/IHBhcmFtLm5ld0VkZ2UuZWRnZVBhcmFtcy5jbGFzcyA6IHBhcmFtLm5ld0VkZ2UuZWRnZVBhcmFtcztcbiAgICAgICB2YXIgdmFsaWRhdGlvbiA9IGVsZW1lbnRVdGlsaXRpZXMudmFsaWRhdGVBcnJvd0VuZHMoZWRnZWNsYXNzLCBjeS5nZXRFbGVtZW50QnlJZChwYXJhbS5uZXdFZGdlLnNvdXJjZSksIGN5LmdldEVsZW1lbnRCeUlkKHBhcmFtLm5ld0VkZ2UudGFyZ2V0KSk7XG5cbiAgICAgICBpZiAodmFsaWRhdGlvbiA9PT0gJ3JldmVyc2UnKSB7XG4gICAgICAgIHZhciB0ZW1wID0gcGFyYW0ubmV3RWRnZS5zb3VyY2U7XG4gICAgICAgIHBhcmFtLm5ld0VkZ2Uuc291cmNlID0gcGFyYW0ubmV3RWRnZS50YXJnZXQ7XG4gICAgICAgIHBhcmFtLm5ld0VkZ2UudGFyZ2V0ID0gdGVtcDtcbiAgICAgIH1cbiAgICAgICByZXN1bHQubmV3RWRnZS5pZCA9ZWxlbWVudFV0aWxpdGllcy5hZGRFZGdlKHBhcmFtLm5ld0VkZ2Uuc291cmNlLHBhcmFtLm5ld0VkZ2UudGFyZ2V0LHBhcmFtLm5ld0VkZ2UuZWRnZVBhcmFtcykuaWQoKTtcbiAgICAgICByZXN1bHQubmV3RWRnZS5zb3VyY2UgPSBwYXJhbS5uZXdFZGdlLnNvdXJjZTtcbiAgICAgICByZXN1bHQubmV3RWRnZS50YXJnZXQgPSBwYXJhbS5uZXdFZGdlLnRhcmdldDtcbiAgICAgICByZXN1bHQubmV3RWRnZS5lZGdlUGFyYW1zID0gcGFyYW0ubmV3RWRnZS5lZGdlUGFyYW1zO1xuICAgICAgIFxuICAgICAgIHJldHVybiByZXN1bHQ7XG5cbiAgICAgICAgXG4gICAgICB9ZWxzZSBpZihlcnJvckNvZGUgPT0gXCJwZDEwMTQyXCIpIHtcbiAgICAgICAgcmVzdWx0LmVkZ2UgPSBwYXJhbS5lZGdlLnJlbW92ZSgpOyAgICAgICBcbiAgICAgICAgcmVzdWx0Lm5ld0VkZ2UgPXt9O1xuICAgICAgICB2YXIgZWRnZWNsYXNzID0gcGFyYW0ubmV3RWRnZS5lZGdlUGFyYW1zLmNsYXNzID8gcGFyYW0ubmV3RWRnZS5lZGdlUGFyYW1zLmNsYXNzIDogcGFyYW0ubmV3RWRnZS5lZGdlUGFyYW1zO1xuICAgICAgICB2YXIgdmFsaWRhdGlvbiA9IGVsZW1lbnRVdGlsaXRpZXMudmFsaWRhdGVBcnJvd0VuZHMoZWRnZWNsYXNzLCBjeS5nZXRFbGVtZW50QnlJZChwYXJhbS5uZXdFZGdlLnNvdXJjZSksIGN5LmdldEVsZW1lbnRCeUlkKHBhcmFtLm5ld0VkZ2UudGFyZ2V0KSk7XG5cbiAgICAgICAgaWYgKHZhbGlkYXRpb24gPT09ICdyZXZlcnNlJykge1xuICAgICAgICAgdmFyIHRlbXAgPSBwYXJhbS5uZXdFZGdlLnNvdXJjZTtcbiAgICAgICAgIHBhcmFtLm5ld0VkZ2Uuc291cmNlID0gcGFyYW0ubmV3RWRnZS50YXJnZXQ7XG4gICAgICAgICBwYXJhbS5uZXdFZGdlLnRhcmdldCA9IHRlbXA7XG4gICAgICAgfVxuICAgICAgICByZXN1bHQubmV3RWRnZS5pZCA9ZWxlbWVudFV0aWxpdGllcy5hZGRFZGdlKHBhcmFtLm5ld0VkZ2Uuc291cmNlLHBhcmFtLm5ld0VkZ2UudGFyZ2V0LHBhcmFtLm5ld0VkZ2UuZWRnZVBhcmFtcykuaWQoKTtcbiAgICAgICAgcmVzdWx0Lm5ld0VkZ2Uuc291cmNlID0gcGFyYW0ubmV3RWRnZS5zb3VyY2U7XG4gICAgICAgIHJlc3VsdC5uZXdFZGdlLnRhcmdldCA9IHBhcmFtLm5ld0VkZ2UudGFyZ2V0O1xuICAgICAgICByZXN1bHQubmV3RWRnZS5lZGdlUGFyYW1zID0gcGFyYW0ubmV3RWRnZS5lZGdlUGFyYW1zO1xuICAgICAgICBcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH1lbHNlIHtcblxuICAgICAgICByZXN1bHQubmV3U291cmNlID0gcGFyYW0uZWRnZS5zb3VyY2UoKS5pZCgpO1xuICAgICAgICByZXN1bHQubmV3VGFyZ2V0ID0gcGFyYW0uZWRnZS50YXJnZXQoKS5pZCgpO1xuICAgICAgICByZXN1bHQucG9ydHRhcmdldCA9IHBhcmFtLmVkZ2UuZGF0YShcInBvcnR0YXJnZXRcIik7XG4gICAgICAgIHJlc3VsdC5lZGdlID0gcGFyYW0uZWRnZS5tb3ZlKHtcbiAgICAgICAgICB0YXJnZXQ6IHBhcmFtLm5ld1RhcmdldCxcbiAgICAgICAgICBzb3VyY2UgOiBwYXJhbS5uZXdTb3VyY2UgICAgICBcbiAgICAgICAgfSk7XG5cbiAgICAgICAgZWxlbWVudFV0aWxpdGllcy5jaGFuZ2VEYXRhKHJlc3VsdC5lZGdlLCAncG9ydHRhcmdldCcsIHBhcmFtLnBvcnR0YXJnZXQpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICBcbiAgICAgIH1cbiAgICAgIFxuICB9XG4gIFxuICB1bmRvUmVkb0FjdGlvbkZ1bmN0aW9ucy51bmZpeEVycm9yID0gZnVuY3Rpb24ocGFyYW0pe1xuICAgIHZhciBlcnJvckNvZGUgPSBwYXJhbS5lcnJvckNvZGU7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIHJlc3VsdC5lcnJvckNvZGUgPSBlcnJvckNvZGU7XG4gICAgaWYoZXJyb3JDb2RlID09IFwicGQxMDEwMVwiIHx8IGVycm9yQ29kZSA9PSAncGQxMDEwMicpe1xuICAgICBcbiAgICAgICAgcmVzdWx0LmVkZ2UgPSBlbGVtZW50VXRpbGl0aWVzLnJldmVyc2VFZGdlKHBhcmFtLmVkZ2UpO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9ZWxzZSBpZihlcnJvckNvZGUgPT0gXCJwZDEwMTAzXCIgfHwgZXJyb3JDb2RlID09ICdwZDEwMTA3Jyl7XG5cbiAgICAgIHBhcmFtLm5ld05vZGVzLmZvckVhY2goZnVuY3Rpb24obmV3Tm9kZSl7ICAgIFxuICAgICAgICBjeS5yZW1vdmUoY3kuJCgnIycrbmV3Tm9kZS5pZCkpICAgICAgXG4gICAgICAgIFxuICAgICAgfSk7XG5cbiAgICAgIHBhcmFtLm5vZGUucmVzdG9yZSgpO1xuXG4gICAgICBwYXJhbS5vbGRFZGdlcy5mb3JFYWNoKGZ1bmN0aW9uKG9sZEVkZ2UpeyAgXG4gICAgICAgIG9sZEVkZ2UucmVzdG9yZSgpO1xuICAgICAgfSk7XG5cbiAgICAgIGN5LmFuaW1hdGUoe1xuICAgICAgICBkdXJhdGlvbjogMTAwLFxuICAgICAgICBlYXNpbmc6ICdlYXNlJyxcbiAgICAgICAgZml0IDp7ZWxlczp7fSxwYWRkaW5nOjIwfSwgXG4gICAgICAgIGNvbXBsZXRlOiBmdW5jdGlvbigpe1xuICAgICAgICAgICAgICBcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBwYXJhbTtcblxuICAgIH1lbHNlIGlmKGVycm9yQ29kZSA9PSBcInBkMTAxMDVcIiB8fCBlcnJvckNvZGUgPT0gJ3BkMTAxMDYnKXsgIFxuXG4gICAgICByZXN1bHQuZWRnZSA9IGVsZW1lbnRVdGlsaXRpZXMucmV2ZXJzZUVkZ2UocGFyYW0uZWRnZSk7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuXG4gICAgfWVsc2UgaWYoZXJyb3JDb2RlID09IFwicGQxMDE0MFwiKXtcbiAgICAgIHBhcmFtLm5vZGUucmVzdG9yZSgpO1xuICAgICAgY3kuYW5pbWF0ZSh7XG4gICAgICAgIGR1cmF0aW9uOiAxMDAsXG4gICAgICAgIGVhc2luZzogJ2Vhc2UnLFxuICAgICAgICBmaXQgOntlbGVzOnt9LHBhZGRpbmc6MjB9LCBcbiAgICAgICAgY29tcGxldGU6IGZ1bmN0aW9uKCl7XG4gICAgICAgICAgICAgIFxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBwYXJhbTtcbiAgICB9ZWxzZSBpZihlcnJvckNvZGUgPT0gXCJwZDEwMTA0XCIpIHtcbiAgICAgIFxuICAgICAgcGFyYW0ubm9kZXMuZm9yRWFjaChmdW5jdGlvbihub2RlKXtcbiAgICAgICAgbm9kZS5yZXN0b3JlKCk7XG4gICAgICB9KTtcbiAgICAgIHBhcmFtLmVkZ2VzLmZvckVhY2goZnVuY3Rpb24oZWRnZSl7XG4gICAgICAgIGVkZ2UucmVzdG9yZSgpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gcGFyYW07XG4gICAgfWVsc2UgaWYoZXJyb3JDb2RlID09IFwicGQxMDEwOFwiKXtcbiAgICAgIFxuICAgICAgcGFyYW0ubm9kZXMuZm9yRWFjaChmdW5jdGlvbihub2RlKXtcbiAgICAgICAgbm9kZS5yZXN0b3JlKCk7XG4gICAgICB9KTtcbiAgICAgIHBhcmFtLmVkZ2VzLmZvckVhY2goZnVuY3Rpb24oZWRnZSl7XG4gICAgICAgIGVkZ2UucmVzdG9yZSgpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gcGFyYW07XG4gICAgfWVsc2UgaWYoZXJyb3JDb2RlID09IFwicGQxMDExMVwiKXtcbiAgICAgIHBhcmFtLmVkZ2VzLmZvckVhY2goZnVuY3Rpb24oZWRnZSl7XG4gICAgICAgIGVkZ2UucmVzdG9yZSgpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gcGFyYW07XG4gICAgfWVsc2UgaWYoZXJyb3JDb2RlID09IFwicGQxMDEyNlwiKXtcbiAgICAgIHBhcmFtLm5vZGVzLmZvckVhY2goZnVuY3Rpb24obm9kZSl7XG4gICAgICAgIG5vZGUucmVzdG9yZSgpO1xuICAgICAgfSk7XG4gICAgICBwYXJhbS5lZGdlcy5mb3JFYWNoKGZ1bmN0aW9uKGVkZ2Upe1xuICAgICAgICBlZGdlLnJlc3RvcmUoKTtcbiAgICAgIH0pOyAgICAgICBcbiAgICAgIHJldHVybiBwYXJhbTtcbiAgICB9ZWxzZSBpZihlcnJvckNvZGUgPT0gXCJwZDEwMTA5XCIgfHwgZXJyb3JDb2RlID09IFwicGQxMDEyNFwiKSB7XG5cbiAgICAgIHJlc3VsdC5uZXdTb3VyY2UgPSBwYXJhbS5lZGdlLnNvdXJjZSgpLmlkKCk7XG4gICAgICByZXN1bHQubmV3VGFyZ2V0ID0gcGFyYW0uZWRnZS50YXJnZXQoKS5pZCgpO1xuICAgICAgcmVzdWx0LnBvcnRzb3VyY2UgPSBwYXJhbS5wb3J0c291cmNlO1xuICAgICAgcmVzdWx0LmVkZ2UgPSBwYXJhbS5lZGdlLm1vdmUoe1xuICAgICAgICB0YXJnZXQ6IHBhcmFtLm5ld1RhcmdldCxcbiAgICAgICAgc291cmNlIDogcGFyYW0ubmV3U291cmNlICAgICAgXG4gICAgICB9KTtcblxuICAgICAgZWxlbWVudFV0aWxpdGllcy5jaGFuZ2VEYXRhKHJlc3VsdC5lZGdlLCAncG9ydHNvdXJjZScsIHBhcmFtLnBvcnRzb3VyY2UpOyBcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfWVsc2UgaWYoZXJyb3JDb2RlID09IFwicGQxMDExMlwiKSB7XG4gICAgIFxuICAgICAgLy8gSWYgdGhpcyBpcyBmaXJzdCB0aW1lIHdlIHNob3VsZCBtb3ZlIHRoZSBub2RlIHRvIGl0cyBuZXcgcGFyZW50IGFuZCByZWxvY2F0ZSBpdCBieSBnaXZlbiBwb3NEaWZmIHBhcmFtc1xuICAgICAgLy8gZWxzZSB3ZSBzaG91bGQgcmVtb3ZlIHRoZSBtb3ZlZCBlbGVzIGFuZCByZXN0b3JlIHRoZSBlbGVzIHRvIHJlc3RvcmVcbiAgICAgIGlmIChwYXJhbS5maXJzdFRpbWUpIHtcbiAgICAgICAgdmFyIG5ld1BhcmVudElkID0gcGFyYW0ucGFyZW50RGF0YSA9PSB1bmRlZmluZWQgPyBudWxsIDogcGFyYW0ucGFyZW50RGF0YTtcbiAgICAgICAgLy8gVGhlc2UgZWxlcyBpbmNsdWRlcyB0aGUgbm9kZXMgYW5kIHRoZWlyIGNvbm5lY3RlZCBlZGdlcyBhbmQgd2lsbCBiZSByZW1vdmVkIGluIG5vZGVzLm1vdmUoKS5cbiAgICAgICAgLy8gVGhleSBzaG91bGQgYmUgcmVzdG9yZWQgaW4gdW5kb1xuICAgICAgICB2YXIgd2l0aERlc2NlbmRhbnQgPSBwYXJhbS5ub2Rlcy51bmlvbihwYXJhbS5ub2Rlcy5kZXNjZW5kYW50cygpKTtcbiAgICAgICAgcmVzdWx0LmVsZXNUb1Jlc3RvcmUgPSB3aXRoRGVzY2VuZGFudC51bmlvbih3aXRoRGVzY2VuZGFudC5jb25uZWN0ZWRFZGdlcygpKTtcbiAgICAgICAgLy8gVGhlc2UgYXJlIHRoZSBlbGVzIGNyZWF0ZWQgYnkgbm9kZXMubW92ZSgpLCB0aGV5IHNob3VsZCBiZSByZW1vdmVkIGluIHVuZG8uXG4gICAgICAgIHJlc3VsdC5tb3ZlZEVsZXMgPSBwYXJhbS5ub2Rlcy5tb3ZlKHtcInBhcmVudFwiOiBuZXdQYXJlbnRJZH0pO1xuXG4gICAgICAgIHZhciBwb3NEaWZmID0ge1xuICAgICAgICAgIHg6IHBhcmFtLnBvc0RpZmZYLFxuICAgICAgICAgIHk6IHBhcmFtLnBvc0RpZmZZXG4gICAgICAgIH07XG5cbiAgICAgICAgZWxlbWVudFV0aWxpdGllcy5tb3ZlTm9kZXMocG9zRGlmZiwgcmVzdWx0Lm1vdmVkRWxlcyk7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgcmVzdWx0LmVsZXNUb1Jlc3RvcmUgPSBwYXJhbS5tb3ZlZEVsZXMucmVtb3ZlKCk7XG4gICAgICAgIHJlc3VsdC5tb3ZlZEVsZXMgPSBwYXJhbS5lbGVzVG9SZXN0b3JlLnJlc3RvcmUoKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHBhcmFtLmNhbGxiYWNrKSB7XG4gICAgICAgIHJlc3VsdC5jYWxsYmFjayA9IHBhcmFtLmNhbGxiYWNrOyAvLyBrZWVwIHRoZSBwcm92aWRlZCBjYWxsYmFjayBzbyBpdCBjYW4gYmUgcmV1c2VkIGFmdGVyIHVuZG8vcmVkb1xuICAgICAgICBwYXJhbS5jYWxsYmFjayhyZXN1bHQubW92ZWRFbGVzKTsgLy8gYXBwbHkgdGhlIGNhbGxiYWNrIG9uIG5ld2x5IGNyZWF0ZWQgZWxlbWVudHNcbiAgICAgIH1cblxuICAgICBcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICBcbiAgICB9ZWxzZSBpZihlcnJvckNvZGUgPT0gXCJwZDEwMTI1XCIpIHtcblxuICAgICAgY3kuJCgnIycrcGFyYW0ubmV3RWRnZS5pZCkucmVtb3ZlKCk7XG4gICAgICBwYXJhbS5lZGdlID0gcGFyYW0uZWRnZS5yZXN0b3JlKCk7XG5cbiAgICBcbiAgICAgIHJldHVybiBwYXJhbTtcbiAgICAgIFxuICAgIH1lbHNlIGlmKGVycm9yQ29kZSA9PSBcInBkMTAxNDJcIikge1xuICAgICAgY3kuJCgnIycrcGFyYW0ubmV3RWRnZS5pZCkucmVtb3ZlKCk7XG4gICAgICBwYXJhbS5lZGdlID0gcGFyYW0uZWRnZS5yZXN0b3JlKCk7XG5cbiAgICBcbiAgICAgIHJldHVybiBwYXJhbTtcbiAgICB9ZWxzZSB7XG5cbiAgICAgIHJlc3VsdC5uZXdTb3VyY2UgPSBwYXJhbS5lZGdlLnNvdXJjZSgpLmlkKCk7XG4gICAgICByZXN1bHQubmV3VGFyZ2V0ID0gcGFyYW0uZWRnZS50YXJnZXQoKS5pZCgpO1xuICAgICAgcmVzdWx0LnBvcnR0YXJnZXQgPSBwYXJhbS5lZGdlLmRhdGEoXCJwb3J0dGFyZ2V0XCIpO1xuICAgICAgcmVzdWx0LmVkZ2UgPSBwYXJhbS5lZGdlLm1vdmUoe1xuICAgICAgICB0YXJnZXQ6IHBhcmFtLm5ld1RhcmdldCxcbiAgICAgICAgc291cmNlIDogcGFyYW0ubmV3U291cmNlICAgICAgXG4gICAgICB9KTtcblxuICAgICAgZWxlbWVudFV0aWxpdGllcy5jaGFuZ2VEYXRhKHJlc3VsdC5lZGdlLCAncG9ydHRhcmdldCcsIHBhcmFtLnBvcnR0YXJnZXQpO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcblxuICAgICAgXG4gICAgfVxuICAgIFxuICB9XG5cbiAgdW5kb1JlZG9BY3Rpb25GdW5jdGlvbnMuY2xvbmVIaWdoRGVncmVlTm9kZSA9IGZ1bmN0aW9uKG5vZGUpe1xuXG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIHZhciBvbGRYID0gbm9kZS5wb3NpdGlvbigpLng7XG4gICAgdmFyIG9sZFkgPSBub2RlLnBvc2l0aW9uKCkueTtcbiAgICBcbiAgICBcbiAgICB2YXIgY2xhY3VsYXRlTmV3Q2xvbmVQb3NpdGlvbiA9IGZ1bmN0aW9uKHNvdXJjZUVuZFBvaW50WCxzb3VyY2VFbmRQb2ludFksdGFyZ2V0RW5kUG9pbnRYLHRhcmdldEVuZFBvaW50WSxkZXNpcmVkRGlzdGFuY2UsZGlyZWN0aW9uKXtcbiAgICAgIHZhciBkaXN0YW5jZSA9IE1hdGguc3FydChNYXRoLnBvdyh0YXJnZXRFbmRQb2ludFktc291cmNlRW5kUG9pbnRZLDIpKyBNYXRoLnBvdyh0YXJnZXRFbmRQb2ludFgtc291cmNlRW5kUG9pbnRYLDIpKTtcbiAgICAgIHZhciByYXRpbyA9IGRlc2lyZWREaXN0YW5jZS9kaXN0YW5jZTtcbiAgICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICAgIGlmKGRpcmVjdGlvbiA9PSBcInNvdXJjZVwiKXsgXG4gICAgICAgIHJlc3VsdC5jeCA9ICgoMS1yYXRpbykgKiBzb3VyY2VFbmRQb2ludFgpICArIChyYXRpbyAqIHRhcmdldEVuZFBvaW50WCk7XG4gICAgICAgIHJlc3VsdC5jeSA9ICgoMS1yYXRpbykgKiBzb3VyY2VFbmRQb2ludFkpICArIChyYXRpbyAqIHRhcmdldEVuZFBvaW50WSk7XG4gICAgICB9ZWxzZXsgICAgICBcbiAgICAgICAgcmVzdWx0LmN4ID0gKCgxLXJhdGlvKSAqIHRhcmdldEVuZFBvaW50WCkgICsgKHJhdGlvICogc291cmNlRW5kUG9pbnRYKTtcbiAgICAgICAgcmVzdWx0LmN5ID0gKCgxLXJhdGlvKSAqIHRhcmdldEVuZFBvaW50WSkgICsgKHJhdGlvICogc291cmNlRW5kUG9pbnRZKTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9OyAgIFxuICAgIHZhciBlZGdlcyA9IG5vZGUuY29ubmVjdGVkRWRnZXMoKTtcbiAgICB2YXIgZGVzaXJlZERpc3RhbmNlID0gKG5vZGUuaGVpZ2h0KCkgPiBub2RlLndpZHRoKCk/IG5vZGUuaGVpZ2h0KCk6IG5vZGUud2lkdGgoKSkqIDAuMTtcbiAgICBmb3IodmFyIGkgPSAxIDsgaSA8IGVkZ2VzLmxlbmd0aCA7IGkrKyl7XG4gICAgICB2YXIgZWRnZSA9IGVkZ2VzW2ldO1xuICAgICAgdmFyIGluZGV4ID0gaTtcbiAgICAgIHZhciBlZGdlQ2xvbmUgPSBlZGdlLmNsb25lKCk7XG4gICAgICB2YXIgc3RhcnRQb3NpdGlvbiA9IGVkZ2Uuc291cmNlKCkuaWQoKSA9PSBub2RlLmlkKCkgPyBcInNvdXJjZVwiIDogXCJ0YXJnZXRcIjsgICAgXG4gICAgICB2YXIgbmV3UG9zaXRpb24gPSBjbGFjdWxhdGVOZXdDbG9uZVBvc2l0aW9uKGVkZ2Uuc291cmNlRW5kcG9pbnQoKS54LGVkZ2Uuc291cmNlRW5kcG9pbnQoKS55LGVkZ2UudGFyZ2V0RW5kcG9pbnQoKS54LGVkZ2UudGFyZ2V0RW5kcG9pbnQoKS55LGRlc2lyZWREaXN0YW5jZSxzdGFydFBvc2l0aW9uKTsgXG4gICAgICB2YXIgbmV3Tm9kZUlkID0gbm9kZS5pZCgpKydjbG9uZS0nK2luZGV4O1xuICAgICAgLy9lZGdlQ2xvbmUuZGF0YSgpLmlkID0gZWRnZUNsb25lLmRhdGEoKS5pZCsgXCItXCIrbmV3Tm9kZUlkO1xuICAgICAgaWYoZWRnZS5zb3VyY2UoKS5pZCgpID09IG5vZGUuaWQoKSl7ICAgICAgICBcbiAgICAgICAgZWRnZUNsb25lLmRhdGEoKS5zb3VyY2UgPSBuZXdOb2RlSWQ7XG4gICAgICAgIGVkZ2VDbG9uZS5kYXRhKCkucG9ydHNvdXJjZSA9IG5ld05vZGVJZDsgICAgXG4gICAgICB9ZWxzZXtcbiAgICAgICAgICBcbiAgICAgICAgZWRnZUNsb25lLmRhdGEoKS50YXJnZXQgPSBuZXdOb2RlSWQ7XG4gICAgICAgIGVkZ2VDbG9uZS5kYXRhKCkucG9ydHRhcmdldCA9IG5ld05vZGVJZDsgICAgXG4gICAgICB9XG4gICAgICB2YXIgbmV3Tm9kZSA9IG5vZGUuY2xvbmUoKTtcbiAgICAgIG5ld05vZGUuZGF0YSgpLmlkID0gbmV3Tm9kZUlkO1xuICAgICAgY3kuYWRkKG5ld05vZGUpO1xuICAgICBcbiAgICAgIGVkZ2UucmVtb3ZlKCk7XG4gICAgICBjeS5hZGQoZWRnZUNsb25lKTtcbiAgICAgIG5ld05vZGUucG9zaXRpb24oe1xuICAgICAgICB4OiBuZXdQb3NpdGlvbi5jeCxcbiAgICAgICAgeTogbmV3UG9zaXRpb24uY3lcbiAgICAgIH0pO1xuICAgICAgZWxlbWVudFV0aWxpdGllcy5zZXRDbG9uZU1hcmtlclN0YXR1cyhuZXdOb2RlLCB0cnVlKTtcbiAgICAgIFxuICAgIH0gIFxuICAgIFxuICAgIHZhciBuZXdQb3NpdGlvbiA9IGNsYWN1bGF0ZU5ld0Nsb25lUG9zaXRpb24oXG4gICAgICBlZGdlc1swXS5zb3VyY2VFbmRwb2ludCgpLngsXG4gICAgICBlZGdlc1swXS5zb3VyY2VFbmRwb2ludCgpLnksXG4gICAgICBlZGdlc1swXS50YXJnZXRFbmRwb2ludCgpLngsXG4gICAgICBlZGdlc1swXS50YXJnZXRFbmRwb2ludCgpLnksXG4gICAgICBkZXNpcmVkRGlzdGFuY2UsZWRnZXNbMF0uc291cmNlKCkuaWQoKSA9PSBub2RlLmlkKCkgPyBcInNvdXJjZVwiIDogXCJ0YXJnZXRcIlxuICAgICAgKTtcbiAgXG4gICAgdmFyIGNsb25lRWRnZSA9IGVkZ2VzWzBdLmNsb25lKCk7XG4gICAgLy9jbG9uZUVkZ2UuZGF0YSgpLmlkID0gY2xvbmVFZGdlLmRhdGEoKS5pZCsgXCItXCIrbm9kZS5pZCgpKydjbG9uZS0wJztcbiAgICBcbiAgICBlZGdlc1swXS5yZW1vdmUoKTtcbiAgICBjeS5hZGQoY2xvbmVFZGdlKTtcbiAgICBlbGVtZW50VXRpbGl0aWVzLnNldENsb25lTWFya2VyU3RhdHVzKG5vZGUsdHJ1ZSk7XG4gICAgbm9kZS5wb3NpdGlvbih7XG4gICAgICB4OiBuZXdQb3NpdGlvbi5jeCxcbiAgICAgIHk6IG5ld1Bvc2l0aW9uLmN5XG4gICAgfSk7XG4gIFxuICAgIHJlc3VsdC5vbGRYID0gb2xkWDsgICAgXG4gICAgcmVzdWx0Lm9sZFkgPSBvbGRZO1xuICAgIHJlc3VsdC5ub2RlID0gbm9kZTtcbiAgICByZXN1bHQubnVtYmVyT2ZFZGdlcyA9IGVkZ2VzLmxlbmd0aDtcbiAgICByZXR1cm4gcmVzdWx0O1xuXG4gIH1cblxuICB1bmRvUmVkb0FjdGlvbkZ1bmN0aW9ucy51bkNsb25lSGlnaERlZ3JlZU5vZGUgPSBmdW5jdGlvbihwYXJhbSl7XG5cbiAgICB2YXIgbm9kZSA9IHBhcmFtLm5vZGU7XG4gICAgZWxlbWVudFV0aWxpdGllcy5zZXRDbG9uZU1hcmtlclN0YXR1cyhub2RlLGZhbHNlKTtcbiAgICBub2RlLnBvc2l0aW9uKHtcbiAgICAgIHg6IHBhcmFtLm9sZFgsXG4gICAgICB5OiBwYXJhbS5vbGRZXG4gICAgfSk7XG4gIFxuICAgIGZvcih2YXIgaSA9IDEgOyBpIDwgcGFyYW0ubnVtYmVyT2ZFZGdlcyA7IGkrKyl7XG4gICAgICB2YXIgY2xvbmVJZCA9IG5vZGUuaWQoKSsnY2xvbmUtJytpO1xuICAgICAgdmFyIGNsb25lID0gY3kuJChcIiNcIitjbG9uZUlkKTtcbiAgICAgIHZhciBjbG9uZUVkZ2UgPSBjbG9uZS5jb25uZWN0ZWRFZGdlcygpWzBdO1xuICAgICAgdmFyIGVkZ2UgPSBjbG9uZUVkZ2UuY2xvbmUoKTtcbiAgICAgIFxuICAgIFxuICAgICAgaWYoZWRnZS5kYXRhKCkuc291cmNlID09IGNsb25lSWQpeyAgICAgICAgXG4gICAgICAgIGVkZ2UuZGF0YSgpLnNvdXJjZSA9IG5vZGUuaWQoKTtcbiAgICAgICAgZWRnZS5kYXRhKCkucG9ydHNvdXJjZSA9ICBub2RlLmlkKCk7ICAgIFxuICAgICAgfWVsc2V7ICAgICAgICAgIFxuICAgICAgICBlZGdlLmRhdGEoKS50YXJnZXQgPSAgbm9kZS5pZCgpO1xuICAgICAgICBlZGdlLmRhdGEoKS5wb3J0dGFyZ2V0ID0gIG5vZGUuaWQoKTsgICAgXG4gICAgICB9XG5cbiAgICAgIGNsb25lRWRnZS5yZW1vdmUoKTtcbiAgICAgIGNsb25lLnJlbW92ZSgpO1xuICAgICAgXG4gICAgICBjeS5hZGQoZWRnZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cblxuICB1bmRvUmVkb0FjdGlvbkZ1bmN0aW9ucy5jaGFuZ2VNYXBUeXBlID0gZnVuY3Rpb24ocGFyYW0pe1xuICAgIHZhciByZXN1bHQgPXt9O1xuICAgIHZhciBjdXJyZW50TWFwVHlwZSA9IGVsZW1lbnRVdGlsaXRpZXMuZ2V0TWFwVHlwZSgpO1xuICAgIGVsZW1lbnRVdGlsaXRpZXMuc2V0TWFwVHlwZShwYXJhbS5tYXBUeXBlKTtcbiAgICByZXN1bHQubWFwVHlwZSA9IGN1cnJlbnRNYXBUeXBlO1xuICAgIHJlc3VsdC5jYWxsYmFjayA9IHBhcmFtLmNhbGxiYWNrO1xuICAgIHBhcmFtLmNhbGxiYWNrKCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIH1cblxuICByZXR1cm4gdW5kb1JlZG9BY3Rpb25GdW5jdGlvbnNFeHRlbmRlcjtcbn07XG4iLCIvKipcbiAqIExvZGFzaCAoQ3VzdG9tIEJ1aWxkKSA8aHR0cHM6Ly9sb2Rhc2guY29tLz5cbiAqIEJ1aWxkOiBgbG9kYXNoIG1vZHVsYXJpemUgZXhwb3J0cz1cIm5wbVwiIC1vIC4vYFxuICogQ29weXJpZ2h0IEpTIEZvdW5kYXRpb24gYW5kIG90aGVyIGNvbnRyaWJ1dG9ycyA8aHR0cHM6Ly9qcy5mb3VuZGF0aW9uLz5cbiAqIFJlbGVhc2VkIHVuZGVyIE1JVCBsaWNlbnNlIDxodHRwczovL2xvZGFzaC5jb20vbGljZW5zZT5cbiAqIEJhc2VkIG9uIFVuZGVyc2NvcmUuanMgMS44LjMgPGh0dHA6Ly91bmRlcnNjb3JlanMub3JnL0xJQ0VOU0U+XG4gKiBDb3B5cmlnaHQgSmVyZW15IEFzaGtlbmFzLCBEb2N1bWVudENsb3VkIGFuZCBJbnZlc3RpZ2F0aXZlIFJlcG9ydGVycyAmIEVkaXRvcnNcbiAqL1xuXG4vKiogVXNlZCBhcyB0aGUgc2l6ZSB0byBlbmFibGUgbGFyZ2UgYXJyYXkgb3B0aW1pemF0aW9ucy4gKi9cbnZhciBMQVJHRV9BUlJBWV9TSVpFID0gMjAwO1xuXG4vKiogVXNlZCB0byBzdGFuZC1pbiBmb3IgYHVuZGVmaW5lZGAgaGFzaCB2YWx1ZXMuICovXG52YXIgSEFTSF9VTkRFRklORUQgPSAnX19sb2Rhc2hfaGFzaF91bmRlZmluZWRfXyc7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIHZhbHVlIGNvbXBhcmlzb25zLiAqL1xudmFyIENPTVBBUkVfUEFSVElBTF9GTEFHID0gMSxcbiAgICBDT01QQVJFX1VOT1JERVJFRF9GTEFHID0gMjtcblxuLyoqIFVzZWQgYXMgcmVmZXJlbmNlcyBmb3IgdmFyaW91cyBgTnVtYmVyYCBjb25zdGFudHMuICovXG52YXIgTUFYX1NBRkVfSU5URUdFUiA9IDkwMDcxOTkyNTQ3NDA5OTE7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBhcmdzVGFnID0gJ1tvYmplY3QgQXJndW1lbnRzXScsXG4gICAgYXJyYXlUYWcgPSAnW29iamVjdCBBcnJheV0nLFxuICAgIGFzeW5jVGFnID0gJ1tvYmplY3QgQXN5bmNGdW5jdGlvbl0nLFxuICAgIGJvb2xUYWcgPSAnW29iamVjdCBCb29sZWFuXScsXG4gICAgZGF0ZVRhZyA9ICdbb2JqZWN0IERhdGVdJyxcbiAgICBlcnJvclRhZyA9ICdbb2JqZWN0IEVycm9yXScsXG4gICAgZnVuY1RhZyA9ICdbb2JqZWN0IEZ1bmN0aW9uXScsXG4gICAgZ2VuVGFnID0gJ1tvYmplY3QgR2VuZXJhdG9yRnVuY3Rpb25dJyxcbiAgICBtYXBUYWcgPSAnW29iamVjdCBNYXBdJyxcbiAgICBudW1iZXJUYWcgPSAnW29iamVjdCBOdW1iZXJdJyxcbiAgICBudWxsVGFnID0gJ1tvYmplY3QgTnVsbF0nLFxuICAgIG9iamVjdFRhZyA9ICdbb2JqZWN0IE9iamVjdF0nLFxuICAgIHByb21pc2VUYWcgPSAnW29iamVjdCBQcm9taXNlXScsXG4gICAgcHJveHlUYWcgPSAnW29iamVjdCBQcm94eV0nLFxuICAgIHJlZ2V4cFRhZyA9ICdbb2JqZWN0IFJlZ0V4cF0nLFxuICAgIHNldFRhZyA9ICdbb2JqZWN0IFNldF0nLFxuICAgIHN0cmluZ1RhZyA9ICdbb2JqZWN0IFN0cmluZ10nLFxuICAgIHN5bWJvbFRhZyA9ICdbb2JqZWN0IFN5bWJvbF0nLFxuICAgIHVuZGVmaW5lZFRhZyA9ICdbb2JqZWN0IFVuZGVmaW5lZF0nLFxuICAgIHdlYWtNYXBUYWcgPSAnW29iamVjdCBXZWFrTWFwXSc7XG5cbnZhciBhcnJheUJ1ZmZlclRhZyA9ICdbb2JqZWN0IEFycmF5QnVmZmVyXScsXG4gICAgZGF0YVZpZXdUYWcgPSAnW29iamVjdCBEYXRhVmlld10nLFxuICAgIGZsb2F0MzJUYWcgPSAnW29iamVjdCBGbG9hdDMyQXJyYXldJyxcbiAgICBmbG9hdDY0VGFnID0gJ1tvYmplY3QgRmxvYXQ2NEFycmF5XScsXG4gICAgaW50OFRhZyA9ICdbb2JqZWN0IEludDhBcnJheV0nLFxuICAgIGludDE2VGFnID0gJ1tvYmplY3QgSW50MTZBcnJheV0nLFxuICAgIGludDMyVGFnID0gJ1tvYmplY3QgSW50MzJBcnJheV0nLFxuICAgIHVpbnQ4VGFnID0gJ1tvYmplY3QgVWludDhBcnJheV0nLFxuICAgIHVpbnQ4Q2xhbXBlZFRhZyA9ICdbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XScsXG4gICAgdWludDE2VGFnID0gJ1tvYmplY3QgVWludDE2QXJyYXldJyxcbiAgICB1aW50MzJUYWcgPSAnW29iamVjdCBVaW50MzJBcnJheV0nO1xuXG4vKipcbiAqIFVzZWQgdG8gbWF0Y2ggYFJlZ0V4cGBcbiAqIFtzeW50YXggY2hhcmFjdGVyc10oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtcGF0dGVybnMpLlxuICovXG52YXIgcmVSZWdFeHBDaGFyID0gL1tcXFxcXiQuKis/KClbXFxde318XS9nO1xuXG4vKiogVXNlZCB0byBkZXRlY3QgaG9zdCBjb25zdHJ1Y3RvcnMgKFNhZmFyaSkuICovXG52YXIgcmVJc0hvc3RDdG9yID0gL15cXFtvYmplY3QgLis/Q29uc3RydWN0b3JcXF0kLztcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IHVuc2lnbmVkIGludGVnZXIgdmFsdWVzLiAqL1xudmFyIHJlSXNVaW50ID0gL14oPzowfFsxLTldXFxkKikkLztcblxuLyoqIFVzZWQgdG8gaWRlbnRpZnkgYHRvU3RyaW5nVGFnYCB2YWx1ZXMgb2YgdHlwZWQgYXJyYXlzLiAqL1xudmFyIHR5cGVkQXJyYXlUYWdzID0ge307XG50eXBlZEFycmF5VGFnc1tmbG9hdDMyVGFnXSA9IHR5cGVkQXJyYXlUYWdzW2Zsb2F0NjRUYWddID1cbnR5cGVkQXJyYXlUYWdzW2ludDhUYWddID0gdHlwZWRBcnJheVRhZ3NbaW50MTZUYWddID1cbnR5cGVkQXJyYXlUYWdzW2ludDMyVGFnXSA9IHR5cGVkQXJyYXlUYWdzW3VpbnQ4VGFnXSA9XG50eXBlZEFycmF5VGFnc1t1aW50OENsYW1wZWRUYWddID0gdHlwZWRBcnJheVRhZ3NbdWludDE2VGFnXSA9XG50eXBlZEFycmF5VGFnc1t1aW50MzJUYWddID0gdHJ1ZTtcbnR5cGVkQXJyYXlUYWdzW2FyZ3NUYWddID0gdHlwZWRBcnJheVRhZ3NbYXJyYXlUYWddID1cbnR5cGVkQXJyYXlUYWdzW2FycmF5QnVmZmVyVGFnXSA9IHR5cGVkQXJyYXlUYWdzW2Jvb2xUYWddID1cbnR5cGVkQXJyYXlUYWdzW2RhdGFWaWV3VGFnXSA9IHR5cGVkQXJyYXlUYWdzW2RhdGVUYWddID1cbnR5cGVkQXJyYXlUYWdzW2Vycm9yVGFnXSA9IHR5cGVkQXJyYXlUYWdzW2Z1bmNUYWddID1cbnR5cGVkQXJyYXlUYWdzW21hcFRhZ10gPSB0eXBlZEFycmF5VGFnc1tudW1iZXJUYWddID1cbnR5cGVkQXJyYXlUYWdzW29iamVjdFRhZ10gPSB0eXBlZEFycmF5VGFnc1tyZWdleHBUYWddID1cbnR5cGVkQXJyYXlUYWdzW3NldFRhZ10gPSB0eXBlZEFycmF5VGFnc1tzdHJpbmdUYWddID1cbnR5cGVkQXJyYXlUYWdzW3dlYWtNYXBUYWddID0gZmFsc2U7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgZ2xvYmFsYCBmcm9tIE5vZGUuanMuICovXG52YXIgZnJlZUdsb2JhbCA9IHR5cGVvZiBnbG9iYWwgPT0gJ29iamVjdCcgJiYgZ2xvYmFsICYmIGdsb2JhbC5PYmplY3QgPT09IE9iamVjdCAmJiBnbG9iYWw7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgc2VsZmAuICovXG52YXIgZnJlZVNlbGYgPSB0eXBlb2Ygc2VsZiA9PSAnb2JqZWN0JyAmJiBzZWxmICYmIHNlbGYuT2JqZWN0ID09PSBPYmplY3QgJiYgc2VsZjtcblxuLyoqIFVzZWQgYXMgYSByZWZlcmVuY2UgdG8gdGhlIGdsb2JhbCBvYmplY3QuICovXG52YXIgcm9vdCA9IGZyZWVHbG9iYWwgfHwgZnJlZVNlbGYgfHwgRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBleHBvcnRzYC4gKi9cbnZhciBmcmVlRXhwb3J0cyA9IHR5cGVvZiBleHBvcnRzID09ICdvYmplY3QnICYmIGV4cG9ydHMgJiYgIWV4cG9ydHMubm9kZVR5cGUgJiYgZXhwb3J0cztcblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBtb2R1bGVgLiAqL1xudmFyIGZyZWVNb2R1bGUgPSBmcmVlRXhwb3J0cyAmJiB0eXBlb2YgbW9kdWxlID09ICdvYmplY3QnICYmIG1vZHVsZSAmJiAhbW9kdWxlLm5vZGVUeXBlICYmIG1vZHVsZTtcblxuLyoqIERldGVjdCB0aGUgcG9wdWxhciBDb21tb25KUyBleHRlbnNpb24gYG1vZHVsZS5leHBvcnRzYC4gKi9cbnZhciBtb2R1bGVFeHBvcnRzID0gZnJlZU1vZHVsZSAmJiBmcmVlTW9kdWxlLmV4cG9ydHMgPT09IGZyZWVFeHBvcnRzO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYHByb2Nlc3NgIGZyb20gTm9kZS5qcy4gKi9cbnZhciBmcmVlUHJvY2VzcyA9IG1vZHVsZUV4cG9ydHMgJiYgZnJlZUdsb2JhbC5wcm9jZXNzO1xuXG4vKiogVXNlZCB0byBhY2Nlc3MgZmFzdGVyIE5vZGUuanMgaGVscGVycy4gKi9cbnZhciBub2RlVXRpbCA9IChmdW5jdGlvbigpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gZnJlZVByb2Nlc3MgJiYgZnJlZVByb2Nlc3MuYmluZGluZyAmJiBmcmVlUHJvY2Vzcy5iaW5kaW5nKCd1dGlsJyk7XG4gIH0gY2F0Y2ggKGUpIHt9XG59KCkpO1xuXG4vKiBOb2RlLmpzIGhlbHBlciByZWZlcmVuY2VzLiAqL1xudmFyIG5vZGVJc1R5cGVkQXJyYXkgPSBub2RlVXRpbCAmJiBub2RlVXRpbC5pc1R5cGVkQXJyYXk7XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBfLmZpbHRlcmAgZm9yIGFycmF5cyB3aXRob3V0IHN1cHBvcnQgZm9yXG4gKiBpdGVyYXRlZSBzaG9ydGhhbmRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBbYXJyYXldIFRoZSBhcnJheSB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBwcmVkaWNhdGUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGZpbHRlcmVkIGFycmF5LlxuICovXG5mdW5jdGlvbiBhcnJheUZpbHRlcihhcnJheSwgcHJlZGljYXRlKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGgsXG4gICAgICByZXNJbmRleCA9IDAsXG4gICAgICByZXN1bHQgPSBbXTtcblxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciB2YWx1ZSA9IGFycmF5W2luZGV4XTtcbiAgICBpZiAocHJlZGljYXRlKHZhbHVlLCBpbmRleCwgYXJyYXkpKSB7XG4gICAgICByZXN1bHRbcmVzSW5kZXgrK10gPSB2YWx1ZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBBcHBlbmRzIHRoZSBlbGVtZW50cyBvZiBgdmFsdWVzYCB0byBgYXJyYXlgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtBcnJheX0gdmFsdWVzIFRoZSB2YWx1ZXMgdG8gYXBwZW5kLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIGBhcnJheWAuXG4gKi9cbmZ1bmN0aW9uIGFycmF5UHVzaChhcnJheSwgdmFsdWVzKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gdmFsdWVzLmxlbmd0aCxcbiAgICAgIG9mZnNldCA9IGFycmF5Lmxlbmd0aDtcblxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIGFycmF5W29mZnNldCArIGluZGV4XSA9IHZhbHVlc1tpbmRleF07XG4gIH1cbiAgcmV0dXJuIGFycmF5O1xufVxuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgXy5zb21lYCBmb3IgYXJyYXlzIHdpdGhvdXQgc3VwcG9ydCBmb3IgaXRlcmF0ZWVcbiAqIHNob3J0aGFuZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IFthcnJheV0gVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHByZWRpY2F0ZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGFueSBlbGVtZW50IHBhc3NlcyB0aGUgcHJlZGljYXRlIGNoZWNrLFxuICogIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gYXJyYXlTb21lKGFycmF5LCBwcmVkaWNhdGUpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDtcblxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIGlmIChwcmVkaWNhdGUoYXJyYXlbaW5kZXhdLCBpbmRleCwgYXJyYXkpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnRpbWVzYCB3aXRob3V0IHN1cHBvcnQgZm9yIGl0ZXJhdGVlIHNob3J0aGFuZHNcbiAqIG9yIG1heCBhcnJheSBsZW5ndGggY2hlY2tzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge251bWJlcn0gbiBUaGUgbnVtYmVyIG9mIHRpbWVzIHRvIGludm9rZSBgaXRlcmF0ZWVgLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcmVzdWx0cy5cbiAqL1xuZnVuY3Rpb24gYmFzZVRpbWVzKG4sIGl0ZXJhdGVlKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgcmVzdWx0ID0gQXJyYXkobik7XG5cbiAgd2hpbGUgKCsraW5kZXggPCBuKSB7XG4gICAgcmVzdWx0W2luZGV4XSA9IGl0ZXJhdGVlKGluZGV4KTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnVuYXJ5YCB3aXRob3V0IHN1cHBvcnQgZm9yIHN0b3JpbmcgbWV0YWRhdGEuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGNhcCBhcmd1bWVudHMgZm9yLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgY2FwcGVkIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBiYXNlVW5hcnkoZnVuYykge1xuICByZXR1cm4gZnVuY3Rpb24odmFsdWUpIHtcbiAgICByZXR1cm4gZnVuYyh2YWx1ZSk7XG4gIH07XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgYGNhY2hlYCB2YWx1ZSBmb3IgYGtleWAgZXhpc3RzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gY2FjaGUgVGhlIGNhY2hlIHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBlbnRyeSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbiBlbnRyeSBmb3IgYGtleWAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGNhY2hlSGFzKGNhY2hlLCBrZXkpIHtcbiAgcmV0dXJuIGNhY2hlLmhhcyhrZXkpO1xufVxuXG4vKipcbiAqIEdldHMgdGhlIHZhbHVlIGF0IGBrZXlgIG9mIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gW29iamVjdF0gVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHByb3BlcnR5IHZhbHVlLlxuICovXG5mdW5jdGlvbiBnZXRWYWx1ZShvYmplY3QsIGtleSkge1xuICByZXR1cm4gb2JqZWN0ID09IG51bGwgPyB1bmRlZmluZWQgOiBvYmplY3Rba2V5XTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBgbWFwYCB0byBpdHMga2V5LXZhbHVlIHBhaXJzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gbWFwIFRoZSBtYXAgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUga2V5LXZhbHVlIHBhaXJzLlxuICovXG5mdW5jdGlvbiBtYXBUb0FycmF5KG1hcCkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIHJlc3VsdCA9IEFycmF5KG1hcC5zaXplKTtcblxuICBtYXAuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSwga2V5KSB7XG4gICAgcmVzdWx0WysraW5kZXhdID0gW2tleSwgdmFsdWVdO1xuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgdW5hcnkgZnVuY3Rpb24gdGhhdCBpbnZva2VzIGBmdW5jYCB3aXRoIGl0cyBhcmd1bWVudCB0cmFuc2Zvcm1lZC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gd3JhcC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHRyYW5zZm9ybSBUaGUgYXJndW1lbnQgdHJhbnNmb3JtLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIG92ZXJBcmcoZnVuYywgdHJhbnNmb3JtKSB7XG4gIHJldHVybiBmdW5jdGlvbihhcmcpIHtcbiAgICByZXR1cm4gZnVuYyh0cmFuc2Zvcm0oYXJnKSk7XG4gIH07XG59XG5cbi8qKlxuICogQ29udmVydHMgYHNldGAgdG8gYW4gYXJyYXkgb2YgaXRzIHZhbHVlcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IHNldCBUaGUgc2V0IHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHZhbHVlcy5cbiAqL1xuZnVuY3Rpb24gc2V0VG9BcnJheShzZXQpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICByZXN1bHQgPSBBcnJheShzZXQuc2l6ZSk7XG5cbiAgc2V0LmZvckVhY2goZnVuY3Rpb24odmFsdWUpIHtcbiAgICByZXN1bHRbKytpbmRleF0gPSB2YWx1ZTtcbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBhcnJheVByb3RvID0gQXJyYXkucHJvdG90eXBlLFxuICAgIGZ1bmNQcm90byA9IEZ1bmN0aW9uLnByb3RvdHlwZSxcbiAgICBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBvdmVycmVhY2hpbmcgY29yZS1qcyBzaGltcy4gKi9cbnZhciBjb3JlSnNEYXRhID0gcm9vdFsnX19jb3JlLWpzX3NoYXJlZF9fJ107XG5cbi8qKiBVc2VkIHRvIHJlc29sdmUgdGhlIGRlY29tcGlsZWQgc291cmNlIG9mIGZ1bmN0aW9ucy4gKi9cbnZhciBmdW5jVG9TdHJpbmcgPSBmdW5jUHJvdG8udG9TdHJpbmc7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBtZXRob2RzIG1hc3F1ZXJhZGluZyBhcyBuYXRpdmUuICovXG52YXIgbWFza1NyY0tleSA9IChmdW5jdGlvbigpIHtcbiAgdmFyIHVpZCA9IC9bXi5dKyQvLmV4ZWMoY29yZUpzRGF0YSAmJiBjb3JlSnNEYXRhLmtleXMgJiYgY29yZUpzRGF0YS5rZXlzLklFX1BST1RPIHx8ICcnKTtcbiAgcmV0dXJuIHVpZCA/ICgnU3ltYm9sKHNyYylfMS4nICsgdWlkKSA6ICcnO1xufSgpKTtcblxuLyoqXG4gKiBVc2VkIHRvIHJlc29sdmUgdGhlXG4gKiBbYHRvU3RyaW5nVGFnYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtb2JqZWN0LnByb3RvdHlwZS50b3N0cmluZylcbiAqIG9mIHZhbHVlcy5cbiAqL1xudmFyIG5hdGl2ZU9iamVjdFRvU3RyaW5nID0gb2JqZWN0UHJvdG8udG9TdHJpbmc7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBpZiBhIG1ldGhvZCBpcyBuYXRpdmUuICovXG52YXIgcmVJc05hdGl2ZSA9IFJlZ0V4cCgnXicgK1xuICBmdW5jVG9TdHJpbmcuY2FsbChoYXNPd25Qcm9wZXJ0eSkucmVwbGFjZShyZVJlZ0V4cENoYXIsICdcXFxcJCYnKVxuICAucmVwbGFjZSgvaGFzT3duUHJvcGVydHl8KGZ1bmN0aW9uKS4qPyg/PVxcXFxcXCgpfCBmb3IgLis/KD89XFxcXFxcXSkvZywgJyQxLio/JykgKyAnJCdcbik7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIEJ1ZmZlciA9IG1vZHVsZUV4cG9ydHMgPyByb290LkJ1ZmZlciA6IHVuZGVmaW5lZCxcbiAgICBTeW1ib2wgPSByb290LlN5bWJvbCxcbiAgICBVaW50OEFycmF5ID0gcm9vdC5VaW50OEFycmF5LFxuICAgIHByb3BlcnR5SXNFbnVtZXJhYmxlID0gb2JqZWN0UHJvdG8ucHJvcGVydHlJc0VudW1lcmFibGUsXG4gICAgc3BsaWNlID0gYXJyYXlQcm90by5zcGxpY2UsXG4gICAgc3ltVG9TdHJpbmdUYWcgPSBTeW1ib2wgPyBTeW1ib2wudG9TdHJpbmdUYWcgOiB1bmRlZmluZWQ7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVHZXRTeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyxcbiAgICBuYXRpdmVJc0J1ZmZlciA9IEJ1ZmZlciA/IEJ1ZmZlci5pc0J1ZmZlciA6IHVuZGVmaW5lZCxcbiAgICBuYXRpdmVLZXlzID0gb3ZlckFyZyhPYmplY3Qua2V5cywgT2JqZWN0KTtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgdGhhdCBhcmUgdmVyaWZpZWQgdG8gYmUgbmF0aXZlLiAqL1xudmFyIERhdGFWaWV3ID0gZ2V0TmF0aXZlKHJvb3QsICdEYXRhVmlldycpLFxuICAgIE1hcCA9IGdldE5hdGl2ZShyb290LCAnTWFwJyksXG4gICAgUHJvbWlzZSA9IGdldE5hdGl2ZShyb290LCAnUHJvbWlzZScpLFxuICAgIFNldCA9IGdldE5hdGl2ZShyb290LCAnU2V0JyksXG4gICAgV2Vha01hcCA9IGdldE5hdGl2ZShyb290LCAnV2Vha01hcCcpLFxuICAgIG5hdGl2ZUNyZWF0ZSA9IGdldE5hdGl2ZShPYmplY3QsICdjcmVhdGUnKTtcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IG1hcHMsIHNldHMsIGFuZCB3ZWFrbWFwcy4gKi9cbnZhciBkYXRhVmlld0N0b3JTdHJpbmcgPSB0b1NvdXJjZShEYXRhVmlldyksXG4gICAgbWFwQ3RvclN0cmluZyA9IHRvU291cmNlKE1hcCksXG4gICAgcHJvbWlzZUN0b3JTdHJpbmcgPSB0b1NvdXJjZShQcm9taXNlKSxcbiAgICBzZXRDdG9yU3RyaW5nID0gdG9Tb3VyY2UoU2V0KSxcbiAgICB3ZWFrTWFwQ3RvclN0cmluZyA9IHRvU291cmNlKFdlYWtNYXApO1xuXG4vKiogVXNlZCB0byBjb252ZXJ0IHN5bWJvbHMgdG8gcHJpbWl0aXZlcyBhbmQgc3RyaW5ncy4gKi9cbnZhciBzeW1ib2xQcm90byA9IFN5bWJvbCA/IFN5bWJvbC5wcm90b3R5cGUgOiB1bmRlZmluZWQsXG4gICAgc3ltYm9sVmFsdWVPZiA9IHN5bWJvbFByb3RvID8gc3ltYm9sUHJvdG8udmFsdWVPZiA6IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBDcmVhdGVzIGEgaGFzaCBvYmplY3QuXG4gKlxuICogQHByaXZhdGVcbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtBcnJheX0gW2VudHJpZXNdIFRoZSBrZXktdmFsdWUgcGFpcnMgdG8gY2FjaGUuXG4gKi9cbmZ1bmN0aW9uIEhhc2goZW50cmllcykge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IGVudHJpZXMgPT0gbnVsbCA/IDAgOiBlbnRyaWVzLmxlbmd0aDtcblxuICB0aGlzLmNsZWFyKCk7XG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdmFyIGVudHJ5ID0gZW50cmllc1tpbmRleF07XG4gICAgdGhpcy5zZXQoZW50cnlbMF0sIGVudHJ5WzFdKTtcbiAgfVxufVxuXG4vKipcbiAqIFJlbW92ZXMgYWxsIGtleS12YWx1ZSBlbnRyaWVzIGZyb20gdGhlIGhhc2guXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGNsZWFyXG4gKiBAbWVtYmVyT2YgSGFzaFxuICovXG5mdW5jdGlvbiBoYXNoQ2xlYXIoKSB7XG4gIHRoaXMuX19kYXRhX18gPSBuYXRpdmVDcmVhdGUgPyBuYXRpdmVDcmVhdGUobnVsbCkgOiB7fTtcbiAgdGhpcy5zaXplID0gMDtcbn1cblxuLyoqXG4gKiBSZW1vdmVzIGBrZXlgIGFuZCBpdHMgdmFsdWUgZnJvbSB0aGUgaGFzaC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZGVsZXRlXG4gKiBAbWVtYmVyT2YgSGFzaFxuICogQHBhcmFtIHtPYmplY3R9IGhhc2ggVGhlIGhhc2ggdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byByZW1vdmUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGVudHJ5IHdhcyByZW1vdmVkLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGhhc2hEZWxldGUoa2V5KSB7XG4gIHZhciByZXN1bHQgPSB0aGlzLmhhcyhrZXkpICYmIGRlbGV0ZSB0aGlzLl9fZGF0YV9fW2tleV07XG4gIHRoaXMuc2l6ZSAtPSByZXN1bHQgPyAxIDogMDtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBoYXNoIHZhbHVlIGZvciBga2V5YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZ2V0XG4gKiBAbWVtYmVyT2YgSGFzaFxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBnZXQuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZW50cnkgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIGhhc2hHZXQoa2V5KSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXztcbiAgaWYgKG5hdGl2ZUNyZWF0ZSkge1xuICAgIHZhciByZXN1bHQgPSBkYXRhW2tleV07XG4gICAgcmV0dXJuIHJlc3VsdCA9PT0gSEFTSF9VTkRFRklORUQgPyB1bmRlZmluZWQgOiByZXN1bHQ7XG4gIH1cbiAgcmV0dXJuIGhhc093blByb3BlcnR5LmNhbGwoZGF0YSwga2V5KSA/IGRhdGFba2V5XSA6IHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgYSBoYXNoIHZhbHVlIGZvciBga2V5YCBleGlzdHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGhhc1xuICogQG1lbWJlck9mIEhhc2hcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgZW50cnkgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW4gZW50cnkgZm9yIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBoYXNoSGFzKGtleSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX187XG4gIHJldHVybiBuYXRpdmVDcmVhdGUgPyAoZGF0YVtrZXldICE9PSB1bmRlZmluZWQpIDogaGFzT3duUHJvcGVydHkuY2FsbChkYXRhLCBrZXkpO1xufVxuXG4vKipcbiAqIFNldHMgdGhlIGhhc2ggYGtleWAgdG8gYHZhbHVlYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgc2V0XG4gKiBAbWVtYmVyT2YgSGFzaFxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBoYXNoIGluc3RhbmNlLlxuICovXG5mdW5jdGlvbiBoYXNoU2V0KGtleSwgdmFsdWUpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fO1xuICB0aGlzLnNpemUgKz0gdGhpcy5oYXMoa2V5KSA/IDAgOiAxO1xuICBkYXRhW2tleV0gPSAobmF0aXZlQ3JlYXRlICYmIHZhbHVlID09PSB1bmRlZmluZWQpID8gSEFTSF9VTkRFRklORUQgOiB2YWx1ZTtcbiAgcmV0dXJuIHRoaXM7XG59XG5cbi8vIEFkZCBtZXRob2RzIHRvIGBIYXNoYC5cbkhhc2gucHJvdG90eXBlLmNsZWFyID0gaGFzaENsZWFyO1xuSGFzaC5wcm90b3R5cGVbJ2RlbGV0ZSddID0gaGFzaERlbGV0ZTtcbkhhc2gucHJvdG90eXBlLmdldCA9IGhhc2hHZXQ7XG5IYXNoLnByb3RvdHlwZS5oYXMgPSBoYXNoSGFzO1xuSGFzaC5wcm90b3R5cGUuc2V0ID0gaGFzaFNldDtcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGxpc3QgY2FjaGUgb2JqZWN0LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7QXJyYXl9IFtlbnRyaWVzXSBUaGUga2V5LXZhbHVlIHBhaXJzIHRvIGNhY2hlLlxuICovXG5mdW5jdGlvbiBMaXN0Q2FjaGUoZW50cmllcykge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IGVudHJpZXMgPT0gbnVsbCA/IDAgOiBlbnRyaWVzLmxlbmd0aDtcblxuICB0aGlzLmNsZWFyKCk7XG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdmFyIGVudHJ5ID0gZW50cmllc1tpbmRleF07XG4gICAgdGhpcy5zZXQoZW50cnlbMF0sIGVudHJ5WzFdKTtcbiAgfVxufVxuXG4vKipcbiAqIFJlbW92ZXMgYWxsIGtleS12YWx1ZSBlbnRyaWVzIGZyb20gdGhlIGxpc3QgY2FjaGUuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGNsZWFyXG4gKiBAbWVtYmVyT2YgTGlzdENhY2hlXG4gKi9cbmZ1bmN0aW9uIGxpc3RDYWNoZUNsZWFyKCkge1xuICB0aGlzLl9fZGF0YV9fID0gW107XG4gIHRoaXMuc2l6ZSA9IDA7XG59XG5cbi8qKlxuICogUmVtb3ZlcyBga2V5YCBhbmQgaXRzIHZhbHVlIGZyb20gdGhlIGxpc3QgY2FjaGUuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGRlbGV0ZVxuICogQG1lbWJlck9mIExpc3RDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byByZW1vdmUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGVudHJ5IHdhcyByZW1vdmVkLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGxpc3RDYWNoZURlbGV0ZShrZXkpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fLFxuICAgICAgaW5kZXggPSBhc3NvY0luZGV4T2YoZGF0YSwga2V5KTtcblxuICBpZiAoaW5kZXggPCAwKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHZhciBsYXN0SW5kZXggPSBkYXRhLmxlbmd0aCAtIDE7XG4gIGlmIChpbmRleCA9PSBsYXN0SW5kZXgpIHtcbiAgICBkYXRhLnBvcCgpO1xuICB9IGVsc2Uge1xuICAgIHNwbGljZS5jYWxsKGRhdGEsIGluZGV4LCAxKTtcbiAgfVxuICAtLXRoaXMuc2l6ZTtcbiAgcmV0dXJuIHRydWU7XG59XG5cbi8qKlxuICogR2V0cyB0aGUgbGlzdCBjYWNoZSB2YWx1ZSBmb3IgYGtleWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGdldFxuICogQG1lbWJlck9mIExpc3RDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBnZXQuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZW50cnkgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIGxpc3RDYWNoZUdldChrZXkpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fLFxuICAgICAgaW5kZXggPSBhc3NvY0luZGV4T2YoZGF0YSwga2V5KTtcblxuICByZXR1cm4gaW5kZXggPCAwID8gdW5kZWZpbmVkIDogZGF0YVtpbmRleF1bMV07XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgbGlzdCBjYWNoZSB2YWx1ZSBmb3IgYGtleWAgZXhpc3RzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBoYXNcbiAqIEBtZW1iZXJPZiBMaXN0Q2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgZW50cnkgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW4gZW50cnkgZm9yIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBsaXN0Q2FjaGVIYXMoa2V5KSB7XG4gIHJldHVybiBhc3NvY0luZGV4T2YodGhpcy5fX2RhdGFfXywga2V5KSA+IC0xO1xufVxuXG4vKipcbiAqIFNldHMgdGhlIGxpc3QgY2FjaGUgYGtleWAgdG8gYHZhbHVlYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgc2V0XG4gKiBAbWVtYmVyT2YgTGlzdENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHNldC5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNldC5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGxpc3QgY2FjaGUgaW5zdGFuY2UuXG4gKi9cbmZ1bmN0aW9uIGxpc3RDYWNoZVNldChrZXksIHZhbHVlKSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXyxcbiAgICAgIGluZGV4ID0gYXNzb2NJbmRleE9mKGRhdGEsIGtleSk7XG5cbiAgaWYgKGluZGV4IDwgMCkge1xuICAgICsrdGhpcy5zaXplO1xuICAgIGRhdGEucHVzaChba2V5LCB2YWx1ZV0pO1xuICB9IGVsc2Uge1xuICAgIGRhdGFbaW5kZXhdWzFdID0gdmFsdWU7XG4gIH1cbiAgcmV0dXJuIHRoaXM7XG59XG5cbi8vIEFkZCBtZXRob2RzIHRvIGBMaXN0Q2FjaGVgLlxuTGlzdENhY2hlLnByb3RvdHlwZS5jbGVhciA9IGxpc3RDYWNoZUNsZWFyO1xuTGlzdENhY2hlLnByb3RvdHlwZVsnZGVsZXRlJ10gPSBsaXN0Q2FjaGVEZWxldGU7XG5MaXN0Q2FjaGUucHJvdG90eXBlLmdldCA9IGxpc3RDYWNoZUdldDtcbkxpc3RDYWNoZS5wcm90b3R5cGUuaGFzID0gbGlzdENhY2hlSGFzO1xuTGlzdENhY2hlLnByb3RvdHlwZS5zZXQgPSBsaXN0Q2FjaGVTZXQ7XG5cbi8qKlxuICogQ3JlYXRlcyBhIG1hcCBjYWNoZSBvYmplY3QgdG8gc3RvcmUga2V5LXZhbHVlIHBhaXJzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7QXJyYXl9IFtlbnRyaWVzXSBUaGUga2V5LXZhbHVlIHBhaXJzIHRvIGNhY2hlLlxuICovXG5mdW5jdGlvbiBNYXBDYWNoZShlbnRyaWVzKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gZW50cmllcyA9PSBudWxsID8gMCA6IGVudHJpZXMubGVuZ3RoO1xuXG4gIHRoaXMuY2xlYXIoKTtcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIgZW50cnkgPSBlbnRyaWVzW2luZGV4XTtcbiAgICB0aGlzLnNldChlbnRyeVswXSwgZW50cnlbMV0pO1xuICB9XG59XG5cbi8qKlxuICogUmVtb3ZlcyBhbGwga2V5LXZhbHVlIGVudHJpZXMgZnJvbSB0aGUgbWFwLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBjbGVhclxuICogQG1lbWJlck9mIE1hcENhY2hlXG4gKi9cbmZ1bmN0aW9uIG1hcENhY2hlQ2xlYXIoKSB7XG4gIHRoaXMuc2l6ZSA9IDA7XG4gIHRoaXMuX19kYXRhX18gPSB7XG4gICAgJ2hhc2gnOiBuZXcgSGFzaCxcbiAgICAnbWFwJzogbmV3IChNYXAgfHwgTGlzdENhY2hlKSxcbiAgICAnc3RyaW5nJzogbmV3IEhhc2hcbiAgfTtcbn1cblxuLyoqXG4gKiBSZW1vdmVzIGBrZXlgIGFuZCBpdHMgdmFsdWUgZnJvbSB0aGUgbWFwLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBkZWxldGVcbiAqIEBtZW1iZXJPZiBNYXBDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byByZW1vdmUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGVudHJ5IHdhcyByZW1vdmVkLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIG1hcENhY2hlRGVsZXRlKGtleSkge1xuICB2YXIgcmVzdWx0ID0gZ2V0TWFwRGF0YSh0aGlzLCBrZXkpWydkZWxldGUnXShrZXkpO1xuICB0aGlzLnNpemUgLT0gcmVzdWx0ID8gMSA6IDA7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogR2V0cyB0aGUgbWFwIHZhbHVlIGZvciBga2V5YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZ2V0XG4gKiBAbWVtYmVyT2YgTWFwQ2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gZ2V0LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGVudHJ5IHZhbHVlLlxuICovXG5mdW5jdGlvbiBtYXBDYWNoZUdldChrZXkpIHtcbiAgcmV0dXJuIGdldE1hcERhdGEodGhpcywga2V5KS5nZXQoa2V5KTtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgYSBtYXAgdmFsdWUgZm9yIGBrZXlgIGV4aXN0cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgaGFzXG4gKiBAbWVtYmVyT2YgTWFwQ2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgZW50cnkgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW4gZW50cnkgZm9yIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBtYXBDYWNoZUhhcyhrZXkpIHtcbiAgcmV0dXJuIGdldE1hcERhdGEodGhpcywga2V5KS5oYXMoa2V5KTtcbn1cblxuLyoqXG4gKiBTZXRzIHRoZSBtYXAgYGtleWAgdG8gYHZhbHVlYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgc2V0XG4gKiBAbWVtYmVyT2YgTWFwQ2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gc2V0LlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2V0LlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbWFwIGNhY2hlIGluc3RhbmNlLlxuICovXG5mdW5jdGlvbiBtYXBDYWNoZVNldChrZXksIHZhbHVlKSB7XG4gIHZhciBkYXRhID0gZ2V0TWFwRGF0YSh0aGlzLCBrZXkpLFxuICAgICAgc2l6ZSA9IGRhdGEuc2l6ZTtcblxuICBkYXRhLnNldChrZXksIHZhbHVlKTtcbiAgdGhpcy5zaXplICs9IGRhdGEuc2l6ZSA9PSBzaXplID8gMCA6IDE7XG4gIHJldHVybiB0aGlzO1xufVxuXG4vLyBBZGQgbWV0aG9kcyB0byBgTWFwQ2FjaGVgLlxuTWFwQ2FjaGUucHJvdG90eXBlLmNsZWFyID0gbWFwQ2FjaGVDbGVhcjtcbk1hcENhY2hlLnByb3RvdHlwZVsnZGVsZXRlJ10gPSBtYXBDYWNoZURlbGV0ZTtcbk1hcENhY2hlLnByb3RvdHlwZS5nZXQgPSBtYXBDYWNoZUdldDtcbk1hcENhY2hlLnByb3RvdHlwZS5oYXMgPSBtYXBDYWNoZUhhcztcbk1hcENhY2hlLnByb3RvdHlwZS5zZXQgPSBtYXBDYWNoZVNldDtcblxuLyoqXG4gKlxuICogQ3JlYXRlcyBhbiBhcnJheSBjYWNoZSBvYmplY3QgdG8gc3RvcmUgdW5pcXVlIHZhbHVlcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge0FycmF5fSBbdmFsdWVzXSBUaGUgdmFsdWVzIHRvIGNhY2hlLlxuICovXG5mdW5jdGlvbiBTZXRDYWNoZSh2YWx1ZXMpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSB2YWx1ZXMgPT0gbnVsbCA/IDAgOiB2YWx1ZXMubGVuZ3RoO1xuXG4gIHRoaXMuX19kYXRhX18gPSBuZXcgTWFwQ2FjaGU7XG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdGhpcy5hZGQodmFsdWVzW2luZGV4XSk7XG4gIH1cbn1cblxuLyoqXG4gKiBBZGRzIGB2YWx1ZWAgdG8gdGhlIGFycmF5IGNhY2hlLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBhZGRcbiAqIEBtZW1iZXJPZiBTZXRDYWNoZVxuICogQGFsaWFzIHB1c2hcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNhY2hlLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgY2FjaGUgaW5zdGFuY2UuXG4gKi9cbmZ1bmN0aW9uIHNldENhY2hlQWRkKHZhbHVlKSB7XG4gIHRoaXMuX19kYXRhX18uc2V0KHZhbHVlLCBIQVNIX1VOREVGSU5FRCk7XG4gIHJldHVybiB0aGlzO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGluIHRoZSBhcnJheSBjYWNoZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgaGFzXG4gKiBAbWVtYmVyT2YgU2V0Q2FjaGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNlYXJjaCBmb3IuXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGZvdW5kLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIHNldENhY2hlSGFzKHZhbHVlKSB7XG4gIHJldHVybiB0aGlzLl9fZGF0YV9fLmhhcyh2YWx1ZSk7XG59XG5cbi8vIEFkZCBtZXRob2RzIHRvIGBTZXRDYWNoZWAuXG5TZXRDYWNoZS5wcm90b3R5cGUuYWRkID0gU2V0Q2FjaGUucHJvdG90eXBlLnB1c2ggPSBzZXRDYWNoZUFkZDtcblNldENhY2hlLnByb3RvdHlwZS5oYXMgPSBzZXRDYWNoZUhhcztcblxuLyoqXG4gKiBDcmVhdGVzIGEgc3RhY2sgY2FjaGUgb2JqZWN0IHRvIHN0b3JlIGtleS12YWx1ZSBwYWlycy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge0FycmF5fSBbZW50cmllc10gVGhlIGtleS12YWx1ZSBwYWlycyB0byBjYWNoZS5cbiAqL1xuZnVuY3Rpb24gU3RhY2soZW50cmllcykge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX18gPSBuZXcgTGlzdENhY2hlKGVudHJpZXMpO1xuICB0aGlzLnNpemUgPSBkYXRhLnNpemU7XG59XG5cbi8qKlxuICogUmVtb3ZlcyBhbGwga2V5LXZhbHVlIGVudHJpZXMgZnJvbSB0aGUgc3RhY2suXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGNsZWFyXG4gKiBAbWVtYmVyT2YgU3RhY2tcbiAqL1xuZnVuY3Rpb24gc3RhY2tDbGVhcigpIHtcbiAgdGhpcy5fX2RhdGFfXyA9IG5ldyBMaXN0Q2FjaGU7XG4gIHRoaXMuc2l6ZSA9IDA7XG59XG5cbi8qKlxuICogUmVtb3ZlcyBga2V5YCBhbmQgaXRzIHZhbHVlIGZyb20gdGhlIHN0YWNrLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBkZWxldGVcbiAqIEBtZW1iZXJPZiBTdGFja1xuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byByZW1vdmUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGVudHJ5IHdhcyByZW1vdmVkLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIHN0YWNrRGVsZXRlKGtleSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX18sXG4gICAgICByZXN1bHQgPSBkYXRhWydkZWxldGUnXShrZXkpO1xuXG4gIHRoaXMuc2l6ZSA9IGRhdGEuc2l6ZTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBzdGFjayB2YWx1ZSBmb3IgYGtleWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGdldFxuICogQG1lbWJlck9mIFN0YWNrXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBlbnRyeSB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gc3RhY2tHZXQoa2V5KSB7XG4gIHJldHVybiB0aGlzLl9fZGF0YV9fLmdldChrZXkpO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBhIHN0YWNrIHZhbHVlIGZvciBga2V5YCBleGlzdHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGhhc1xuICogQG1lbWJlck9mIFN0YWNrXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIGVudHJ5IHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGFuIGVudHJ5IGZvciBga2V5YCBleGlzdHMsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gc3RhY2tIYXMoa2V5KSB7XG4gIHJldHVybiB0aGlzLl9fZGF0YV9fLmhhcyhrZXkpO1xufVxuXG4vKipcbiAqIFNldHMgdGhlIHN0YWNrIGBrZXlgIHRvIGB2YWx1ZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIHNldFxuICogQG1lbWJlck9mIFN0YWNrXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHNldC5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNldC5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIHN0YWNrIGNhY2hlIGluc3RhbmNlLlxuICovXG5mdW5jdGlvbiBzdGFja1NldChrZXksIHZhbHVlKSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXztcbiAgaWYgKGRhdGEgaW5zdGFuY2VvZiBMaXN0Q2FjaGUpIHtcbiAgICB2YXIgcGFpcnMgPSBkYXRhLl9fZGF0YV9fO1xuICAgIGlmICghTWFwIHx8IChwYWlycy5sZW5ndGggPCBMQVJHRV9BUlJBWV9TSVpFIC0gMSkpIHtcbiAgICAgIHBhaXJzLnB1c2goW2tleSwgdmFsdWVdKTtcbiAgICAgIHRoaXMuc2l6ZSA9ICsrZGF0YS5zaXplO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIGRhdGEgPSB0aGlzLl9fZGF0YV9fID0gbmV3IE1hcENhY2hlKHBhaXJzKTtcbiAgfVxuICBkYXRhLnNldChrZXksIHZhbHVlKTtcbiAgdGhpcy5zaXplID0gZGF0YS5zaXplO1xuICByZXR1cm4gdGhpcztcbn1cblxuLy8gQWRkIG1ldGhvZHMgdG8gYFN0YWNrYC5cblN0YWNrLnByb3RvdHlwZS5jbGVhciA9IHN0YWNrQ2xlYXI7XG5TdGFjay5wcm90b3R5cGVbJ2RlbGV0ZSddID0gc3RhY2tEZWxldGU7XG5TdGFjay5wcm90b3R5cGUuZ2V0ID0gc3RhY2tHZXQ7XG5TdGFjay5wcm90b3R5cGUuaGFzID0gc3RhY2tIYXM7XG5TdGFjay5wcm90b3R5cGUuc2V0ID0gc3RhY2tTZXQ7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBvZiB0aGUgZW51bWVyYWJsZSBwcm9wZXJ0eSBuYW1lcyBvZiB0aGUgYXJyYXktbGlrZSBgdmFsdWVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBxdWVyeS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gaW5oZXJpdGVkIFNwZWNpZnkgcmV0dXJuaW5nIGluaGVyaXRlZCBwcm9wZXJ0eSBuYW1lcy5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMuXG4gKi9cbmZ1bmN0aW9uIGFycmF5TGlrZUtleXModmFsdWUsIGluaGVyaXRlZCkge1xuICB2YXIgaXNBcnIgPSBpc0FycmF5KHZhbHVlKSxcbiAgICAgIGlzQXJnID0gIWlzQXJyICYmIGlzQXJndW1lbnRzKHZhbHVlKSxcbiAgICAgIGlzQnVmZiA9ICFpc0FyciAmJiAhaXNBcmcgJiYgaXNCdWZmZXIodmFsdWUpLFxuICAgICAgaXNUeXBlID0gIWlzQXJyICYmICFpc0FyZyAmJiAhaXNCdWZmICYmIGlzVHlwZWRBcnJheSh2YWx1ZSksXG4gICAgICBza2lwSW5kZXhlcyA9IGlzQXJyIHx8IGlzQXJnIHx8IGlzQnVmZiB8fCBpc1R5cGUsXG4gICAgICByZXN1bHQgPSBza2lwSW5kZXhlcyA/IGJhc2VUaW1lcyh2YWx1ZS5sZW5ndGgsIFN0cmluZykgOiBbXSxcbiAgICAgIGxlbmd0aCA9IHJlc3VsdC5sZW5ndGg7XG5cbiAgZm9yICh2YXIga2V5IGluIHZhbHVlKSB7XG4gICAgaWYgKChpbmhlcml0ZWQgfHwgaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSwga2V5KSkgJiZcbiAgICAgICAgIShza2lwSW5kZXhlcyAmJiAoXG4gICAgICAgICAgIC8vIFNhZmFyaSA5IGhhcyBlbnVtZXJhYmxlIGBhcmd1bWVudHMubGVuZ3RoYCBpbiBzdHJpY3QgbW9kZS5cbiAgICAgICAgICAga2V5ID09ICdsZW5ndGgnIHx8XG4gICAgICAgICAgIC8vIE5vZGUuanMgMC4xMCBoYXMgZW51bWVyYWJsZSBub24taW5kZXggcHJvcGVydGllcyBvbiBidWZmZXJzLlxuICAgICAgICAgICAoaXNCdWZmICYmIChrZXkgPT0gJ29mZnNldCcgfHwga2V5ID09ICdwYXJlbnQnKSkgfHxcbiAgICAgICAgICAgLy8gUGhhbnRvbUpTIDIgaGFzIGVudW1lcmFibGUgbm9uLWluZGV4IHByb3BlcnRpZXMgb24gdHlwZWQgYXJyYXlzLlxuICAgICAgICAgICAoaXNUeXBlICYmIChrZXkgPT0gJ2J1ZmZlcicgfHwga2V5ID09ICdieXRlTGVuZ3RoJyB8fCBrZXkgPT0gJ2J5dGVPZmZzZXQnKSkgfHxcbiAgICAgICAgICAgLy8gU2tpcCBpbmRleCBwcm9wZXJ0aWVzLlxuICAgICAgICAgICBpc0luZGV4KGtleSwgbGVuZ3RoKVxuICAgICAgICApKSkge1xuICAgICAgcmVzdWx0LnB1c2goa2V5KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBpbmRleCBhdCB3aGljaCB0aGUgYGtleWAgaXMgZm91bmQgaW4gYGFycmF5YCBvZiBrZXktdmFsdWUgcGFpcnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICogQHBhcmFtIHsqfSBrZXkgVGhlIGtleSB0byBzZWFyY2ggZm9yLlxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIG1hdGNoZWQgdmFsdWUsIGVsc2UgYC0xYC5cbiAqL1xuZnVuY3Rpb24gYXNzb2NJbmRleE9mKGFycmF5LCBrZXkpIHtcbiAgdmFyIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcbiAgd2hpbGUgKGxlbmd0aC0tKSB7XG4gICAgaWYgKGVxKGFycmF5W2xlbmd0aF1bMF0sIGtleSkpIHtcbiAgICAgIHJldHVybiBsZW5ndGg7XG4gICAgfVxuICB9XG4gIHJldHVybiAtMTtcbn1cblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgZ2V0QWxsS2V5c2AgYW5kIGBnZXRBbGxLZXlzSW5gIHdoaWNoIHVzZXNcbiAqIGBrZXlzRnVuY2AgYW5kIGBzeW1ib2xzRnVuY2AgdG8gZ2V0IHRoZSBlbnVtZXJhYmxlIHByb3BlcnR5IG5hbWVzIGFuZFxuICogc3ltYm9scyBvZiBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtGdW5jdGlvbn0ga2V5c0Z1bmMgVGhlIGZ1bmN0aW9uIHRvIGdldCB0aGUga2V5cyBvZiBgb2JqZWN0YC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHN5bWJvbHNGdW5jIFRoZSBmdW5jdGlvbiB0byBnZXQgdGhlIHN5bWJvbHMgb2YgYG9iamVjdGAuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzIGFuZCBzeW1ib2xzLlxuICovXG5mdW5jdGlvbiBiYXNlR2V0QWxsS2V5cyhvYmplY3QsIGtleXNGdW5jLCBzeW1ib2xzRnVuYykge1xuICB2YXIgcmVzdWx0ID0ga2V5c0Z1bmMob2JqZWN0KTtcbiAgcmV0dXJuIGlzQXJyYXkob2JqZWN0KSA/IHJlc3VsdCA6IGFycmF5UHVzaChyZXN1bHQsIHN5bWJvbHNGdW5jKG9iamVjdCkpO1xufVxuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBnZXRUYWdgIHdpdGhvdXQgZmFsbGJhY2tzIGZvciBidWdneSBlbnZpcm9ubWVudHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHF1ZXJ5LlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgYHRvU3RyaW5nVGFnYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUdldFRhZyh2YWx1ZSkge1xuICBpZiAodmFsdWUgPT0gbnVsbCkge1xuICAgIHJldHVybiB2YWx1ZSA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkVGFnIDogbnVsbFRhZztcbiAgfVxuICByZXR1cm4gKHN5bVRvU3RyaW5nVGFnICYmIHN5bVRvU3RyaW5nVGFnIGluIE9iamVjdCh2YWx1ZSkpXG4gICAgPyBnZXRSYXdUYWcodmFsdWUpXG4gICAgOiBvYmplY3RUb1N0cmluZyh2YWx1ZSk7XG59XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXNBcmd1bWVudHNgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIGBhcmd1bWVudHNgIG9iamVjdCxcbiAqL1xuZnVuY3Rpb24gYmFzZUlzQXJndW1lbnRzKHZhbHVlKSB7XG4gIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmIGJhc2VHZXRUYWcodmFsdWUpID09IGFyZ3NUYWc7XG59XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXNFcXVhbGAgd2hpY2ggc3VwcG9ydHMgcGFydGlhbCBjb21wYXJpc29uc1xuICogYW5kIHRyYWNrcyB0cmF2ZXJzZWQgb2JqZWN0cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7Kn0gb3RoZXIgVGhlIG90aGVyIHZhbHVlIHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGJpdG1hc2sgVGhlIGJpdG1hc2sgZmxhZ3MuXG4gKiAgMSAtIFVub3JkZXJlZCBjb21wYXJpc29uXG4gKiAgMiAtIFBhcnRpYWwgY29tcGFyaXNvblxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2N1c3RvbWl6ZXJdIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgY29tcGFyaXNvbnMuXG4gKiBAcGFyYW0ge09iamVjdH0gW3N0YWNrXSBUcmFja3MgdHJhdmVyc2VkIGB2YWx1ZWAgYW5kIGBvdGhlcmAgb2JqZWN0cy5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgdmFsdWVzIGFyZSBlcXVpdmFsZW50LCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VJc0VxdWFsKHZhbHVlLCBvdGhlciwgYml0bWFzaywgY3VzdG9taXplciwgc3RhY2spIHtcbiAgaWYgKHZhbHVlID09PSBvdGhlcikge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGlmICh2YWx1ZSA9PSBudWxsIHx8IG90aGVyID09IG51bGwgfHwgKCFpc09iamVjdExpa2UodmFsdWUpICYmICFpc09iamVjdExpa2Uob3RoZXIpKSkge1xuICAgIHJldHVybiB2YWx1ZSAhPT0gdmFsdWUgJiYgb3RoZXIgIT09IG90aGVyO1xuICB9XG4gIHJldHVybiBiYXNlSXNFcXVhbERlZXAodmFsdWUsIG90aGVyLCBiaXRtYXNrLCBjdXN0b21pemVyLCBiYXNlSXNFcXVhbCwgc3RhY2spO1xufVxuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZUlzRXF1YWxgIGZvciBhcnJheXMgYW5kIG9iamVjdHMgd2hpY2ggcGVyZm9ybXNcbiAqIGRlZXAgY29tcGFyaXNvbnMgYW5kIHRyYWNrcyB0cmF2ZXJzZWQgb2JqZWN0cyBlbmFibGluZyBvYmplY3RzIHdpdGggY2lyY3VsYXJcbiAqIHJlZmVyZW5jZXMgdG8gYmUgY29tcGFyZWQuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBjb21wYXJlLlxuICogQHBhcmFtIHtPYmplY3R9IG90aGVyIFRoZSBvdGhlciBvYmplY3QgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLiBTZWUgYGJhc2VJc0VxdWFsYCBmb3IgbW9yZSBkZXRhaWxzLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gY3VzdG9taXplciBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNvbXBhcmlzb25zLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZXF1YWxGdW5jIFRoZSBmdW5jdGlvbiB0byBkZXRlcm1pbmUgZXF1aXZhbGVudHMgb2YgdmFsdWVzLlxuICogQHBhcmFtIHtPYmplY3R9IFtzdGFja10gVHJhY2tzIHRyYXZlcnNlZCBgb2JqZWN0YCBhbmQgYG90aGVyYCBvYmplY3RzLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBvYmplY3RzIGFyZSBlcXVpdmFsZW50LCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VJc0VxdWFsRGVlcChvYmplY3QsIG90aGVyLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKSB7XG4gIHZhciBvYmpJc0FyciA9IGlzQXJyYXkob2JqZWN0KSxcbiAgICAgIG90aElzQXJyID0gaXNBcnJheShvdGhlciksXG4gICAgICBvYmpUYWcgPSBvYmpJc0FyciA/IGFycmF5VGFnIDogZ2V0VGFnKG9iamVjdCksXG4gICAgICBvdGhUYWcgPSBvdGhJc0FyciA/IGFycmF5VGFnIDogZ2V0VGFnKG90aGVyKTtcblxuICBvYmpUYWcgPSBvYmpUYWcgPT0gYXJnc1RhZyA/IG9iamVjdFRhZyA6IG9ialRhZztcbiAgb3RoVGFnID0gb3RoVGFnID09IGFyZ3NUYWcgPyBvYmplY3RUYWcgOiBvdGhUYWc7XG5cbiAgdmFyIG9iaklzT2JqID0gb2JqVGFnID09IG9iamVjdFRhZyxcbiAgICAgIG90aElzT2JqID0gb3RoVGFnID09IG9iamVjdFRhZyxcbiAgICAgIGlzU2FtZVRhZyA9IG9ialRhZyA9PSBvdGhUYWc7XG5cbiAgaWYgKGlzU2FtZVRhZyAmJiBpc0J1ZmZlcihvYmplY3QpKSB7XG4gICAgaWYgKCFpc0J1ZmZlcihvdGhlcikpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgb2JqSXNBcnIgPSB0cnVlO1xuICAgIG9iaklzT2JqID0gZmFsc2U7XG4gIH1cbiAgaWYgKGlzU2FtZVRhZyAmJiAhb2JqSXNPYmopIHtcbiAgICBzdGFjayB8fCAoc3RhY2sgPSBuZXcgU3RhY2spO1xuICAgIHJldHVybiAob2JqSXNBcnIgfHwgaXNUeXBlZEFycmF5KG9iamVjdCkpXG4gICAgICA/IGVxdWFsQXJyYXlzKG9iamVjdCwgb3RoZXIsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGVxdWFsRnVuYywgc3RhY2spXG4gICAgICA6IGVxdWFsQnlUYWcob2JqZWN0LCBvdGhlciwgb2JqVGFnLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKTtcbiAgfVxuICBpZiAoIShiaXRtYXNrICYgQ09NUEFSRV9QQVJUSUFMX0ZMQUcpKSB7XG4gICAgdmFyIG9iaklzV3JhcHBlZCA9IG9iaklzT2JqICYmIGhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCAnX193cmFwcGVkX18nKSxcbiAgICAgICAgb3RoSXNXcmFwcGVkID0gb3RoSXNPYmogJiYgaGFzT3duUHJvcGVydHkuY2FsbChvdGhlciwgJ19fd3JhcHBlZF9fJyk7XG5cbiAgICBpZiAob2JqSXNXcmFwcGVkIHx8IG90aElzV3JhcHBlZCkge1xuICAgICAgdmFyIG9ialVud3JhcHBlZCA9IG9iaklzV3JhcHBlZCA/IG9iamVjdC52YWx1ZSgpIDogb2JqZWN0LFxuICAgICAgICAgIG90aFVud3JhcHBlZCA9IG90aElzV3JhcHBlZCA/IG90aGVyLnZhbHVlKCkgOiBvdGhlcjtcblxuICAgICAgc3RhY2sgfHwgKHN0YWNrID0gbmV3IFN0YWNrKTtcbiAgICAgIHJldHVybiBlcXVhbEZ1bmMob2JqVW53cmFwcGVkLCBvdGhVbndyYXBwZWQsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIHN0YWNrKTtcbiAgICB9XG4gIH1cbiAgaWYgKCFpc1NhbWVUYWcpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgc3RhY2sgfHwgKHN0YWNrID0gbmV3IFN0YWNrKTtcbiAgcmV0dXJuIGVxdWFsT2JqZWN0cyhvYmplY3QsIG90aGVyLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKTtcbn1cblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc05hdGl2ZWAgd2l0aG91dCBiYWQgc2hpbSBjaGVja3MuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBuYXRpdmUgZnVuY3Rpb24sXG4gKiAgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBiYXNlSXNOYXRpdmUodmFsdWUpIHtcbiAgaWYgKCFpc09iamVjdCh2YWx1ZSkgfHwgaXNNYXNrZWQodmFsdWUpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHZhciBwYXR0ZXJuID0gaXNGdW5jdGlvbih2YWx1ZSkgPyByZUlzTmF0aXZlIDogcmVJc0hvc3RDdG9yO1xuICByZXR1cm4gcGF0dGVybi50ZXN0KHRvU291cmNlKHZhbHVlKSk7XG59XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXNUeXBlZEFycmF5YCB3aXRob3V0IE5vZGUuanMgb3B0aW1pemF0aW9ucy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHR5cGVkIGFycmF5LCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VJc1R5cGVkQXJyYXkodmFsdWUpIHtcbiAgcmV0dXJuIGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiZcbiAgICBpc0xlbmd0aCh2YWx1ZS5sZW5ndGgpICYmICEhdHlwZWRBcnJheVRhZ3NbYmFzZUdldFRhZyh2YWx1ZSldO1xufVxuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmtleXNgIHdoaWNoIGRvZXNuJ3QgdHJlYXQgc3BhcnNlIGFycmF5cyBhcyBkZW5zZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cbiAqL1xuZnVuY3Rpb24gYmFzZUtleXMob2JqZWN0KSB7XG4gIGlmICghaXNQcm90b3R5cGUob2JqZWN0KSkge1xuICAgIHJldHVybiBuYXRpdmVLZXlzKG9iamVjdCk7XG4gIH1cbiAgdmFyIHJlc3VsdCA9IFtdO1xuICBmb3IgKHZhciBrZXkgaW4gT2JqZWN0KG9iamVjdCkpIHtcbiAgICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIGtleSkgJiYga2V5ICE9ICdjb25zdHJ1Y3RvcicpIHtcbiAgICAgIHJlc3VsdC5wdXNoKGtleSk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlSXNFcXVhbERlZXBgIGZvciBhcnJheXMgd2l0aCBzdXBwb3J0IGZvclxuICogcGFydGlhbCBkZWVwIGNvbXBhcmlzb25zLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7QXJyYXl9IG90aGVyIFRoZSBvdGhlciBhcnJheSB0byBjb21wYXJlLlxuICogQHBhcmFtIHtudW1iZXJ9IGJpdG1hc2sgVGhlIGJpdG1hc2sgZmxhZ3MuIFNlZSBgYmFzZUlzRXF1YWxgIGZvciBtb3JlIGRldGFpbHMuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjdXN0b21pemVyIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgY29tcGFyaXNvbnMuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBlcXVhbEZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGRldGVybWluZSBlcXVpdmFsZW50cyBvZiB2YWx1ZXMuXG4gKiBAcGFyYW0ge09iamVjdH0gc3RhY2sgVHJhY2tzIHRyYXZlcnNlZCBgYXJyYXlgIGFuZCBgb3RoZXJgIG9iamVjdHMuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGFycmF5cyBhcmUgZXF1aXZhbGVudCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBlcXVhbEFycmF5cyhhcnJheSwgb3RoZXIsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGVxdWFsRnVuYywgc3RhY2spIHtcbiAgdmFyIGlzUGFydGlhbCA9IGJpdG1hc2sgJiBDT01QQVJFX1BBUlRJQUxfRkxBRyxcbiAgICAgIGFyckxlbmd0aCA9IGFycmF5Lmxlbmd0aCxcbiAgICAgIG90aExlbmd0aCA9IG90aGVyLmxlbmd0aDtcblxuICBpZiAoYXJyTGVuZ3RoICE9IG90aExlbmd0aCAmJiAhKGlzUGFydGlhbCAmJiBvdGhMZW5ndGggPiBhcnJMZW5ndGgpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIC8vIEFzc3VtZSBjeWNsaWMgdmFsdWVzIGFyZSBlcXVhbC5cbiAgdmFyIHN0YWNrZWQgPSBzdGFjay5nZXQoYXJyYXkpO1xuICBpZiAoc3RhY2tlZCAmJiBzdGFjay5nZXQob3RoZXIpKSB7XG4gICAgcmV0dXJuIHN0YWNrZWQgPT0gb3RoZXI7XG4gIH1cbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICByZXN1bHQgPSB0cnVlLFxuICAgICAgc2VlbiA9IChiaXRtYXNrICYgQ09NUEFSRV9VTk9SREVSRURfRkxBRykgPyBuZXcgU2V0Q2FjaGUgOiB1bmRlZmluZWQ7XG5cbiAgc3RhY2suc2V0KGFycmF5LCBvdGhlcik7XG4gIHN0YWNrLnNldChvdGhlciwgYXJyYXkpO1xuXG4gIC8vIElnbm9yZSBub24taW5kZXggcHJvcGVydGllcy5cbiAgd2hpbGUgKCsraW5kZXggPCBhcnJMZW5ndGgpIHtcbiAgICB2YXIgYXJyVmFsdWUgPSBhcnJheVtpbmRleF0sXG4gICAgICAgIG90aFZhbHVlID0gb3RoZXJbaW5kZXhdO1xuXG4gICAgaWYgKGN1c3RvbWl6ZXIpIHtcbiAgICAgIHZhciBjb21wYXJlZCA9IGlzUGFydGlhbFxuICAgICAgICA/IGN1c3RvbWl6ZXIob3RoVmFsdWUsIGFyclZhbHVlLCBpbmRleCwgb3RoZXIsIGFycmF5LCBzdGFjaylcbiAgICAgICAgOiBjdXN0b21pemVyKGFyclZhbHVlLCBvdGhWYWx1ZSwgaW5kZXgsIGFycmF5LCBvdGhlciwgc3RhY2spO1xuICAgIH1cbiAgICBpZiAoY29tcGFyZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKGNvbXBhcmVkKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgcmVzdWx0ID0gZmFsc2U7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgLy8gUmVjdXJzaXZlbHkgY29tcGFyZSBhcnJheXMgKHN1c2NlcHRpYmxlIHRvIGNhbGwgc3RhY2sgbGltaXRzKS5cbiAgICBpZiAoc2Vlbikge1xuICAgICAgaWYgKCFhcnJheVNvbWUob3RoZXIsIGZ1bmN0aW9uKG90aFZhbHVlLCBvdGhJbmRleCkge1xuICAgICAgICAgICAgaWYgKCFjYWNoZUhhcyhzZWVuLCBvdGhJbmRleCkgJiZcbiAgICAgICAgICAgICAgICAoYXJyVmFsdWUgPT09IG90aFZhbHVlIHx8IGVxdWFsRnVuYyhhcnJWYWx1ZSwgb3RoVmFsdWUsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIHN0YWNrKSkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHNlZW4ucHVzaChvdGhJbmRleCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkpIHtcbiAgICAgICAgcmVzdWx0ID0gZmFsc2U7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoIShcbiAgICAgICAgICBhcnJWYWx1ZSA9PT0gb3RoVmFsdWUgfHxcbiAgICAgICAgICAgIGVxdWFsRnVuYyhhcnJWYWx1ZSwgb3RoVmFsdWUsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIHN0YWNrKVxuICAgICAgICApKSB7XG4gICAgICByZXN1bHQgPSBmYWxzZTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICBzdGFja1snZGVsZXRlJ10oYXJyYXkpO1xuICBzdGFja1snZGVsZXRlJ10ob3RoZXIpO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZUlzRXF1YWxEZWVwYCBmb3IgY29tcGFyaW5nIG9iamVjdHMgb2ZcbiAqIHRoZSBzYW1lIGB0b1N0cmluZ1RhZ2AuXG4gKlxuICogKipOb3RlOioqIFRoaXMgZnVuY3Rpb24gb25seSBzdXBwb3J0cyBjb21wYXJpbmcgdmFsdWVzIHdpdGggdGFncyBvZlxuICogYEJvb2xlYW5gLCBgRGF0ZWAsIGBFcnJvcmAsIGBOdW1iZXJgLCBgUmVnRXhwYCwgb3IgYFN0cmluZ2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBjb21wYXJlLlxuICogQHBhcmFtIHtPYmplY3R9IG90aGVyIFRoZSBvdGhlciBvYmplY3QgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSB0YWcgVGhlIGB0b1N0cmluZ1RhZ2Agb2YgdGhlIG9iamVjdHMgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLiBTZWUgYGJhc2VJc0VxdWFsYCBmb3IgbW9yZSBkZXRhaWxzLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gY3VzdG9taXplciBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNvbXBhcmlzb25zLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZXF1YWxGdW5jIFRoZSBmdW5jdGlvbiB0byBkZXRlcm1pbmUgZXF1aXZhbGVudHMgb2YgdmFsdWVzLlxuICogQHBhcmFtIHtPYmplY3R9IHN0YWNrIFRyYWNrcyB0cmF2ZXJzZWQgYG9iamVjdGAgYW5kIGBvdGhlcmAgb2JqZWN0cy5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgb2JqZWN0cyBhcmUgZXF1aXZhbGVudCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBlcXVhbEJ5VGFnKG9iamVjdCwgb3RoZXIsIHRhZywgYml0bWFzaywgY3VzdG9taXplciwgZXF1YWxGdW5jLCBzdGFjaykge1xuICBzd2l0Y2ggKHRhZykge1xuICAgIGNhc2UgZGF0YVZpZXdUYWc6XG4gICAgICBpZiAoKG9iamVjdC5ieXRlTGVuZ3RoICE9IG90aGVyLmJ5dGVMZW5ndGgpIHx8XG4gICAgICAgICAgKG9iamVjdC5ieXRlT2Zmc2V0ICE9IG90aGVyLmJ5dGVPZmZzZXQpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIG9iamVjdCA9IG9iamVjdC5idWZmZXI7XG4gICAgICBvdGhlciA9IG90aGVyLmJ1ZmZlcjtcblxuICAgIGNhc2UgYXJyYXlCdWZmZXJUYWc6XG4gICAgICBpZiAoKG9iamVjdC5ieXRlTGVuZ3RoICE9IG90aGVyLmJ5dGVMZW5ndGgpIHx8XG4gICAgICAgICAgIWVxdWFsRnVuYyhuZXcgVWludDhBcnJheShvYmplY3QpLCBuZXcgVWludDhBcnJheShvdGhlcikpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuXG4gICAgY2FzZSBib29sVGFnOlxuICAgIGNhc2UgZGF0ZVRhZzpcbiAgICBjYXNlIG51bWJlclRhZzpcbiAgICAgIC8vIENvZXJjZSBib29sZWFucyB0byBgMWAgb3IgYDBgIGFuZCBkYXRlcyB0byBtaWxsaXNlY29uZHMuXG4gICAgICAvLyBJbnZhbGlkIGRhdGVzIGFyZSBjb2VyY2VkIHRvIGBOYU5gLlxuICAgICAgcmV0dXJuIGVxKCtvYmplY3QsICtvdGhlcik7XG5cbiAgICBjYXNlIGVycm9yVGFnOlxuICAgICAgcmV0dXJuIG9iamVjdC5uYW1lID09IG90aGVyLm5hbWUgJiYgb2JqZWN0Lm1lc3NhZ2UgPT0gb3RoZXIubWVzc2FnZTtcblxuICAgIGNhc2UgcmVnZXhwVGFnOlxuICAgIGNhc2Ugc3RyaW5nVGFnOlxuICAgICAgLy8gQ29lcmNlIHJlZ2V4ZXMgdG8gc3RyaW5ncyBhbmQgdHJlYXQgc3RyaW5ncywgcHJpbWl0aXZlcyBhbmQgb2JqZWN0cyxcbiAgICAgIC8vIGFzIGVxdWFsLiBTZWUgaHR0cDovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXJlZ2V4cC5wcm90b3R5cGUudG9zdHJpbmdcbiAgICAgIC8vIGZvciBtb3JlIGRldGFpbHMuXG4gICAgICByZXR1cm4gb2JqZWN0ID09IChvdGhlciArICcnKTtcblxuICAgIGNhc2UgbWFwVGFnOlxuICAgICAgdmFyIGNvbnZlcnQgPSBtYXBUb0FycmF5O1xuXG4gICAgY2FzZSBzZXRUYWc6XG4gICAgICB2YXIgaXNQYXJ0aWFsID0gYml0bWFzayAmIENPTVBBUkVfUEFSVElBTF9GTEFHO1xuICAgICAgY29udmVydCB8fCAoY29udmVydCA9IHNldFRvQXJyYXkpO1xuXG4gICAgICBpZiAob2JqZWN0LnNpemUgIT0gb3RoZXIuc2l6ZSAmJiAhaXNQYXJ0aWFsKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIC8vIEFzc3VtZSBjeWNsaWMgdmFsdWVzIGFyZSBlcXVhbC5cbiAgICAgIHZhciBzdGFja2VkID0gc3RhY2suZ2V0KG9iamVjdCk7XG4gICAgICBpZiAoc3RhY2tlZCkge1xuICAgICAgICByZXR1cm4gc3RhY2tlZCA9PSBvdGhlcjtcbiAgICAgIH1cbiAgICAgIGJpdG1hc2sgfD0gQ09NUEFSRV9VTk9SREVSRURfRkxBRztcblxuICAgICAgLy8gUmVjdXJzaXZlbHkgY29tcGFyZSBvYmplY3RzIChzdXNjZXB0aWJsZSB0byBjYWxsIHN0YWNrIGxpbWl0cykuXG4gICAgICBzdGFjay5zZXQob2JqZWN0LCBvdGhlcik7XG4gICAgICB2YXIgcmVzdWx0ID0gZXF1YWxBcnJheXMoY29udmVydChvYmplY3QpLCBjb252ZXJ0KG90aGVyKSwgYml0bWFzaywgY3VzdG9taXplciwgZXF1YWxGdW5jLCBzdGFjayk7XG4gICAgICBzdGFja1snZGVsZXRlJ10ob2JqZWN0KTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG5cbiAgICBjYXNlIHN5bWJvbFRhZzpcbiAgICAgIGlmIChzeW1ib2xWYWx1ZU9mKSB7XG4gICAgICAgIHJldHVybiBzeW1ib2xWYWx1ZU9mLmNhbGwob2JqZWN0KSA9PSBzeW1ib2xWYWx1ZU9mLmNhbGwob3RoZXIpO1xuICAgICAgfVxuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYGJhc2VJc0VxdWFsRGVlcGAgZm9yIG9iamVjdHMgd2l0aCBzdXBwb3J0IGZvclxuICogcGFydGlhbCBkZWVwIGNvbXBhcmlzb25zLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBvdGhlciBUaGUgb3RoZXIgb2JqZWN0IHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0ge251bWJlcn0gYml0bWFzayBUaGUgYml0bWFzayBmbGFncy4gU2VlIGBiYXNlSXNFcXVhbGAgZm9yIG1vcmUgZGV0YWlscy5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGN1c3RvbWl6ZXIgVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb21wYXJpc29ucy5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGVxdWFsRnVuYyBUaGUgZnVuY3Rpb24gdG8gZGV0ZXJtaW5lIGVxdWl2YWxlbnRzIG9mIHZhbHVlcy5cbiAqIEBwYXJhbSB7T2JqZWN0fSBzdGFjayBUcmFja3MgdHJhdmVyc2VkIGBvYmplY3RgIGFuZCBgb3RoZXJgIG9iamVjdHMuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIG9iamVjdHMgYXJlIGVxdWl2YWxlbnQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gZXF1YWxPYmplY3RzKG9iamVjdCwgb3RoZXIsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGVxdWFsRnVuYywgc3RhY2spIHtcbiAgdmFyIGlzUGFydGlhbCA9IGJpdG1hc2sgJiBDT01QQVJFX1BBUlRJQUxfRkxBRyxcbiAgICAgIG9ialByb3BzID0gZ2V0QWxsS2V5cyhvYmplY3QpLFxuICAgICAgb2JqTGVuZ3RoID0gb2JqUHJvcHMubGVuZ3RoLFxuICAgICAgb3RoUHJvcHMgPSBnZXRBbGxLZXlzKG90aGVyKSxcbiAgICAgIG90aExlbmd0aCA9IG90aFByb3BzLmxlbmd0aDtcblxuICBpZiAob2JqTGVuZ3RoICE9IG90aExlbmd0aCAmJiAhaXNQYXJ0aWFsKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHZhciBpbmRleCA9IG9iakxlbmd0aDtcbiAgd2hpbGUgKGluZGV4LS0pIHtcbiAgICB2YXIga2V5ID0gb2JqUHJvcHNbaW5kZXhdO1xuICAgIGlmICghKGlzUGFydGlhbCA/IGtleSBpbiBvdGhlciA6IGhhc093blByb3BlcnR5LmNhbGwob3RoZXIsIGtleSkpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG4gIC8vIEFzc3VtZSBjeWNsaWMgdmFsdWVzIGFyZSBlcXVhbC5cbiAgdmFyIHN0YWNrZWQgPSBzdGFjay5nZXQob2JqZWN0KTtcbiAgaWYgKHN0YWNrZWQgJiYgc3RhY2suZ2V0KG90aGVyKSkge1xuICAgIHJldHVybiBzdGFja2VkID09IG90aGVyO1xuICB9XG4gIHZhciByZXN1bHQgPSB0cnVlO1xuICBzdGFjay5zZXQob2JqZWN0LCBvdGhlcik7XG4gIHN0YWNrLnNldChvdGhlciwgb2JqZWN0KTtcblxuICB2YXIgc2tpcEN0b3IgPSBpc1BhcnRpYWw7XG4gIHdoaWxlICgrK2luZGV4IDwgb2JqTGVuZ3RoKSB7XG4gICAga2V5ID0gb2JqUHJvcHNbaW5kZXhdO1xuICAgIHZhciBvYmpWYWx1ZSA9IG9iamVjdFtrZXldLFxuICAgICAgICBvdGhWYWx1ZSA9IG90aGVyW2tleV07XG5cbiAgICBpZiAoY3VzdG9taXplcikge1xuICAgICAgdmFyIGNvbXBhcmVkID0gaXNQYXJ0aWFsXG4gICAgICAgID8gY3VzdG9taXplcihvdGhWYWx1ZSwgb2JqVmFsdWUsIGtleSwgb3RoZXIsIG9iamVjdCwgc3RhY2spXG4gICAgICAgIDogY3VzdG9taXplcihvYmpWYWx1ZSwgb3RoVmFsdWUsIGtleSwgb2JqZWN0LCBvdGhlciwgc3RhY2spO1xuICAgIH1cbiAgICAvLyBSZWN1cnNpdmVseSBjb21wYXJlIG9iamVjdHMgKHN1c2NlcHRpYmxlIHRvIGNhbGwgc3RhY2sgbGltaXRzKS5cbiAgICBpZiAoIShjb21wYXJlZCA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgPyAob2JqVmFsdWUgPT09IG90aFZhbHVlIHx8IGVxdWFsRnVuYyhvYmpWYWx1ZSwgb3RoVmFsdWUsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIHN0YWNrKSlcbiAgICAgICAgICA6IGNvbXBhcmVkXG4gICAgICAgICkpIHtcbiAgICAgIHJlc3VsdCA9IGZhbHNlO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHNraXBDdG9yIHx8IChza2lwQ3RvciA9IGtleSA9PSAnY29uc3RydWN0b3InKTtcbiAgfVxuICBpZiAocmVzdWx0ICYmICFza2lwQ3Rvcikge1xuICAgIHZhciBvYmpDdG9yID0gb2JqZWN0LmNvbnN0cnVjdG9yLFxuICAgICAgICBvdGhDdG9yID0gb3RoZXIuY29uc3RydWN0b3I7XG5cbiAgICAvLyBOb24gYE9iamVjdGAgb2JqZWN0IGluc3RhbmNlcyB3aXRoIGRpZmZlcmVudCBjb25zdHJ1Y3RvcnMgYXJlIG5vdCBlcXVhbC5cbiAgICBpZiAob2JqQ3RvciAhPSBvdGhDdG9yICYmXG4gICAgICAgICgnY29uc3RydWN0b3InIGluIG9iamVjdCAmJiAnY29uc3RydWN0b3InIGluIG90aGVyKSAmJlxuICAgICAgICAhKHR5cGVvZiBvYmpDdG9yID09ICdmdW5jdGlvbicgJiYgb2JqQ3RvciBpbnN0YW5jZW9mIG9iakN0b3IgJiZcbiAgICAgICAgICB0eXBlb2Ygb3RoQ3RvciA9PSAnZnVuY3Rpb24nICYmIG90aEN0b3IgaW5zdGFuY2VvZiBvdGhDdG9yKSkge1xuICAgICAgcmVzdWx0ID0gZmFsc2U7XG4gICAgfVxuICB9XG4gIHN0YWNrWydkZWxldGUnXShvYmplY3QpO1xuICBzdGFja1snZGVsZXRlJ10ob3RoZXIpO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYW4gYXJyYXkgb2Ygb3duIGVudW1lcmFibGUgcHJvcGVydHkgbmFtZXMgYW5kIHN5bWJvbHMgb2YgYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMgYW5kIHN5bWJvbHMuXG4gKi9cbmZ1bmN0aW9uIGdldEFsbEtleXMob2JqZWN0KSB7XG4gIHJldHVybiBiYXNlR2V0QWxsS2V5cyhvYmplY3QsIGtleXMsIGdldFN5bWJvbHMpO1xufVxuXG4vKipcbiAqIEdldHMgdGhlIGRhdGEgZm9yIGBtYXBgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gbWFwIFRoZSBtYXAgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSByZWZlcmVuY2Uga2V5LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIG1hcCBkYXRhLlxuICovXG5mdW5jdGlvbiBnZXRNYXBEYXRhKG1hcCwga2V5KSB7XG4gIHZhciBkYXRhID0gbWFwLl9fZGF0YV9fO1xuICByZXR1cm4gaXNLZXlhYmxlKGtleSlcbiAgICA/IGRhdGFbdHlwZW9mIGtleSA9PSAnc3RyaW5nJyA/ICdzdHJpbmcnIDogJ2hhc2gnXVxuICAgIDogZGF0YS5tYXA7XG59XG5cbi8qKlxuICogR2V0cyB0aGUgbmF0aXZlIGZ1bmN0aW9uIGF0IGBrZXlgIG9mIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIG1ldGhvZCB0byBnZXQuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZnVuY3Rpb24gaWYgaXQncyBuYXRpdmUsIGVsc2UgYHVuZGVmaW5lZGAuXG4gKi9cbmZ1bmN0aW9uIGdldE5hdGl2ZShvYmplY3QsIGtleSkge1xuICB2YXIgdmFsdWUgPSBnZXRWYWx1ZShvYmplY3QsIGtleSk7XG4gIHJldHVybiBiYXNlSXNOYXRpdmUodmFsdWUpID8gdmFsdWUgOiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlR2V0VGFnYCB3aGljaCBpZ25vcmVzIGBTeW1ib2wudG9TdHJpbmdUYWdgIHZhbHVlcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSByYXcgYHRvU3RyaW5nVGFnYC5cbiAqL1xuZnVuY3Rpb24gZ2V0UmF3VGFnKHZhbHVlKSB7XG4gIHZhciBpc093biA9IGhhc093blByb3BlcnR5LmNhbGwodmFsdWUsIHN5bVRvU3RyaW5nVGFnKSxcbiAgICAgIHRhZyA9IHZhbHVlW3N5bVRvU3RyaW5nVGFnXTtcblxuICB0cnkge1xuICAgIHZhbHVlW3N5bVRvU3RyaW5nVGFnXSA9IHVuZGVmaW5lZDtcbiAgICB2YXIgdW5tYXNrZWQgPSB0cnVlO1xuICB9IGNhdGNoIChlKSB7fVxuXG4gIHZhciByZXN1bHQgPSBuYXRpdmVPYmplY3RUb1N0cmluZy5jYWxsKHZhbHVlKTtcbiAgaWYgKHVubWFza2VkKSB7XG4gICAgaWYgKGlzT3duKSB7XG4gICAgICB2YWx1ZVtzeW1Ub1N0cmluZ1RhZ10gPSB0YWc7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlbGV0ZSB2YWx1ZVtzeW1Ub1N0cmluZ1RhZ107XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBvZiB0aGUgb3duIGVudW1lcmFibGUgc3ltYm9scyBvZiBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBzeW1ib2xzLlxuICovXG52YXIgZ2V0U3ltYm9scyA9ICFuYXRpdmVHZXRTeW1ib2xzID8gc3R1YkFycmF5IDogZnVuY3Rpb24ob2JqZWN0KSB7XG4gIGlmIChvYmplY3QgPT0gbnVsbCkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuICBvYmplY3QgPSBPYmplY3Qob2JqZWN0KTtcbiAgcmV0dXJuIGFycmF5RmlsdGVyKG5hdGl2ZUdldFN5bWJvbHMob2JqZWN0KSwgZnVuY3Rpb24oc3ltYm9sKSB7XG4gICAgcmV0dXJuIHByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwob2JqZWN0LCBzeW1ib2wpO1xuICB9KTtcbn07XG5cbi8qKlxuICogR2V0cyB0aGUgYHRvU3RyaW5nVGFnYCBvZiBgdmFsdWVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGB0b1N0cmluZ1RhZ2AuXG4gKi9cbnZhciBnZXRUYWcgPSBiYXNlR2V0VGFnO1xuXG4vLyBGYWxsYmFjayBmb3IgZGF0YSB2aWV3cywgbWFwcywgc2V0cywgYW5kIHdlYWsgbWFwcyBpbiBJRSAxMSBhbmQgcHJvbWlzZXMgaW4gTm9kZS5qcyA8IDYuXG5pZiAoKERhdGFWaWV3ICYmIGdldFRhZyhuZXcgRGF0YVZpZXcobmV3IEFycmF5QnVmZmVyKDEpKSkgIT0gZGF0YVZpZXdUYWcpIHx8XG4gICAgKE1hcCAmJiBnZXRUYWcobmV3IE1hcCkgIT0gbWFwVGFnKSB8fFxuICAgIChQcm9taXNlICYmIGdldFRhZyhQcm9taXNlLnJlc29sdmUoKSkgIT0gcHJvbWlzZVRhZykgfHxcbiAgICAoU2V0ICYmIGdldFRhZyhuZXcgU2V0KSAhPSBzZXRUYWcpIHx8XG4gICAgKFdlYWtNYXAgJiYgZ2V0VGFnKG5ldyBXZWFrTWFwKSAhPSB3ZWFrTWFwVGFnKSkge1xuICBnZXRUYWcgPSBmdW5jdGlvbih2YWx1ZSkge1xuICAgIHZhciByZXN1bHQgPSBiYXNlR2V0VGFnKHZhbHVlKSxcbiAgICAgICAgQ3RvciA9IHJlc3VsdCA9PSBvYmplY3RUYWcgPyB2YWx1ZS5jb25zdHJ1Y3RvciA6IHVuZGVmaW5lZCxcbiAgICAgICAgY3RvclN0cmluZyA9IEN0b3IgPyB0b1NvdXJjZShDdG9yKSA6ICcnO1xuXG4gICAgaWYgKGN0b3JTdHJpbmcpIHtcbiAgICAgIHN3aXRjaCAoY3RvclN0cmluZykge1xuICAgICAgICBjYXNlIGRhdGFWaWV3Q3RvclN0cmluZzogcmV0dXJuIGRhdGFWaWV3VGFnO1xuICAgICAgICBjYXNlIG1hcEN0b3JTdHJpbmc6IHJldHVybiBtYXBUYWc7XG4gICAgICAgIGNhc2UgcHJvbWlzZUN0b3JTdHJpbmc6IHJldHVybiBwcm9taXNlVGFnO1xuICAgICAgICBjYXNlIHNldEN0b3JTdHJpbmc6IHJldHVybiBzZXRUYWc7XG4gICAgICAgIGNhc2Ugd2Vha01hcEN0b3JTdHJpbmc6IHJldHVybiB3ZWFrTWFwVGFnO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgdmFsaWQgYXJyYXktbGlrZSBpbmRleC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcGFyYW0ge251bWJlcn0gW2xlbmd0aD1NQVhfU0FGRV9JTlRFR0VSXSBUaGUgdXBwZXIgYm91bmRzIG9mIGEgdmFsaWQgaW5kZXguXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHZhbGlkIGluZGV4LCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGlzSW5kZXgodmFsdWUsIGxlbmd0aCkge1xuICBsZW5ndGggPSBsZW5ndGggPT0gbnVsbCA/IE1BWF9TQUZFX0lOVEVHRVIgOiBsZW5ndGg7XG4gIHJldHVybiAhIWxlbmd0aCAmJlxuICAgICh0eXBlb2YgdmFsdWUgPT0gJ251bWJlcicgfHwgcmVJc1VpbnQudGVzdCh2YWx1ZSkpICYmXG4gICAgKHZhbHVlID4gLTEgJiYgdmFsdWUgJSAxID09IDAgJiYgdmFsdWUgPCBsZW5ndGgpO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIHN1aXRhYmxlIGZvciB1c2UgYXMgdW5pcXVlIG9iamVjdCBrZXkuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgc3VpdGFibGUsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNLZXlhYmxlKHZhbHVlKSB7XG4gIHZhciB0eXBlID0gdHlwZW9mIHZhbHVlO1xuICByZXR1cm4gKHR5cGUgPT0gJ3N0cmluZycgfHwgdHlwZSA9PSAnbnVtYmVyJyB8fCB0eXBlID09ICdzeW1ib2wnIHx8IHR5cGUgPT0gJ2Jvb2xlYW4nKVxuICAgID8gKHZhbHVlICE9PSAnX19wcm90b19fJylcbiAgICA6ICh2YWx1ZSA9PT0gbnVsbCk7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIGBmdW5jYCBoYXMgaXRzIHNvdXJjZSBtYXNrZWQuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGBmdW5jYCBpcyBtYXNrZWQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNNYXNrZWQoZnVuYykge1xuICByZXR1cm4gISFtYXNrU3JjS2V5ICYmIChtYXNrU3JjS2V5IGluIGZ1bmMpO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGxpa2VseSBhIHByb3RvdHlwZSBvYmplY3QuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBwcm90b3R5cGUsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNQcm90b3R5cGUodmFsdWUpIHtcbiAgdmFyIEN0b3IgPSB2YWx1ZSAmJiB2YWx1ZS5jb25zdHJ1Y3RvcixcbiAgICAgIHByb3RvID0gKHR5cGVvZiBDdG9yID09ICdmdW5jdGlvbicgJiYgQ3Rvci5wcm90b3R5cGUpIHx8IG9iamVjdFByb3RvO1xuXG4gIHJldHVybiB2YWx1ZSA9PT0gcHJvdG87XG59XG5cbi8qKlxuICogQ29udmVydHMgYHZhbHVlYCB0byBhIHN0cmluZyB1c2luZyBgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZ2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBjb252ZXJ0ZWQgc3RyaW5nLlxuICovXG5mdW5jdGlvbiBvYmplY3RUb1N0cmluZyh2YWx1ZSkge1xuICByZXR1cm4gbmF0aXZlT2JqZWN0VG9TdHJpbmcuY2FsbCh2YWx1ZSk7XG59XG5cbi8qKlxuICogQ29udmVydHMgYGZ1bmNgIHRvIGl0cyBzb3VyY2UgY29kZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHNvdXJjZSBjb2RlLlxuICovXG5mdW5jdGlvbiB0b1NvdXJjZShmdW5jKSB7XG4gIGlmIChmdW5jICE9IG51bGwpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGZ1bmNUb1N0cmluZy5jYWxsKGZ1bmMpO1xuICAgIH0gY2F0Y2ggKGUpIHt9XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiAoZnVuYyArICcnKTtcbiAgICB9IGNhdGNoIChlKSB7fVxuICB9XG4gIHJldHVybiAnJztcbn1cblxuLyoqXG4gKiBQZXJmb3JtcyBhXG4gKiBbYFNhbWVWYWx1ZVplcm9gXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1zYW1ldmFsdWV6ZXJvKVxuICogY29tcGFyaXNvbiBiZXR3ZWVuIHR3byB2YWx1ZXMgdG8gZGV0ZXJtaW5lIGlmIHRoZXkgYXJlIGVxdWl2YWxlbnQuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0geyp9IG90aGVyIFRoZSBvdGhlciB2YWx1ZSB0byBjb21wYXJlLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSB2YWx1ZXMgYXJlIGVxdWl2YWxlbnQsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIG9iamVjdCA9IHsgJ2EnOiAxIH07XG4gKiB2YXIgb3RoZXIgPSB7ICdhJzogMSB9O1xuICpcbiAqIF8uZXEob2JqZWN0LCBvYmplY3QpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uZXEob2JqZWN0LCBvdGhlcik7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uZXEoJ2EnLCAnYScpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uZXEoJ2EnLCBPYmplY3QoJ2EnKSk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uZXEoTmFOLCBOYU4pO1xuICogLy8gPT4gdHJ1ZVxuICovXG5mdW5jdGlvbiBlcSh2YWx1ZSwgb3RoZXIpIHtcbiAgcmV0dXJuIHZhbHVlID09PSBvdGhlciB8fCAodmFsdWUgIT09IHZhbHVlICYmIG90aGVyICE9PSBvdGhlcik7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgbGlrZWx5IGFuIGBhcmd1bWVudHNgIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBgYXJndW1lbnRzYCBvYmplY3QsXG4gKiAgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzQXJndW1lbnRzKGZ1bmN0aW9uKCkgeyByZXR1cm4gYXJndW1lbnRzOyB9KCkpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcmd1bWVudHMoWzEsIDIsIDNdKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbnZhciBpc0FyZ3VtZW50cyA9IGJhc2VJc0FyZ3VtZW50cyhmdW5jdGlvbigpIHsgcmV0dXJuIGFyZ3VtZW50czsgfSgpKSA/IGJhc2VJc0FyZ3VtZW50cyA6IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmIGhhc093blByb3BlcnR5LmNhbGwodmFsdWUsICdjYWxsZWUnKSAmJlxuICAgICFwcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHZhbHVlLCAnY2FsbGVlJyk7XG59O1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYW4gYEFycmF5YCBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYW4gYXJyYXksIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0FycmF5KFsxLCAyLCAzXSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0FycmF5KGRvY3VtZW50LmJvZHkuY2hpbGRyZW4pO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzQXJyYXkoJ2FiYycpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzQXJyYXkoXy5ub29wKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbnZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhcnJheS1saWtlLiBBIHZhbHVlIGlzIGNvbnNpZGVyZWQgYXJyYXktbGlrZSBpZiBpdCdzXG4gKiBub3QgYSBmdW5jdGlvbiBhbmQgaGFzIGEgYHZhbHVlLmxlbmd0aGAgdGhhdCdzIGFuIGludGVnZXIgZ3JlYXRlciB0aGFuIG9yXG4gKiBlcXVhbCB0byBgMGAgYW5kIGxlc3MgdGhhbiBvciBlcXVhbCB0byBgTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVJgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFycmF5LWxpa2UsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0FycmF5TGlrZShbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcnJheUxpa2UoZG9jdW1lbnQuYm9keS5jaGlsZHJlbik7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0FycmF5TGlrZSgnYWJjJyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0FycmF5TGlrZShfLm5vb3ApO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNBcnJheUxpa2UodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlICE9IG51bGwgJiYgaXNMZW5ndGgodmFsdWUubGVuZ3RoKSAmJiAhaXNGdW5jdGlvbih2YWx1ZSk7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSBidWZmZXIuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjMuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBidWZmZXIsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0J1ZmZlcihuZXcgQnVmZmVyKDIpKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQnVmZmVyKG5ldyBVaW50OEFycmF5KDIpKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbnZhciBpc0J1ZmZlciA9IG5hdGl2ZUlzQnVmZmVyIHx8IHN0dWJGYWxzZTtcblxuLyoqXG4gKiBQZXJmb3JtcyBhIGRlZXAgY29tcGFyaXNvbiBiZXR3ZWVuIHR3byB2YWx1ZXMgdG8gZGV0ZXJtaW5lIGlmIHRoZXkgYXJlXG4gKiBlcXVpdmFsZW50LlxuICpcbiAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBzdXBwb3J0cyBjb21wYXJpbmcgYXJyYXlzLCBhcnJheSBidWZmZXJzLCBib29sZWFucyxcbiAqIGRhdGUgb2JqZWN0cywgZXJyb3Igb2JqZWN0cywgbWFwcywgbnVtYmVycywgYE9iamVjdGAgb2JqZWN0cywgcmVnZXhlcyxcbiAqIHNldHMsIHN0cmluZ3MsIHN5bWJvbHMsIGFuZCB0eXBlZCBhcnJheXMuIGBPYmplY3RgIG9iamVjdHMgYXJlIGNvbXBhcmVkXG4gKiBieSB0aGVpciBvd24sIG5vdCBpbmhlcml0ZWQsIGVudW1lcmFibGUgcHJvcGVydGllcy4gRnVuY3Rpb25zIGFuZCBET01cbiAqIG5vZGVzIGFyZSBjb21wYXJlZCBieSBzdHJpY3QgZXF1YWxpdHksIGkuZS4gYD09PWAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0geyp9IG90aGVyIFRoZSBvdGhlciB2YWx1ZSB0byBjb21wYXJlLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSB2YWx1ZXMgYXJlIGVxdWl2YWxlbnQsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIG9iamVjdCA9IHsgJ2EnOiAxIH07XG4gKiB2YXIgb3RoZXIgPSB7ICdhJzogMSB9O1xuICpcbiAqIF8uaXNFcXVhbChvYmplY3QsIG90aGVyKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBvYmplY3QgPT09IG90aGVyO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNFcXVhbCh2YWx1ZSwgb3RoZXIpIHtcbiAgcmV0dXJuIGJhc2VJc0VxdWFsKHZhbHVlLCBvdGhlcik7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhIGBGdW5jdGlvbmAgb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgZnVuY3Rpb24sIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0Z1bmN0aW9uKF8pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNGdW5jdGlvbigvYWJjLyk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0Z1bmN0aW9uKHZhbHVlKSB7XG4gIGlmICghaXNPYmplY3QodmFsdWUpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIC8vIFRoZSB1c2Ugb2YgYE9iamVjdCN0b1N0cmluZ2AgYXZvaWRzIGlzc3VlcyB3aXRoIHRoZSBgdHlwZW9mYCBvcGVyYXRvclxuICAvLyBpbiBTYWZhcmkgOSB3aGljaCByZXR1cm5zICdvYmplY3QnIGZvciB0eXBlZCBhcnJheXMgYW5kIG90aGVyIGNvbnN0cnVjdG9ycy5cbiAgdmFyIHRhZyA9IGJhc2VHZXRUYWcodmFsdWUpO1xuICByZXR1cm4gdGFnID09IGZ1bmNUYWcgfHwgdGFnID09IGdlblRhZyB8fCB0YWcgPT0gYXN5bmNUYWcgfHwgdGFnID09IHByb3h5VGFnO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgdmFsaWQgYXJyYXktbGlrZSBsZW5ndGguXG4gKlxuICogKipOb3RlOioqIFRoaXMgbWV0aG9kIGlzIGxvb3NlbHkgYmFzZWQgb25cbiAqIFtgVG9MZW5ndGhgXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy10b2xlbmd0aCkuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSB2YWxpZCBsZW5ndGgsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0xlbmd0aCgzKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzTGVuZ3RoKE51bWJlci5NSU5fVkFMVUUpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzTGVuZ3RoKEluZmluaXR5KTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc0xlbmd0aCgnMycpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNMZW5ndGgodmFsdWUpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PSAnbnVtYmVyJyAmJlxuICAgIHZhbHVlID4gLTEgJiYgdmFsdWUgJSAxID09IDAgJiYgdmFsdWUgPD0gTUFYX1NBRkVfSU5URUdFUjtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyB0aGVcbiAqIFtsYW5ndWFnZSB0eXBlXShodHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtZWNtYXNjcmlwdC1sYW5ndWFnZS10eXBlcylcbiAqIG9mIGBPYmplY3RgLiAoZS5nLiBhcnJheXMsIGZ1bmN0aW9ucywgb2JqZWN0cywgcmVnZXhlcywgYG5ldyBOdW1iZXIoMClgLCBhbmQgYG5ldyBTdHJpbmcoJycpYClcbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBvYmplY3QsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc09iamVjdCh7fSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdChbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3QoXy5ub29wKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0KG51bGwpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNPYmplY3QodmFsdWUpIHtcbiAgdmFyIHR5cGUgPSB0eXBlb2YgdmFsdWU7XG4gIHJldHVybiB2YWx1ZSAhPSBudWxsICYmICh0eXBlID09ICdvYmplY3QnIHx8IHR5cGUgPT0gJ2Z1bmN0aW9uJyk7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgb2JqZWN0LWxpa2UuIEEgdmFsdWUgaXMgb2JqZWN0LWxpa2UgaWYgaXQncyBub3QgYG51bGxgXG4gKiBhbmQgaGFzIGEgYHR5cGVvZmAgcmVzdWx0IG9mIFwib2JqZWN0XCIuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgb2JqZWN0LWxpa2UsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc09iamVjdExpa2Uoe30pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKFsxLCAyLCAzXSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdExpa2UoXy5ub29wKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc09iamVjdExpa2UobnVsbCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc09iamVjdExpa2UodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlICE9IG51bGwgJiYgdHlwZW9mIHZhbHVlID09ICdvYmplY3QnO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYSB0eXBlZCBhcnJheS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDMuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHR5cGVkIGFycmF5LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNUeXBlZEFycmF5KG5ldyBVaW50OEFycmF5KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzVHlwZWRBcnJheShbXSk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG52YXIgaXNUeXBlZEFycmF5ID0gbm9kZUlzVHlwZWRBcnJheSA/IGJhc2VVbmFyeShub2RlSXNUeXBlZEFycmF5KSA6IGJhc2VJc1R5cGVkQXJyYXk7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBvZiB0aGUgb3duIGVudW1lcmFibGUgcHJvcGVydHkgbmFtZXMgb2YgYG9iamVjdGAuXG4gKlxuICogKipOb3RlOioqIE5vbi1vYmplY3QgdmFsdWVzIGFyZSBjb2VyY2VkIHRvIG9iamVjdHMuIFNlZSB0aGVcbiAqIFtFUyBzcGVjXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1vYmplY3Qua2V5cylcbiAqIGZvciBtb3JlIGRldGFpbHMuXG4gKlxuICogQHN0YXRpY1xuICogQHNpbmNlIDAuMS4wXG4gKiBAbWVtYmVyT2YgX1xuICogQGNhdGVnb3J5IE9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cbiAqIEBleGFtcGxlXG4gKlxuICogZnVuY3Rpb24gRm9vKCkge1xuICogICB0aGlzLmEgPSAxO1xuICogICB0aGlzLmIgPSAyO1xuICogfVxuICpcbiAqIEZvby5wcm90b3R5cGUuYyA9IDM7XG4gKlxuICogXy5rZXlzKG5ldyBGb28pO1xuICogLy8gPT4gWydhJywgJ2InXSAoaXRlcmF0aW9uIG9yZGVyIGlzIG5vdCBndWFyYW50ZWVkKVxuICpcbiAqIF8ua2V5cygnaGknKTtcbiAqIC8vID0+IFsnMCcsICcxJ11cbiAqL1xuZnVuY3Rpb24ga2V5cyhvYmplY3QpIHtcbiAgcmV0dXJuIGlzQXJyYXlMaWtlKG9iamVjdCkgPyBhcnJheUxpa2VLZXlzKG9iamVjdCkgOiBiYXNlS2V5cyhvYmplY3QpO1xufVxuXG4vKipcbiAqIFRoaXMgbWV0aG9kIHJldHVybnMgYSBuZXcgZW1wdHkgYXJyYXkuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjEzLjBcbiAqIEBjYXRlZ29yeSBVdGlsXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBlbXB0eSBhcnJheS5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIGFycmF5cyA9IF8udGltZXMoMiwgXy5zdHViQXJyYXkpO1xuICpcbiAqIGNvbnNvbGUubG9nKGFycmF5cyk7XG4gKiAvLyA9PiBbW10sIFtdXVxuICpcbiAqIGNvbnNvbGUubG9nKGFycmF5c1swXSA9PT0gYXJyYXlzWzFdKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIHN0dWJBcnJheSgpIHtcbiAgcmV0dXJuIFtdO1xufVxuXG4vKipcbiAqIFRoaXMgbWV0aG9kIHJldHVybnMgYGZhbHNlYC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMTMuMFxuICogQGNhdGVnb3J5IFV0aWxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8udGltZXMoMiwgXy5zdHViRmFsc2UpO1xuICogLy8gPT4gW2ZhbHNlLCBmYWxzZV1cbiAqL1xuZnVuY3Rpb24gc3R1YkZhbHNlKCkge1xuICByZXR1cm4gZmFsc2U7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNFcXVhbDtcbiIsIi8vIFRoZSBtb2R1bGUgY2FjaGVcbnZhciBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18gPSB7fTtcblxuLy8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbmZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG5cdHZhciBjYWNoZWRNb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdO1xuXHRpZiAoY2FjaGVkTW9kdWxlICE9PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4gY2FjaGVkTW9kdWxlLmV4cG9ydHM7XG5cdH1cblx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcblx0dmFyIG1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF0gPSB7XG5cdFx0aWQ6IG1vZHVsZUlkLFxuXHRcdGxvYWRlZDogZmFsc2UsXG5cdFx0ZXhwb3J0czoge31cblx0fTtcblxuXHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cblx0X193ZWJwYWNrX21vZHVsZXNfX1ttb2R1bGVJZF0obW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cblx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuXHRtb2R1bGUubG9hZGVkID0gdHJ1ZTtcblxuXHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuXHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG59XG5cbiIsIl9fd2VicGFja19yZXF1aXJlX18uZyA9IChmdW5jdGlvbigpIHtcblx0aWYgKHR5cGVvZiBnbG9iYWxUaGlzID09PSAnb2JqZWN0JykgcmV0dXJuIGdsb2JhbFRoaXM7XG5cdHRyeSB7XG5cdFx0cmV0dXJuIHRoaXMgfHwgbmV3IEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHRpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ29iamVjdCcpIHJldHVybiB3aW5kb3c7XG5cdH1cbn0pKCk7IiwiX193ZWJwYWNrX3JlcXVpcmVfXy5ubWQgPSAobW9kdWxlKSA9PiB7XG5cdG1vZHVsZS5wYXRocyA9IFtdO1xuXHRpZiAoIW1vZHVsZS5jaGlsZHJlbikgbW9kdWxlLmNoaWxkcmVuID0gW107XG5cdHJldHVybiBtb2R1bGU7XG59OyIsIi8vIHN0YXJ0dXBcbi8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuLy8gVGhpcyBlbnRyeSBtb2R1bGUgaXMgcmVmZXJlbmNlZCBieSBvdGhlciBtb2R1bGVzIHNvIGl0IGNhbid0IGJlIGlubGluZWRcbnZhciBfX3dlYnBhY2tfZXhwb3J0c19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyhcIi4vc3JjL2luZGV4LmpzXCIpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ== \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9jaGlzZS93ZWJwYWNrL3VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24iLCJ3ZWJwYWNrOi8vY2hpc2UvLi9zcmMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vY2hpc2UvLi9zcmMvdXRpbGl0aWVzL2VsZW1lbnQtdXRpbGl0aWVzLWV4dGVuZGVyLWZhY3RvcnkuanMiLCJ3ZWJwYWNrOi8vY2hpc2UvLi9zcmMvdXRpbGl0aWVzL2xpYi11dGlsaXRpZXMuanMiLCJ3ZWJwYWNrOi8vY2hpc2UvLi9zcmMvdXRpbGl0aWVzL21haW4tdXRpbGl0aWVzLWZhY3RvcnkuanMiLCJ3ZWJwYWNrOi8vY2hpc2UvLi9zcmMvdXRpbGl0aWVzL29wdGlvbi11dGlsaXRpZXMtZmFjdG9yeS5qcyIsIndlYnBhY2s6Ly9jaGlzZS8uL3NyYy91dGlsaXRpZXMvcmVnaXN0ZXItdW5kby1yZWRvLWFjdGlvbnMtZmFjdG9yeS5qcyIsIndlYnBhY2s6Ly9jaGlzZS8uL3NyYy91dGlsaXRpZXMvc2JnbnZpei1pbnN0YW5jZS11dGlsaXRpZXMtZmFjdG9yeS5qcyIsIndlYnBhY2s6Ly9jaGlzZS8uL3NyYy91dGlsaXRpZXMvdG9wb2xvZ3ktZ3JvdXBpbmctZmFjdG9yeS5qcyIsIndlYnBhY2s6Ly9jaGlzZS8uL3NyYy91dGlsaXRpZXMvdXItYWN0aW9uLWZ1bmN0aW9ucy1leHRlbmRlci1mYWN0b3J5LmpzIiwid2VicGFjazovL2NoaXNlLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC5pc2VxdWFsL2luZGV4LmpzIiwid2VicGFjazovL2NoaXNlL3dlYnBhY2svYm9vdHN0cmFwIiwid2VicGFjazovL2NoaXNlL3dlYnBhY2svcnVudGltZS9nbG9iYWwiLCJ3ZWJwYWNrOi8vY2hpc2Uvd2VicGFjay9ydW50aW1lL25vZGUgbW9kdWxlIGRlY29yYXRvciIsIndlYnBhY2s6Ly9jaGlzZS93ZWJwYWNrL3N0YXJ0dXAiXSwibmFtZXMiOlsiY2hpc2UiLCJfb3B0aW9ucyIsInBhcmFtIiwibGlicyIsInJlcXVpcmUiLCJvcHRpb25VdGlsaXRpZXMiLCJvcHRpb25zIiwiZXh0ZW5kT3B0aW9ucyIsInNiZ252aXpJbnN0YW5jZVV0aWxpdGllcyIsInNiZ252aXpJbnN0YW5jZSIsInJlZ2lzdGVyVW5kb1JlZG9BY3Rpb25zIiwibWFpblV0aWxpdGllcyIsImVsZW1lbnRVdGlsaXRpZXNFeHRlbmRlciIsInVuZG9SZWRvQWN0aW9uRnVuY3Rpb25zRXh0ZW5kZXIiLCJzaWZUb3BvbG9neUdyb3VwaW5nIiwiZWxlbWVudFV0aWxpdGllcyIsInVuZG9SZWRvQWN0aW9uRnVuY3Rpb25zIiwic2hvdWxkQXBwbHkiLCJtYXBUeXBlIiwibWV0YUVkZ2VJZGVudGlmaWVyIiwibG9ja0dyYXBoVG9wb2xvZ3kiLCJhcGkiLCJwcm9wIiwiZ2V0U2JnbnZpekluc3RhbmNlIiwiZ2V0SW5zdGFuY2UiLCJyZWdpc3RlciIsIl9saWJzIiwialF1ZXJ5IiwiY3l0b3NjYXBlIiwic2JnbnZpeiIsInNhdmVBcyIsImZpbGVzYXZlciIsImxpYlV0aWxpdGllcyIsInNldExpYnMiLCJtb2R1bGUiLCJleHBvcnRzIiwiJCIsImN5IiwiZ2V0T3B0aW9ucyIsImdldEN5IiwiZXh0ZW5kIiwiYWRkTm9kZSIsIngiLCJ5Iiwibm9kZVBhcmFtcyIsImlkIiwicGFyZW50IiwidmlzaWJpbGl0eSIsInNiZ25jbGFzcyIsImxhbmd1YWdlIiwiY3NzIiwiZGVmYXVsdFdpZHRoIiwiZGVmYXVsdEhlaWdodCIsImRhdGEiLCJiYm94IiwidyIsImgiLCJzdGF0ZXNhbmRpbmZvcyIsInBvcnRzIiwiZ2VuZXJhdGVOb2RlSWQiLCJleHRlbmROb2RlRGF0YVdpdGhDbGFzc0RlZmF1bHRzIiwiZGVmYXVsdHMiLCJnZXREZWZhdWx0UHJvcGVydGllcyIsImVsZXMiLCJhZGQiLCJncm91cCIsInBvc2l0aW9uIiwibmV3Tm9kZSIsImxlbmd0aCIsIm9yZGVyaW5nIiwic2V0UG9ydHNPcmRlcmluZyIsImNhbkhhdmVNdWx0aXBsZVVuaXRPZkluZm9ybWF0aW9uIiwidW9pX29iaiIsImNsYXp6IiwibGFiZWwiLCJ0ZXh0IiwiYWRkU3RhdGVPckluZm9Cb3giLCJiZ0ltYWdlIiwic2F2ZVVuaXRzIiwibm9kZSIsInRlbXBEYXRhIiwiaW5kZXgiLCJmb3JFYWNoIiwiZWxlIiwicHVzaCIsImFuY2hvclNpZGUiLCJyZXN0b3JlVW5pdHMiLCJ1bmRlZmluZWQiLCJtb2RpZnlVbml0cyIsImluc3RhbmNlIiwiY2xhc3NlcyIsIkF1eFVuaXRMYXlvdXQiLCJhZGRFZGdlIiwic291cmNlIiwidGFyZ2V0IiwiZWRnZVBhcmFtcyIsImdyb3VwSUQiLCJPYmplY3QiLCJrZXlzIiwiZ2VuZXJhdGVFZGdlSWQiLCJjYW5IYXZlU0JHTkNhcmRpbmFsaXR5IiwiY2FyZGluYWxpdHkiLCJzb3VyY2VOb2RlIiwiZ2V0RWxlbWVudEJ5SWQiLCJ0YXJnZXROb2RlIiwic291cmNlSGFzUG9ydHMiLCJ0YXJnZXRIYXNQb3J0cyIsInBvcnRzb3VyY2UiLCJwb3J0dGFyZ2V0IiwiZ2V0SU9Qb3J0SWRzIiwibm9kZUlucHV0UG9ydElkIiwibm9kZU91dHB1dFBvcnRJZCIsIm5vZGVQb3J0c09yZGVyaW5nIiwiZ2V0UG9ydHNPcmRlcmluZyIsIm5vZGVQb3J0cyIsImxlZnRQb3J0SWQiLCJyaWdodFBvcnRJZCIsInRvcFBvcnRJZCIsImJvdHRvbVBvcnRJZCIsImlucHV0UG9ydElkIiwib3V0cHV0UG9ydElkIiwic291cmNlTm9kZUlucHV0UG9ydElkIiwic291cmNlTm9kZU91dHB1dFBvcnRJZCIsInRhcmdldE5vZGVJbnB1dFBvcnRJZCIsInRhcmdldE5vZGVPdXRwdXRQb3J0SWQiLCJpb1BvcnRzIiwiaXNNb2R1bGF0aW9uQXJjQ2xhc3MiLCJpc0FGQXJjQ2xhc3MiLCJzcmNDbGFzcyIsInRndENsYXNzIiwiaXNTb3VyY2VMb2dpY2FsT3AiLCJpc1RhcmdldExvZ2ljYWxPcCIsIm5ld0VkZ2UiLCJhZGRQcm9jZXNzV2l0aENvbnZlbmllbnRFZGdlcyIsIl9zb3VyY2UiLCJfdGFyZ2V0IiwicHJvY2Vzc1BhcmVudCIsImNvbGxlY3Rpb24iLCJjb21tb25BbmNlc3RvcnMiLCJmaXJzdCIsInByb2Nlc3MiLCJ4ZGlmZiIsInlkaWZmIiwiTWF0aCIsImFicyIsImVkZ2VCdHdTcmMiLCJlZGdlQnR3VGd0IiwiY3JlYXRlQ29tcG91bmRGb3JHaXZlbk5vZGVzIiwibm9kZXNUb01ha2VDb21wb3VuZCIsImNvbXBvdW5kVHlwZSIsIm9sZFBhcmVudElkIiwiaSIsIm5ld0NvbXBvdW5kIiwibmV3Q29tcG91bmRJZCIsIm5ld0VsZXMiLCJjaGFuZ2VQYXJlbnQiLCJ1bmlvbiIsImNyZWF0ZVRyYW5zbGF0aW9uUmVhY3Rpb24iLCJtUm5hTmFtZSIsInByb3RlaW5OYW1lIiwicHJvY2Vzc1Bvc2l0aW9uIiwiZWRnZUxlbmd0aCIsImRlZmF1bHRQcm9jZXNzUHJvcGVydGllcyIsImRlZmF1bHRTb3VyY2VBbmRTaW5rUHJvcGVydGllcyIsImRlZmF1bHROdWNsZWljQWNpZEZlYXR1cmVQcm9wZXJ0aWVzIiwiZGVmYXVsdE1hY3JvbW9sZWN1bGVQcm9wZXJ0aWVzIiwibWFjcm9tb2xlY3VsZVdpZHRoIiwid2lkdGgiLCJzb3VyY2VBbmRTaW5rV2lkdGgiLCJudWNsZWljQWNpZEZlYXR1cmVIZWlnaHQiLCJoZWlnaHQiLCJwcm9jZXNzV2lkdGgiLCJwcm9jZXNzSGVpZ2h0IiwiY29udmVydFRvTW9kZWxQb3NpdGlvbiIsInN0YXJ0QmF0Y2giLCJnZXRNYXBUeXBlIiwic2V0TWFwVHlwZSIsInByb2Nlc3NOb2RlIiwieFBvc09mU291cmNlQW5kU2lua05vZGUiLCJ5UG9zT2ZTb3VyY2VBbmRTaW5rTm9kZSIsInNvdXJjZUFuZFNpbmtOb2RlIiwiY29uc3VtcHRpb25FZGdlIiwieFBvc09mbVJuYU5vZGUiLCJ5UG9zT2ZtUm5hTm9kZSIsIm1SbmFOb2RlIiwiaW5mb2JveE9iamVjdE9mR2VuZSIsIm5lY2Vzc2FyeVN0aW11bGF0aW9uRWRnZSIsInhQb3NPZlByb3RlaW5Ob2RlIiwieVBvc3RPZlByb3RlaW5Ob2RlIiwicHJvdGVpbk5vZGUiLCJwcm9kdWN0aW9uRWRnZSIsImVuZEJhdGNoIiwiZWxlbWVudHMiLCJyZW1vdmVEYXRhIiwidW5zZWxlY3QiLCJzZWxlY3QiLCJjcmVhdGVUcmFuc2NyaXB0aW9uUmVhY3Rpb24iLCJnZW5lTmFtZSIsIm51Y2xlaWNBY2lkRmVhdHVyZVdpZHRoIiwieFBvc09mR2VuZU5vZGUiLCJ5UG9zT2ZHZW5lTm9kZSIsImdlbmVOb2RlIiwieVBvc3RPZm1SbmFOb2RlIiwiaW5mb2JveE9iamVjdE9mbVJuYSIsInJvdGF0ZTkwIiwicG9pbnQiLCJjZW50ZXIiLCJyZWxhdGl2ZVgiLCJyZWxhdGl2ZVkiLCJyZWxhdGl2ZVJvdGF0ZWRYIiwicmVsYXRpdmVSb3RhdGVkWSIsInJlc3VsdFgiLCJyZXN1bHRZIiwiY3JlYXRlVHJhbnNsYXRpb24iLCJyZWd1bGF0b3JMYWJlbCIsIm91dHB1dExhYmVsIiwib3JpZW50YXRpb24iLCJkZWZhdWx0TWFjcm9tb2xlY3VsZVByb3BldGllcyIsInZlcnRpY2FsIiwicHJvY2Vzc1BvcnRzT3JkZXJpbmciLCJtaW5JbmZvYm94RGltZW5zaW9uIiwid2lkdGhQZXJDaGFyIiwicmVndWxhdG9ySW5mb2JveExhYmVsIiwieFBvc09mSW5wdXQiLCJ4UG9zT2ZPdXRwdXQiLCJ5UG9zT2ZJbnB1dCIsInlQb3NPZk91dHB1dCIsIm5vZGVQb3NpdGlvbiIsImlucHV0Tm9kZSIsImlucHV0RWRnZSIsIm91dHB1dE5vZGUiLCJvdXRwdXRFZGdlIiwieFBvc09mUmVndWxhdG9yIiwiZGltZW5zaW9uIiwieVBvc09mUmVndWxhdG9yIiwicmVndWxhdG9yTm9kZSIsImluZm9ib3hPYmplY3QiLCJtYXgiLCJyZWd1bGF0b3JFZGdlIiwiY3JlYXRlVHJhbnNjcmlwdGlvbiIsIm91dHB1dEluZm9ib3hMYWJlbCIsImNyZWF0ZURlZ3JhZGF0aW9uIiwibWFjcm9tb2xlY3VsZSIsIm1hY3JvbW9sZWN1bGVOYW1lIiwibmFtZSIsImNyZWF0ZUNvbXBsZXhQcm90ZWluRm9ybWF0aW9uIiwicHJvdGVpbkxhYmVscyIsImNvbXBsZXhMYWJlbCIsInJlZ3VsYXRvciIsInJldmVyc2UiLCJoYXNSZWd1bGF0b3IiLCJkZWZhdWx0UmVndWxhdG9yUHJvcGVydGllcyIsInR5cGUiLCJtYWNyb21vbGVjdWxlSGVpZ2h0IiwicmVndWxhdG9ySGVpZ2h0IiwidGlsaW5nUGFkZGluZ1ZlcnRpY2FsIiwidGlsaW5nUGFkZGluZ0hvcml6b250YWwiLCJtdWx0aW1lck9mZnNldCIsIm9mZnNldFgiLCJ4UG9zT2ZQcm90ZWluIiwicHJvdGVpbkNvdW50IiwibWFjcm9tb2xlY3VsZURpbWVuc2lvbiIsInN0ZXBPZmZzZXQiLCJvZmZzZXRZIiwiaG9yaXpvbnRhbE9mZnNldFgiLCJ5UG9zT2ZQcm90ZWluIiwiZWRnZUNsYXNzIiwiZWRnZSIsImNvbXBsZXhQb3MiLCJjb21wbGV4IiwiY29tcGxleEVkZ2UiLCJyZWd1bGF0b3JOYW1lIiwicmVndWxhdG9yVHlwZSIsInJlZ3VsYXRvckVkZ2VUeXBlIiwiZWRnZVR5cGUiLCJyZWd1bGF0b3JNdWx0aW1lciIsIm11bHRpbWVyIiwiZW5hYmxlZCIsInNldE11bHRpbWVyU3RhdHVzIiwiaW5mb2JveExhYmVsIiwiY3JlYXRlTXVsdGltZXJpemF0aW9uIiwibWFjcm9tb2xlY3VsZU11bHRpbWVyQ2FyZGluYWxpdHkiLCJjcmVhdGVDb252ZXJzaW9uIiwiaW5wdXRJbmZvYm94TGFiZWxzIiwib3V0cHV0SW5mb2JveExhYmVscyIsIm1hY3JvbW9sZWN1bGVJc011bHRpbWVyIiwiaW5wdXRJbmZvYm94V2lkdGgiLCJzdHlsZSIsIm91dHB1dEluZm9ib3hXaWR0aCIsImNhbGN1bGF0ZU1pbldpZHRoIiwicmVzaXplTm9kZXMiLCJuZXdJbnB1dFhQb3MiLCJuZXdPdXRwdXRYUG9zIiwibmV3SW5wdXRZUG9zIiwibmV3T3V0cHV0WVBvcyIsImNyZWF0ZU1ldGFib2xpY1JlYWN0aW9uIiwiaW5wdXRzIiwib3V0cHV0cyIsInJldmVyc2libGUiLCJkZWZhdWx0U2ltcGxlQ2hlbWljYWxQcm9wZXJ0aWVzIiwic2ltcGxlQ2hlbWljYWxIZWlnaHQiLCJzaW1wbGVDaGVtaWNhbFdpZHRoIiwicHJvY2Vzc0xlZnRTaWRlRWRnZVR5cGUiLCJwcm9jZXNzUmlnaHRTaWRlRWRnZVR5cGUiLCJudW1PZklucHV0Tm9kZXMiLCJudW1PZk91dHB1dE5vZGVzIiwibm9kZU5hbWUiLCJub2RlVHlwZSIsImNlaWwiLCJ0b0xvd2VyQ2FzZSIsImNyZWF0ZU1ldGFib2xpY0NhdGFseXRpY0FjdGl2aXR5IiwiaW5wdXROb2RlTGlzdCIsIm91dHB1dE5vZGVMaXN0IiwiY2F0YWx5c3ROYW1lIiwiY2F0YWx5c3RUeXBlIiwiZGVmYXVsdE1hY3JvbW9sZWN1bFByb3BlcnRpZXMiLCJkZWZhdWx0Q2F0YWx5c3RUeXBlUHJvcGVydGllcyIsImNhdGFseXN0SGVpZ2h0IiwieFBvc09mQ2F0YWx5c3QiLCJ5UG9zT2ZDYXRhbHlzdCIsImNhdGFseXN0Tm9kZSIsImNhdGFseXN0RWRnZSIsImNyZWF0ZUFjdGl2YXRpb25SZWFjdGlvbiIsInlQb3NpdGlvbiIsImlucHV0U2lkZUVkZ2UiLCJvdXRwdXRTaWRlRWRnZSIsImNyZWF0ZVRlbXBsYXRlUmVhY3Rpb24iLCJ0ZW1wbGF0ZVR5cGUiLCJub2RlTGlzdCIsImNvbXBsZXhOYW1lIiwibGF5b3V0UGFyYW0iLCJudW1PZk1vbGVjdWxlcyIsInhQb3NpdGlvbk9mRnJlZU1hY3JvbW9sZWN1bGVzIiwieFBvc2l0aW9uT2ZJbnB1dE1hY3JvbW9sZWN1bGVzIiwiZWRnZU9mQ29tcGxleCIsIm51bU9mSW5wdXRNYWNyb21vbGVjdWxlcyIsImxheW91dE5vZGVzIiwibm9kZXMiLCJsYXlvdXQiLCJyYW5kb21pemUiLCJmaXQiLCJhbmltYXRlIiwic3RvcCIsInN1cHBvc2VkWFBvc2l0aW9uIiwic3VwcG9zZWRZUG9zaXRpb24iLCJvdXRlcldpZHRoIiwicG9zaXRpb25EaWZmWCIsInBvc2l0aW9uRGlmZlkiLCJtb3ZlTm9kZXMiLCJydW4iLCJuZXdQYXJlbnQiLCJwb3NEaWZmWCIsInBvc0RpZmZZIiwibmV3UGFyZW50SWQiLCJtb3ZlZEVsZXMiLCJtb3ZlIiwibWFpbnRhaW5Qb2ludGVyIiwidXBkYXRlSW5mb2JveFN0eWxlIiwibmV3UHJvcHMiLCJpbmZvYm94T2JqIiwidXBkYXRlIiwidXBkYXRlSW5mb2JveE9iaiIsInVzZUFzcGVjdFJhdGlvIiwicHJlc2VydmVSZWxhdGl2ZVBvcyIsInJhdGlvIiwiZWxlTXVzdEJlU3F1YXJlIiwibXVzdEJlU3F1YXJlIiwib2xkV2lkdGgiLCJvbGRIZWlnaHQiLCJpc1BhcmVudCIsImZvbnRGYW1pbGl5IiwiZm9udFNpemUiLCJsYWJlbFRleHQiLCJsYWJlbFdpZHRoIiwiZ2V0V2lkdGhCeUNvbnRlbnQiLCJ1bml0R2FwIiwidG9wSWRlYWxXaWR0aCIsImJvdHRvbUlkZWFsV2lkdGgiLCJyaWdodE1heFdpZHRoIiwibGVmdE1heFdpZHRoIiwiYm94IiwibWlkZGxlV2lkdGgiLCJjb21wb3VuZFdpZHRoIiwiY2hpbGRyZW4iLCJib3VuZGluZ0JveCIsImNhbGN1bGF0ZU1pbkhlaWdodCIsIm1hcmdpbiIsImxlZnRJbmZvQm94ZXMiLCJmaWx0ZXIiLCJsZWZ0SGVpZ2h0IiwicmlnaHRJbmZvQm94ZXMiLCJyaWdodEhlaWdodCIsInNwbGl0IiwicGFyc2VGbG9hdCIsInN1YnN0cmluZyIsInRvdGFsSGVpZ2h0IiwiY29tcG91bmRIZWlnaHQiLCJpc1Jlc2l6ZWRUb0NvbnRlbnQiLCJpc05vZGUiLCJtaW5XIiwibWluSCIsInJlbG9jYXRlU3RhdGVBbmRJbmZvcyIsInN0YXRlQW5kSW5mb3MiLCJjaGFuZ2VTdGF0ZU9ySW5mb0JveCIsInZhbHVlIiwicmVzdWx0Iiwib2xkTGVuZ3RoIiwibmV3TGVuZ3RoIiwiY29udGVudCIsInN0YXRlIiwibWluIiwiZm9udEZhbWlseSIsImJvcmRlcldpZHRoIiwib3B0cyIsInByZXZpb3VzV2lkdGgiLCJ1bml0TGF5b3V0IiwidW5pdHMiLCJzaGlmdEFtb3VudCIsIm9iaiIsImxvY2F0aW9uT2JqIiwiZGVmYXVsdFByb3BzIiwiaW5mb2JveFByb3BzIiwiZ2V0RGVmYXVsdEluZm9ib3hTdHlsZSIsIlVuaXRPZkluZm9ybWF0aW9uIiwiY3JlYXRlIiwibG9jYXRpb24iLCJTdGF0ZVZhcmlhYmxlIiwidmFyaWFibGUiLCJyZW1vdmVTdGF0ZU9ySW5mb0JveCIsInVuaXQiLCJ1bml0Q2xhc3MiLCJnZXRBdXhVbml0Q2xhc3MiLCJyZW1vdmUiLCJmaXRVbml0cyIsImxvY2F0aW9ucyIsImNoZWNrRml0Iiwic3RhdHVzIiwiaXNNdWx0aW1lciIsImVuZHNXaXRoIiwicmVwbGFjZSIsImNoYW5nZUZvbnRQcm9wZXJ0aWVzIiwidmFsaWRhdGVBcnJvd0VuZHMiLCJpc1JlcGxhY2VtZW50IiwiZWRnZWNsYXNzIiwic291cmNlY2xhc3MiLCJ0YXJnZXRjbGFzcyIsImVkZ2VDb25zdHJhaW50cyIsImNvbm5lY3Rpdml0eUNvbnN0cmFpbnRzIiwic3RhcnRzV2l0aCIsImhhc1Rvb01hbnlFZGdlcyIsInNvdXJjZU9yVGFyZ2V0Iiwibm9kZWNsYXNzIiwidG90YWxUb29NYW55IiwiZWRnZVRvb01hbnkiLCJzYW1lRWRnZUNvdW50T3V0Iiwib3V0Z29lcnMiLCJzaXplIiwidG90YWxFZGdlQ291bnRPdXQiLCJtYXhUb3RhbCIsImFzU291cmNlIiwibWF4RWRnZSIsImNvbXBhcmVTdHJpY3QiLCJ3aXRoaW5MaW1pdHMiLCJzYW1lRWRnZUNvdW50SW4iLCJpbmNvbWVycyIsInRvdGFsRWRnZUNvdW50SW4iLCJhc1RhcmdldCIsImlzSW5Db21wbGV4IiwicGFyZW50Q2xhc3MiLCJpc0FsbG93ZWQiLCJkZWxldGVBbmRQZXJmb3JtTGF5b3V0IiwibGF5b3V0cGFyYW0iLCJoaWRlQW5kUGVyZm9ybUxheW91dCIsInZpZXdVdGlsaXRpZXMiLCJoaWRlIiwic2hvd0FuZFBlcmZvcm1MYXlvdXQiLCJzaG93IiwiY2hhbmdlQ3NzIiwidmFsdWVNYXAiLCJjaGFuZ2VEYXRhIiwidXBkYXRlU2V0RmllbGQiLCJmaWVsZE5hbWUiLCJ0b0RlbGV0ZSIsInRvQWRkIiwiY2FsbGJhY2siLCJzZXQiLCJ1cGRhdGVzIiwiZGVsZXRlZCIsImFkZGVkIiwiZ2V0Tm9kZXNBdCIsInJlbmRlcmVkUG9zIiwicmVzdWx0Tm9kZXMiLCJyZW5kZXJlZEJib3giLCJyZW5kZXJlZEJvdW5kaW5nQm94IiwiaW5jbHVkZU5vZGVzIiwiaW5jbHVkZUVkZ2VzIiwiaW5jbHVkZUxhYmVscyIsImluY2x1ZGVTaGFkb3dzIiwieDEiLCJ4MiIsInkxIiwieTIiLCJkZW11bHRpbWVyaXplQ2xhc3MiLCJyZXNldE1hcFR5cGUiLCJlbWl0Iiwic2lkZSIsInBhcmVudE5vZGUiLCJhbnlIYXNCYWNrZ3JvdW5kSW1hZ2UiLCJnZXRCYWNrZ3JvdW5kSW1hZ2VPYmpzIiwia2V5IiwiaXNFbXB0eU9iamVjdCIsImhhc0JhY2tncm91bmRJbWFnZSIsImJnIiwiQXJyYXkiLCJpc0FycmF5IiwiY2xvbmVJbWciLCJvbmx5SGFzQ2xvbmVNYXJrZXJBc0JnSW1hZ2UiLCJpbmRleE9mIiwiZ2V0QmFja2dyb3VuZEltYWdlVVJMIiwiY29tbW9uVVJMIiwidXJsIiwicG9wIiwibGlzdCIsImdldEJnT2JqIiwiZ2V0QmFja2dyb3VuZEZpdE9wdGlvbnMiLCJjb21tb25GaXQiLCJnZXRGaXRPcHRpb24iLCJzZWFyY2hLZXkiLCJzdWJzdHIiLCJmIiwidXBkYXRlQmFja2dyb3VuZEltYWdlIiwiYmdPYmoiLCJpbWdzIiwieFBvcyIsInlQb3MiLCJ3aWR0aHMiLCJoZWlnaHRzIiwiZml0cyIsIm9wYWNpdGllcyIsInRtcCIsImpvaW4iLCJjaGFuZ2VCYWNrZ3JvdW5kSW1hZ2UiLCJvbGRJbWciLCJuZXdJbWciLCJmaXJzdFRpbWUiLCJ1cGRhdGVJbmZvIiwicHJvbXB0SW52YWxpZEltYWdlIiwidmFsaWRhdGVVUkwiLCJyZW1vdmVCYWNrZ3JvdW5kSW1hZ2UiLCJhZGRCYWNrZ3JvdW5kSW1hZ2UiLCJsb2FkQmFja2dyb3VuZFRoZW5BcHBseSIsImFwcGx5QmFja2dyb3VuZCIsImNoZWNrR2l2ZW5VUkwiLCJyZWFkZXIiLCJGaWxlUmVhZGVyIiwiaW1nRmlsZSIsInJlYWRBc0RhdGFVUkwiLCJvbmxvYWQiLCJlIiwiaW1nIiwiZXh0ZW5zaW9uIiwidmFsaWRFeHRlbnNpb25zIiwiaW5jbHVkZXMiLCJhamF4Iiwic3VjY2VzcyIsInhociIsImVycm9yIiwiaW5kZXhUb0luc2VydCIsImhhc0Nsb25lTWFya2VyIiwic3BsaWNlIiwicmV2ZXJzZUVkZ2UiLCJvbGRTb3VyY2UiLCJvbGRUYXJnZXQiLCJvbGRQb3J0U291cmNlIiwib2xkUG9ydFRhcmdldCIsInNlZ21lbnRQb2ludHMiLCJjb250cm9sUG9pbnRzIiwiYmVuZFBvaW50UG9zaXRpb25zIiwiY29udHJvbFBvaW50UG9zaXRpb25zIiwiZWRnZUVkaXRpbmciLCJpbml0QW5jaG9yUG9pbnRzIiwiZ2V0TGlicyIsImlzR3JhcGhUb3BvbG9neUxvY2tlZCIsInVuZG9hYmxlIiwidW5kb1JlZG8iLCJpbnZhbGlkRWRnZUNhbGxiYWNrIiwidmFsaWRhdGlvbiIsInRlbXAiLCJwcm9jZXNzVHlwZSIsImlzRVBOQ2xhc3MiLCJjbG9uZUNvbGxhcHNlZE5vZGVzQW5kUG9ydHMiLCJlbGVzQmVmb3JlIiwiZWxlc0FmdGVyIiwiZWxlc0RpZmYiLCJkaWZmIiwibGVmdCIsImNvbGxhcHNlZE5vZGVzIiwiY29ubmVjdGVkRWRnZXMiLCJyZW1vdmVDbGFzcyIsIl9ub2RlIiwib2xkUG9ydE5hbWUwIiwib2xkUG9ydE5hbWUxIiwiZWRnZXMiLCJfZWRnZSIsImNsb25lRWxlbWVudHMiLCJwYXN0ZUF0TW91c2VMb2MiLCJjb3B5RWxlbWVudHMiLCJwYXN0ZUVsZW1lbnRzIiwiY2xpcGJvYXJkIiwiY29weSIsInBhc3RlIiwiYWxpZ24iLCJob3Jpem9udGFsIiwiYWxpZ25UbyIsIl9ub2RlcyIsImVsZW1lbnQiLCJpc1ZhbGlkUGFyZW50IiwiZ2V0VG9wTW9zdE5vZGVzIiwiYWxsSGF2ZVRoZVNhbWVQYXJlbnQiLCJfbmV3UGFyZW50IiwiZGlmZmVyZW5jZSIsImFuY2VzdG9ycyIsInBhcmVudElkIiwicGFyZW50RGF0YSIsIm1hY3JvbW9sZWN1bGVMaXN0IiwiYWN0aW9ucyIsInBlcmZvcm1PcGVyYXRpb24iLCJyZXNpemVOb2Rlc1RvQ29udGVudCIsImNoYW5nZU5vZGVMYWJlbCIsInJlZHJhd0Nsb25lTWFya2VycyIsInNldENsb25lTWFya2VyU3RhdHVzIiwic2V0RGVmYXVsdFByb3BlcnR5IiwiX2NsYXNzIiwicHJvcE1hcCIsInNldERlZmF1bHRQcm9wZXJ0aWVzIiwiYWxsTm9kZXMiLCJub2Rlc1RvS2VlcCIsImV4dGVuZFJlbWFpbmluZ05vZGVzIiwibm9kZXNUb1JlbW92ZSIsIm5vdCIsIm5vZGVzVG9TaG93Iiwibm9kZXNUb0hpZGUiLCJub2Rlc1dpdGhIaWRkZW5OZWlnaGJvciIsImNvbm5lY3RlZE5vZGVzIiwidGhpbkJvcmRlciIsInRoaWNrZW5Cb3JkZXIiLCJ1ciIsImFjdGlvbiIsImludGVyc2VjdGlvbiIsIm5laWdoYm9yaG9vZCIsInNob3dBbGxBbmRQZXJmb3JtTGF5b3V0IiwiaGlkZGVuRWxlcyIsIm1haW5FbGUiLCJjbG9zZVVwRWxlbWVudHMiLCJub2Rlc1RvVGhpbkJvcmRlciIsIm5vZGVzVG9UaGlja2VuQm9yZGVyIiwiZWRnZXNXaXRoIiwibGVmdFgiLCJOdW1iZXIiLCJNQVhfVkFMVUUiLCJyaWdodFgiLCJNSU5fVkFMVUUiLCJ0b3BZIiwiYm90dG9tWSIsImhhbGZXaWR0aCIsImhhbGZIZWlnaHQiLCJvdXRlckhlaWdodCIsIm9sZENlbnRlclgiLCJvbGRDZW50ZXJZIiwibWluSG9yaXpvbnRhbFBhcmFtIiwibWF4SG9yaXpvbnRhbFBhcmFtIiwibWluVmVydGljYWxQYXJhbSIsIm1heFZlcnRpY2FsUGFyYW0iLCJxdWFkcmFudHMiLCJjaGVja09jY3VwaWVkUXVhZHJhbnRzIiwiZnJlZVF1YWRyYW50cyIsInByb3BlcnR5IiwiaG9yaXpvbnRhbE11bHQiLCJ2ZXJ0aWNhbE11bHQiLCJyYW5kb21RdWFkcmFudCIsImZsb29yIiwicmFuZG9tIiwiaG9yaXpvbnRhbFBhcmFtIiwiZ2VuZXJhdGVSYW5kb20iLCJ2ZXJ0aWNhbFBhcmFtIiwibmV3Q2VudGVyWCIsIm5ld0NlbnRlclkiLCJuZXd4IiwibmV3eSIsIm11bHQiLCJ2YWwiLCJ2aXNpYmxlTmVpZ2hib3JFbGVzIiwidmlzaWJsZU5laWdoYm9yc09mTmVpZ2hib3JzIiwidmlzaWJsZUVsZXMiLCJvY2N1cGllZFF1YWRyYW50cyIsInNlY29uZCIsInRoaXJkIiwiZm91cnRoIiwiaGlnaGxpZ2h0UHJvY2Vzc2VzIiwiaW1nUGF0aCIsImZpdExhYmVsc1RvTm9kZXMiLCJmaXRMYWJlbHNUb0luZm9ib3hlcyIsImR5bmFtaWNMYWJlbFNpemUiLCJpbmZlck5lc3RpbmdPbkxvYWQiLCJjb21wb3VuZFBhZGRpbmciLCJuZXR3b3JrQ29udGFpbmVyU2VsZWN0b3IiLCJ1bmRvYWJsZURyYWciLCJkZWxldGVFbGVzU2ltcGxlIiwicmVzdG9yZUVsZXMiLCJkZWxldGVFbGVzU21hcnQiLCJjaGFuZ2VCZW5kUG9pbnRzIiwidW5kb1Nob3dBbmRQZXJmb3JtTGF5b3V0IiwidW5kb0hpZGVBbmRQZXJmb3JtTGF5b3V0IiwidW5kb0RlbGV0ZUFuZFBlcmZvcm1MYXlvdXQiLCJhcHBseVNJRlRvcG9sb2d5R3JvdXBpbmciLCJjb252ZXJ0SW50b1JldmVyc2libGVSZWFjdGlvbiIsIm1vdmVFZGdlIiwiZml4RXJyb3IiLCJ1bmZpeEVycm9yIiwiY2xvbmVIaWdoRGVncmVlTm9kZSIsInVuQ2xvbmVIaWdoRGVncmVlTm9kZSIsImNoYW5nZU1hcFR5cGUiLCJzZXRDb21wb3VuZFBhZGRpbmciLCJpc0VxdWFsIiwiZ3JvdXBDb21wb3VuZFR5cGUiLCJERUZBVUxUX0dST1VQX0NPTVBPVU5EX1RZUEUiLCJFREdFX1NUWUxFX05BTUVTIiwidG9wb2xvZ3lHcm91cGluZyIsInByb3BzIiwiYXBwbGllZCIsImluaXRNZXRhU3R5bGVNYXAiLCJhcHBseSIsImV2YWxPcHQiLCJtYXAiLCJncm91cHMiLCJnZXROb2RlR3JvdXBzIiwibWV0YUVkZ2VzIiwiZ2V0TWV0YUVkZ2VzIiwiY29tcG91bmRzIiwiZ2V0R3JvdXBDb21wb3VuZHMiLCJhcHBseUdyb3VwaW5nIiwidW5hcHBseSIsInRvUmVzdG9yZSIsInJlc3RvcmUiLCJvbGRWYWwiLCJtZXRhU3R5bGVNYXAiLCJuZXdWYWwiLCJwYXJlbnRzIiwidW5sb2NrR3JhcGhUb3BvbG9neSIsImNsYXNzTmFtZSIsImNsZWFyQXBwbGllZEZsYWciLCJzZXRBcHBsaWVkRmxhZyIsInRvZ2dsZUFwcGxpZWRGbGFnIiwib3B0IiwiaGFsdmVzIiwiZ2V0SGFsdmVzIiwiZmlyc3RQYXJ0Iiwic2Vjb25kUGFydCIsIm1lcmdlR3JvdXBzIiwiZ2V0UGFyZW50T3JTZWxmIiwiY2FsY0dyb3VwaW5nS2V5Iiwic3JjSWQiLCJ0Z3RJZCIsImdldEVkZ2VUeXBlIiwiYWRkVG9NYXBDaGFpbiIsImdyb3VwQ29tcG91bmRzIiwiY3JlYXRlR3JvdXBDb21wb3VuZCIsImNoaWxkcmVuRWRnZXMiLCJlZGdlc01hcCIsIm1ldGFFZGdlIiwiY3JlYXRlTWV0YUVkZ2VGb3IiLCJzdHlsZU5hbWUiLCJjb21tb25WYWwiLCJnZXRDb21tb25Qcm9wZXJ0eSIsImdyb3VwczEiLCJncm91cHMyIiwibm90TWVyZ2VkR3JzIiwibWVyZ2VkR3JzIiwiZ3IxIiwibWVyZ2VkIiwiY29uY2F0IiwiZ3IyIiwiaW5kZXgyIiwic2hvdWxkTWVyZ2UiLCJtZXJnZWRHciIsInJlbW92ZUF0IiwiZ3JvdXAxIiwiZ3JvdXAyIiwibm9kZTEiLCJub2RlMiIsImdldFVuZGlyZWN0ZWRFZGdlcyIsImlzVW5kaXJlY3RlZEVkZ2UiLCJ1bmRpcjEiLCJ1bmRpcjIiLCJpbjEiLCJpbjIiLCJvdXQxIiwib3V0MiIsImNvbXBhcmVFZGdlR3JvdXAiLCJpZDEiLCJpZDIiLCJtYXAxIiwiZmlsbElkVG9UeXBlU2V0TWFwIiwibWFwMiIsImZhaWxlZCIsIm90aGVyS2V5IiwiZWRnZUdyb3VwIiwibm9kZUlkIiwiZWRnZUlkIiwib3RoZXJFbmQiLCJhZGRUb1JlbGF0ZWRTZXQiLCJzaWRlU3RyIiwiU2V0IiwicyIsImhhbGZJbmRleCIsImZpcnN0SGFsZiIsInNsaWNlIiwic2Vjb25kSGFsZiIsImFyciIsIm9sZEVsZXMiLCJyZW1vdmVkRWxlcyIsImRlc2NlbmRhbnRzIiwiZ2V0Tm9kZVBvc2l0aW9ucyIsInBvc2l0aW9ucyIsImVhY2giLCJyZXR1cm5Ub1Bvc2l0aW9ucyIsImN1cnJlbnRQb3NpdGlvbnMiLCJwb3MiLCJzaXplTWFwIiwiYmlhc0wiLCJiaWFzUiIsImJpYXNUIiwiYmlhc0IiLCJfcHJpdmF0ZSIsImZvcmNlUmVuZGVyIiwib2xkU2lkZSIsInJlc3VsdFN0YXR1cyIsImN1cnJlbnRTdGF0dXMiLCJjbGFzc0RlZmF1bHRzIiwiaGFzT3duUHJvcGVydHkiLCJvbGRCZ09iaiIsImNvbnZlcnRlZEVkZ2UiLCJkaXN0YW5jZSIsIndlaWdodCIsInByb2Nlc3NJZCIsImVycm9yQ29kZSIsIm5ld05vZGVzIiwibmV3RWRnZXMiLCJvbGRFZGdlcyIsIm9sZEVkZ2UiLCJuZXdTb3VyY2UiLCJuZXdUYXJnZXQiLCJjbG9uZWRFZGdlIiwiY2xvbmUiLCJ3aXRoRGVzY2VuZGFudCIsImVsZXNUb1Jlc3RvcmUiLCJwb3NEaWZmIiwiZHVyYXRpb24iLCJlYXNpbmciLCJwYWRkaW5nIiwiY29tcGxldGUiLCJvbGRYIiwib2xkWSIsImNsYWN1bGF0ZU5ld0Nsb25lUG9zaXRpb24iLCJzb3VyY2VFbmRQb2ludFgiLCJzb3VyY2VFbmRQb2ludFkiLCJ0YXJnZXRFbmRQb2ludFgiLCJ0YXJnZXRFbmRQb2ludFkiLCJkZXNpcmVkRGlzdGFuY2UiLCJkaXJlY3Rpb24iLCJzcXJ0IiwicG93IiwiY3giLCJlZGdlQ2xvbmUiLCJzdGFydFBvc2l0aW9uIiwibmV3UG9zaXRpb24iLCJzb3VyY2VFbmRwb2ludCIsInRhcmdldEVuZHBvaW50IiwibmV3Tm9kZUlkIiwiY2xvbmVFZGdlIiwibnVtYmVyT2ZFZGdlcyIsImNsb25lSWQi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V0FBVyxNQUFNO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsYUFBYSxRQUFRO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsYUFBYSxFQUFFO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixhQUFhLFFBQVE7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxFQUFFO0FBQ2IsYUFBYSxPQUFPO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixhQUFhLFFBQVE7QUFDckI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLGFBQWEsRUFBRTtBQUNmO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLGFBQWEsUUFBUTtBQUNyQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxFQUFFO0FBQ2IsYUFBYSxPQUFPO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixhQUFhLFFBQVE7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixhQUFhLEVBQUU7QUFDZjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsYUFBYSxRQUFRO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLEVBQUU7QUFDYixhQUFhLE9BQU87QUFDcEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxFQUFFO0FBQ2IsYUFBYSxPQUFPO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxFQUFFO0FBQ2IsYUFBYSxPQUFPO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsYUFBYSxRQUFRO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsYUFBYSxFQUFFO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLGFBQWEsUUFBUTtBQUNyQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxFQUFFO0FBQ2IsYUFBYSxPQUFPO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsRUFBRTtBQUNiLFdBQVcsUUFB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QUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsU0FBUztBQUNwQixXQUFXLFNBQVM7QUFDcEIsV0FBVyxPQUFPO0FBQ2xCLGFBQWEsUUFBUTtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLFNBQVM7QUFDcEIsV0FBVyxTQUFTO0FBQ3BCLFdBQVcsT0FBTztBQUNsQixhQUFhLFFBQVE7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtB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V0FDRjtXQUNBO1dBQ0EsQ0FBQyxJOzs7OztXQ1BEO1dBQ0E7V0FDQTtXQUNBO1dBQ0EsRTs7Ozs7VUNKQTtVQUNBO1VBQ0E7VUFDQSIsImZpbGUiOiJjaGlzZS5qcyIsInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbiB3ZWJwYWNrVW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbihyb290LCBmYWN0b3J5KSB7XG5cdGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0Jylcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoKTtcblx0ZWxzZSBpZih0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpXG5cdFx0ZGVmaW5lKFtdLCBmYWN0b3J5KTtcblx0ZWxzZSBpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpXG5cdFx0ZXhwb3J0c1tcImNoaXNlXCJdID0gZmFjdG9yeSgpO1xuXHRlbHNlXG5cdFx0cm9vdFtcImNoaXNlXCJdID0gZmFjdG9yeSgpO1xufSkoc2VsZiwgZnVuY3Rpb24oKSB7XG5yZXR1cm4gIiwiKGZ1bmN0aW9uKCl7XG4gIHZhciBjaGlzZSA9IGZ1bmN0aW9uKF9vcHRpb25zKSB7XG5cbiAgICB2YXIgcGFyYW0gPSB7fTtcblxuICAgIC8vIEFjY2VzcyB0aGUgbGlic1xuICAgIHZhciBsaWJzID0gcmVxdWlyZSgnLi91dGlsaXRpZXMvbGliLXV0aWxpdGllcycpLmdldExpYnMoKTtcblxuICAgIHZhciBvcHRpb25VdGlsaXRpZXMgPSByZXF1aXJlKCcuL3V0aWxpdGllcy9vcHRpb24tdXRpbGl0aWVzLWZhY3RvcnknKSgpO1xuICAgIHZhciBvcHRpb25zID0gb3B0aW9uVXRpbGl0aWVzLmV4dGVuZE9wdGlvbnMoX29wdGlvbnMpOyAvLyBFeHRlbmRzIHRoZSBkZWZhdWx0IG9wdGlvbnMgd2l0aCB0aGUgZ2l2ZW4gb3B0aW9uc1xuXG4gICAgLy8gQ3JlYXRlIGFuIHNiZ252aXogaW5zdGFuY2VcbiAgICB2YXIgc2JnbnZpekluc3RhbmNlVXRpbGl0aWVzID0gcmVxdWlyZSgnLi91dGlsaXRpZXMvc2JnbnZpei1pbnN0YW5jZS11dGlsaXRpZXMtZmFjdG9yeScpKCk7XG4gICAgdmFyIHNiZ252aXpJbnN0YW5jZSA9IHNiZ252aXpJbnN0YW5jZVV0aWxpdGllcyhvcHRpb25zKTtcblxuICAgIC8vIFJlZ2lzdGVyIHVuZG8vcmVkbyBhY3Rpb25zXG4gICAgdmFyIHJlZ2lzdGVyVW5kb1JlZG9BY3Rpb25zID0gcmVxdWlyZSgnLi91dGlsaXRpZXMvcmVnaXN0ZXItdW5kby1yZWRvLWFjdGlvbnMtZmFjdG9yeScpKCk7XG5cbiAgICB2YXIgbWFpblV0aWxpdGllcyA9IHJlcXVpcmUoJy4vdXRpbGl0aWVzL21haW4tdXRpbGl0aWVzLWZhY3RvcnknKSgpO1xuICAgIHZhciBlbGVtZW50VXRpbGl0aWVzRXh0ZW5kZXIgPSByZXF1aXJlKCcuL3V0aWxpdGllcy9lbGVtZW50LXV0aWxpdGllcy1leHRlbmRlci1mYWN0b3J5JykoKTtcbiAgICB2YXIgdW5kb1JlZG9BY3Rpb25GdW5jdGlvbnNFeHRlbmRlciA9IHJlcXVpcmUoJy4vdXRpbGl0aWVzL3VyLWFjdGlvbi1mdW5jdGlvbnMtZXh0ZW5kZXItZmFjdG9yeScpKCk7XG4gICAgdmFyIHNpZlRvcG9sb2d5R3JvdXBpbmcgPSByZXF1aXJlKCcuL3V0aWxpdGllcy90b3BvbG9neS1ncm91cGluZy1mYWN0b3J5JykoKTtcblxuICAgIHZhciBlbGVtZW50VXRpbGl0aWVzID0gIHNiZ252aXpJbnN0YW5jZS5lbGVtZW50VXRpbGl0aWVzO1xuICAgIHZhciB1bmRvUmVkb0FjdGlvbkZ1bmN0aW9ucyA9IHNiZ252aXpJbnN0YW5jZS51bmRvUmVkb0FjdGlvbkZ1bmN0aW9ucztcblxuICAgIHBhcmFtLnNiZ252aXpJbnN0YW5jZVV0aWxpdGllcyA9IHNiZ252aXpJbnN0YW5jZVV0aWxpdGllcztcbiAgICBwYXJhbS5vcHRpb25VdGlsaXRpZXMgPSBvcHRpb25VdGlsaXRpZXM7XG4gICAgcGFyYW0uZWxlbWVudFV0aWxpdGllcyA9IGVsZW1lbnRVdGlsaXRpZXM7XG4gICAgcGFyYW0udW5kb1JlZG9BY3Rpb25GdW5jdGlvbnMgPSB1bmRvUmVkb0FjdGlvbkZ1bmN0aW9ucztcbiAgICBwYXJhbS5zaWZUb3BvbG9neUdyb3VwaW5nID0gc2lmVG9wb2xvZ3lHcm91cGluZztcblxuICAgIHZhciBzaG91bGRBcHBseSA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHBhcmFtLmVsZW1lbnRVdGlsaXRpZXMubWFwVHlwZSA9PT0gJ1NJRic7XG4gICAgfTtcblxuICAgIHVuZG9SZWRvQWN0aW9uRnVuY3Rpb25zRXh0ZW5kZXIocGFyYW0pO1xuICAgIGVsZW1lbnRVdGlsaXRpZXNFeHRlbmRlcihwYXJhbSk7XG4gICAgcmVnaXN0ZXJVbmRvUmVkb0FjdGlvbnMocGFyYW0pO1xuICAgIG1haW5VdGlsaXRpZXMocGFyYW0pO1xuICAgIHNpZlRvcG9sb2d5R3JvdXBpbmcocGFyYW0sIHttZXRhRWRnZUlkZW50aWZpZXI6ICdzaWYtbWV0YScsIGxvY2tHcmFwaFRvcG9sb2d5OiB0cnVlLCBzaG91bGRBcHBseX0pO1xuXG4gICAgLy8gRXhwb3NlIHRoZSBhcGlcbiAgICB2YXIgYXBpID0ge307XG5cbiAgICAvLyBFeHBvc2UgdGhlIHByb3BlcnRpZXMgaW5oZXJpdGVkIGZyb20gc2JnbnZpelxuICAgIC8vIHRoZW4gb3ZlcnJpZGUgc29tZSBvZiB0aGVzZSBwcm9wZXJ0aWVzIGFuZCBleHBvc2Ugc29tZSBuZXcgcHJvcGVydGllc1xuICAgIGZvciAodmFyIHByb3AgaW4gc2JnbnZpekluc3RhbmNlKSB7XG4gICAgICBhcGlbcHJvcF0gPSBzYmdudml6SW5zdGFuY2VbcHJvcF07XG4gICAgfVxuXG4gICAgLy8gRXhwb3NlIGVhY2ggbWFpbiB1dGlsaXR5IHNlcGVyYXRlbHlcbiAgICBmb3IgKHZhciBwcm9wIGluIG1haW5VdGlsaXRpZXMpIHtcbiAgICAgIGFwaVtwcm9wXSA9IG1haW5VdGlsaXRpZXNbcHJvcF07XG4gICAgfVxuXG4gICAgLy8gRXhwb3NlIGdldFNiZ252aXpJbnN0YW5jZSgpXG4gICAgYXBpLmdldFNiZ252aXpJbnN0YW5jZSA9IHNiZ252aXpJbnN0YW5jZVV0aWxpdGllcy5nZXRJbnN0YW5jZTtcblxuICAgIC8vIEV4cG9zZSBlbGVtZW50VXRpbGl0aWVzIGFuZCB1bmRvUmVkb0FjdGlvbkZ1bmN0aW9ucyBhcyBpc1xuICAgIGFwaS5lbGVtZW50VXRpbGl0aWVzID0gZWxlbWVudFV0aWxpdGllcztcbiAgICBhcGkudW5kb1JlZG9BY3Rpb25GdW5jdGlvbnMgPSB1bmRvUmVkb0FjdGlvbkZ1bmN0aW9ucztcbiAgICBhcGkuc2lmVG9wb2xvZ3lHcm91cGluZyA9IHNpZlRvcG9sb2d5R3JvdXBpbmc7XG5cbiAgICByZXR1cm4gYXBpO1xuICB9O1xuXG4gIC8vIFJlZ2lzdGVyIGNoaXNlIHdpdGggZ2l2ZW4gbGlicmFyaWVzXG4gIGNoaXNlLnJlZ2lzdGVyID0gZnVuY3Rpb24gKF9saWJzKSB7XG5cbiAgICB2YXIgbGlicyA9IHt9O1xuICAgIGxpYnMualF1ZXJ5ID0gX2xpYnMualF1ZXJ5IHx8IGpRdWVyeTtcbiAgICBsaWJzLmN5dG9zY2FwZSA9IF9saWJzLmN5dG9zY2FwZSB8fCBjeXRvc2NhcGU7XG4gICAgbGlicy5zYmdudml6ID0gX2xpYnMuc2JnbnZpeiB8fCBzYmdudml6O1xuICAgIGxpYnMuc2F2ZUFzID0gX2xpYnMuZmlsZXNhdmVyID8gX2xpYnMuZmlsZXNhdmVyLnNhdmVBcyA6IHNhdmVBcztcblxuICAgIGxpYnMuc2JnbnZpei5yZWdpc3RlcihfbGlicyk7IC8vIFJlZ2lzdGVyIHNiZ252aXogd2l0aCB0aGUgZ2l2ZW4gbGlic1xuXG4gICAgLy8gaW5oZXJpdCBleHBvc2VkIHN0YXRpYyBwcm9wZXJ0aWVzIG9mIHNiZ252aXogb3RoZXIgdGhhbiByZWdpc3RlclxuICAgIGZvciAodmFyIHByb3AgaW4gbGlicy5zYmdudml6KSB7XG4gICAgICBpZiAocHJvcCAhPT0gJ3JlZ2lzdGVyJykge1xuICAgICAgICBjaGlzZVtwcm9wXSA9IGxpYnMuc2JnbnZpeltwcm9wXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBTZXQgdGhlIGxpYnJhcmllcyB0byBhY2Nlc3MgdGhlbSBmcm9tIGFueSBmaWxlXG4gICAgdmFyIGxpYlV0aWxpdGllcyA9IHJlcXVpcmUoJy4vdXRpbGl0aWVzL2xpYi11dGlsaXRpZXMnKTtcbiAgICBsaWJVdGlsaXRpZXMuc2V0TGlicyhsaWJzKTtcbiAgfTtcblxuICBpZiAoIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnICYmIG1vZHVsZS5leHBvcnRzICkge1xuICAgIG1vZHVsZS5leHBvcnRzID0gY2hpc2U7XG4gIH1cbn0pKCk7XG4iLCIvLyBFeHRlbmRzIHNiZ252aXouZWxlbWVudFV0aWxpdGllc1xudmFyIGxpYnMgPSByZXF1aXJlKCcuL2xpYi11dGlsaXRpZXMnKS5nZXRMaWJzKCk7XG52YXIgalF1ZXJ5ID0gJCA9IGxpYnMualF1ZXJ5O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIG9wdGlvbnMsIHNiZ252aXpJbnN0YW5jZSwgZWxlbWVudFV0aWxpdGllcywgY3k7XG5cbiAgZnVuY3Rpb24gZWxlbWVudFV0aWxpdGllc0V4dGVuZGVyIChwYXJhbSkge1xuICAgIHNiZ252aXpJbnN0YW5jZSA9IHBhcmFtLnNiZ252aXpJbnN0YW5jZVV0aWxpdGllcy5nZXRJbnN0YW5jZSgpO1xuICAgIG9wdGlvbnMgPSBwYXJhbS5vcHRpb25VdGlsaXRpZXMuZ2V0T3B0aW9ucygpO1xuICAgIGVsZW1lbnRVdGlsaXRpZXMgPSBzYmdudml6SW5zdGFuY2UuZWxlbWVudFV0aWxpdGllcztcbiAgICBjeSA9IHBhcmFtLnNiZ252aXpJbnN0YW5jZVV0aWxpdGllcy5nZXRDeSgpO1xuXG4gICAgZXh0ZW5kKCk7XG5cbiAgICAvLyBSZXR1cm4gdGhlIGV4dGVuZGVkIGVsZW1lbnRVdGlsaXRpZXNcbiAgICByZXR1cm4gZWxlbWVudFV0aWxpdGllcztcbiAgfVxuXG4gIC8vIEV4dGVuZHMgZWxlbWVudFV0aWxpdGllcyB3aXRoIGNoaXNlIHNwZWNpZmljIGZhY2lsaXRpZXNcbiAgZnVuY3Rpb24gZXh0ZW5kICgpIHtcbiAgICAvLyBTZWN0aW9uIFN0YXJ0XG4gICAgLy8gQWRkIHJlbW92ZSB1dGlsaXRpZXNcblxuICAgIGVsZW1lbnRVdGlsaXRpZXMuYWRkTm9kZSA9IGZ1bmN0aW9uICh4LCB5LCBub2RlUGFyYW1zLCBpZCwgcGFyZW50LCB2aXNpYmlsaXR5KSB7XG4gICAgICBpZiAodHlwZW9mIG5vZGVQYXJhbXMgIT0gJ29iamVjdCcpe1xuICAgICAgICB2YXIgc2JnbmNsYXNzID0gbm9kZVBhcmFtcztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFyIHNiZ25jbGFzcyA9IG5vZGVQYXJhbXMuY2xhc3M7XG4gICAgICAgICAgdmFyIGxhbmd1YWdlID0gbm9kZVBhcmFtcy5sYW5ndWFnZTtcbiAgICAgIH1cblxuICAgICAgdmFyIGNzcyA9IHt9O1xuICAgICAgLy8gaWYgdGhlcmUgaXMgbm8gc3BlY2lmaWMgZGVmYXVsdCB3aWR0aCBvciBoZWlnaHQgZm9yXG4gICAgICAvLyBzYmduY2xhc3MgdGhlc2Ugc2l6ZXMgYXJlIHVzZWRcbiAgICAgIHZhciBkZWZhdWx0V2lkdGggPSA1MDtcbiAgICAgIHZhciBkZWZhdWx0SGVpZ2h0ID0gNTA7XG5cbiAgICAgIGlmICh2aXNpYmlsaXR5KSB7XG4gICAgICAgIGNzcy52aXNpYmlsaXR5ID0gdmlzaWJpbGl0eTtcbiAgICAgIH1cblxuICAgICAgdmFyIGRhdGEgPSB7XG4gICAgICAgIGNsYXNzOiBzYmduY2xhc3MsXG4gICAgXHQgIGxhbmd1YWdlOiBsYW5ndWFnZSxcbiAgICAgICAgYmJveDoge1xuICAgICAgICAgIHc6IGRlZmF1bHRXaWR0aCxcbiAgICAgICAgICBoOiBkZWZhdWx0SGVpZ2h0LFxuICAgICAgICAgIHg6IHgsXG4gICAgICAgICAgeTogeVxuICAgICAgICB9LFxuICAgICAgICBzdGF0ZXNhbmRpbmZvczogW10sXG4gICAgICAgIHBvcnRzOiBbXVxuICAgICAgfTtcblxuICAgICAgaWYoaWQpIHtcbiAgICAgICAgZGF0YS5pZCA9IGlkO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIGRhdGEuaWQgPSBlbGVtZW50VXRpbGl0aWVzLmdlbmVyYXRlTm9kZUlkKCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChwYXJlbnQpIHtcbiAgICAgICAgZGF0YS5wYXJlbnQgPSBwYXJlbnQ7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuZXh0ZW5kTm9kZURhdGFXaXRoQ2xhc3NEZWZhdWx0cyggZGF0YSwgc2JnbmNsYXNzICk7XG5cbiAgICAgIC8vIHNvbWUgZGVmYXVsdHMgYXJlIG5vdCBzZXQgYnkgZXh0ZW5kTm9kZURhdGFXaXRoQ2xhc3NEZWZhdWx0cygpXG4gICAgICB2YXIgZGVmYXVsdHMgPSB0aGlzLmdldERlZmF1bHRQcm9wZXJ0aWVzKCBzYmduY2xhc3MgKTtcblxuICAgICAgaWYgKCBkZWZhdWx0c1sgJ211bHRpbWVyJyBdICkge1xuICAgICAgICBkYXRhLmNsYXNzICs9ICcgbXVsdGltZXInO1xuICAgICAgfVxuXG4gICAgICBpZiAoIGRlZmF1bHRzWyAnY2xvbmVtYXJrZXInIF0gKSB7XG4gICAgICAgIGRhdGFbICdjbG9uZW1hcmtlcicgXSA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIGRhdGEuYmJveFsgJ3cnIF0gPSBkZWZhdWx0c1sgJ3dpZHRoJyBdO1xuICAgICAgZGF0YS5iYm94WyAnaCcgXSA9IGRlZmF1bHRzWyAnaGVpZ2h0JyBdO1xuXG4gICAgICB2YXIgZWxlcyA9IGN5LmFkZCh7XG4gICAgICAgIGdyb3VwOiBcIm5vZGVzXCIsXG4gICAgICAgIGRhdGE6IGRhdGEsXG4gICAgICAgIGNzczogY3NzLFxuICAgICAgICBwb3NpdGlvbjoge1xuICAgICAgICAgIHg6IHgsXG4gICAgICAgICAgeTogeVxuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgdmFyIG5ld05vZGUgPSBlbGVzW2VsZXMubGVuZ3RoIC0gMV07XG4gICAgICAvLyBHZXQgdGhlIGRlZmF1bHQgcG9ydHMgb3JkZXJpbmcgZm9yIHRoZSBub2RlcyB3aXRoIGdpdmVuIHNiZ25jbGFzc1xuICAgICAgdmFyIG9yZGVyaW5nID0gZGVmYXVsdHNbJ3BvcnRzLW9yZGVyaW5nJ107XG5cbiAgICAgIC8vIElmIHRoZXJlIGlzIGEgZGVmYXVsdCBwb3J0cyBvcmRlcmluZyBmb3IgdGhlIG5vZGVzIHdpdGggZ2l2ZW4gc2JnbmNsYXNzIGFuZCBpdCBpcyBkaWZmZXJlbnQgdGhhbiAnbm9uZScgc2V0IHRoZSBwb3J0cyBvcmRlcmluZyB0byB0aGF0IG9yZGVyaW5nXG4gICAgICBpZiAob3JkZXJpbmcgJiYgb3JkZXJpbmcgIT09ICdub25lJykge1xuICAgICAgICB0aGlzLnNldFBvcnRzT3JkZXJpbmcobmV3Tm9kZSwgb3JkZXJpbmcpO1xuICAgICAgfVxuXG4gICAgICBpZiAobGFuZ3VhZ2UgPT0gXCJBRlwiICYmICFlbGVtZW50VXRpbGl0aWVzLmNhbkhhdmVNdWx0aXBsZVVuaXRPZkluZm9ybWF0aW9uKG5ld05vZGUpKXtcbiAgICAgICAgaWYgKHNiZ25jbGFzcyAhPSBcIkJBIHBsYWluXCIpIHsgLy8gaWYgQUYgbm9kZSBjYW4gaGF2ZSBsYWJlbCBpLmU6IG5vdCBwbGFpbiBiaW9sb2dpY2FsIGFjdGl2aXR5XG4gICAgICAgICAgdmFyIHVvaV9vYmogPSB7XG4gICAgICAgICAgICBjbGF6ejogXCJ1bml0IG9mIGluZm9ybWF0aW9uXCJcbiAgICAgICAgICB9O1xuICAgICAgICAgIHVvaV9vYmoubGFiZWwgPSB7XG4gICAgICAgICAgICB0ZXh0OiBcIlwiXG4gICAgICAgICAgfTtcblxuICAgICAgICAgIHVvaV9vYmouYmJveCA9IHtcbiAgICAgICAgICAgICB3OiAxMixcbiAgICAgICAgICAgICBoOiAxMlxuICAgICAgICAgIH07XG4gICAgICAgICAgZWxlbWVudFV0aWxpdGllcy5hZGRTdGF0ZU9ySW5mb0JveChuZXdOb2RlLCB1b2lfb2JqKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBub2RlIGJnIGltYWdlIHdhcyB1bmV4cGVjdGVkbHkgbm90IHJlbmRlcmVkIHVudGlsIGl0IGlzIGNsaWNrZWRcbiAgICAgIC8vIHVzZSB0aGlzIGRpcnR5IGhhY2sgdW50aWwgZmluZGluZyBhIHNvbHV0aW9uIHRvIHRoZSBwcm9ibGVtXG4gICAgICB2YXIgYmdJbWFnZSA9IG5ld05vZGUuZGF0YSgnYmFja2dyb3VuZC1pbWFnZScpO1xuICAgICAgaWYgKCBiZ0ltYWdlICkge1xuICAgICAgICBuZXdOb2RlLmRhdGEoICdiYWNrZ3JvdW5kLWltYWdlJywgYmdJbWFnZSApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbmV3Tm9kZTtcbiAgICB9O1xuXG4gICAgLy9TYXZlcyBvbGQgYXV4IHVuaXRzIG9mIGdpdmVuIG5vZGVcbiAgICBlbGVtZW50VXRpbGl0aWVzLnNhdmVVbml0cyA9IGZ1bmN0aW9uKG5vZGUpIHtcbiAgICAgIHZhciB0ZW1wRGF0YSA9IFtdO1xuICAgICAgdmFyIGluZGV4ID0gMDtcbiAgICAgIG5vZGUuZGF0YSgnc3RhdGVzYW5kaW5mb3MnKS5mb3JFYWNoKCBmdW5jdGlvbihlbGUpIHtcbiAgICAgICAgdGVtcERhdGEucHVzaCh7XG4gICAgICAgICAgeDogZWxlLmJib3gueCxcbiAgICAgICAgICB5OiBlbGUuYmJveC55LFxuICAgICAgICAgIGFuY2hvclNpZGU6IGVsZS5hbmNob3JTaWRlLFxuICAgICAgICB9KTtcbiAgICAgICAgaW5kZXgrKztcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHRlbXBEYXRhO1xuICAgIH07XG5cbiAgICAvL1Jlc3RvcmVzIGZyb20gZ2l2ZW4gZGF0YVxuICAgIGVsZW1lbnRVdGlsaXRpZXMucmVzdG9yZVVuaXRzID0gZnVuY3Rpb24obm9kZSwgZGF0YSkge1xuICAgICAgdmFyIGluZGV4ID0gMDtcbiAgICAgIG5vZGUuZGF0YSgnc3RhdGVzYW5kaW5mb3MnKS5mb3JFYWNoKCBmdW5jdGlvbihlbGUpIHtcbiAgICAgICAgaWYgKGRhdGEgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGVsZS5iYm94LnggPSBkYXRhW2luZGV4XS54O1xuICAgICAgICAgIGVsZS5iYm94LnkgPSBkYXRhW2luZGV4XS55XG4gICAgICAgICAgdmFyIGFuY2hvclNpZGUgPSBlbGUuYW5jaG9yU2lkZTtcbiAgICAgICAgICBlbGUuYW5jaG9yU2lkZSA9IGRhdGFbaW5kZXhdLmFuY2hvclNpZGU7XG4gICAgICAgICAgZWxlbWVudFV0aWxpdGllcy5tb2RpZnlVbml0cyhub2RlLCBlbGUsIGFuY2hvclNpZGUpO1xuICAgICAgICAgIGluZGV4Kys7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICAvL01vZGlmeSBhdXggdW5pdCBsYXlvdXRzXG4gICAgZWxlbWVudFV0aWxpdGllcy5tb2RpZnlVbml0cyA9IGZ1bmN0aW9uIChub2RlLCBlbGUsIGFuY2hvclNpZGUpIHtcbiAgICAgIGluc3RhbmNlLmNsYXNzZXMuQXV4VW5pdExheW91dC5tb2RpZnlVbml0cyhub2RlLCBlbGUsIGFuY2hvclNpZGUsIGN5KTtcbiAgICB9O1xuXG5cbiAgICAvL0ZvciByZXZlcnNpYmxlIHJlYWN0aW9ucyBib3RoIHNpZGUgb2YgdGhlIHByb2Nlc3MgY2FuIGJlIGlucHV0L291dHB1dFxuICAgIC8vR3JvdXAgSUQgaWRlbnRpZmllcyB0byB3aGljaCBncm91cCBvZiBub2RlcyB0aGUgZWRnZSBpcyBnb2luZyB0byBiZSBjb25uZWN0ZWQgZm9yIHJldmVyc2libGUgcmVhY3Rpb25zKDA6IGdyb3VwIDEgSUQgYW5kIDE6Z3JvdXAgMiBJRClcbiAgICBlbGVtZW50VXRpbGl0aWVzLmFkZEVkZ2UgPSBmdW5jdGlvbiAoc291cmNlLCB0YXJnZXQsIGVkZ2VQYXJhbXMsIGlkLCB2aXNpYmlsaXR5LCBncm91cElEICkge1xuICAgICAgaWYgKHR5cGVvZiBlZGdlUGFyYW1zICE9ICdvYmplY3QnKXtcbiAgICAgICAgdmFyIHNiZ25jbGFzcyA9IGVkZ2VQYXJhbXM7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhciBzYmduY2xhc3MgPSBlZGdlUGFyYW1zLmNsYXNzO1xuICAgICAgICAgIHZhciBsYW5ndWFnZSA9IGVkZ2VQYXJhbXMubGFuZ3VhZ2U7XG4gICAgICB9XG5cbiAgICAgIHZhciBjc3MgPSB7fTtcblxuICAgICAgaWYgKHZpc2liaWxpdHkpIHtcbiAgICAgICAgY3NzLnZpc2liaWxpdHkgPSB2aXNpYmlsaXR5O1xuICAgICAgfVxuXG4gICAgICB2YXIgZGF0YSA9IHtcbiAgICAgICAgICBzb3VyY2U6IHNvdXJjZSxcbiAgICAgICAgICB0YXJnZXQ6IHRhcmdldCxcbiAgICAgICAgICBjbGFzczogc2JnbmNsYXNzLFxuICAgICAgICAgIGxhbmd1YWdlOiBsYW5ndWFnZSxcbiAgICAgIH07XG5cbiAgICAgIHZhciBkZWZhdWx0cyA9IGVsZW1lbnRVdGlsaXRpZXMuZ2V0RGVmYXVsdFByb3BlcnRpZXMoIHNiZ25jbGFzcyApO1xuXG4gICAgICAvLyBleHRlbmQgdGhlIGRhdGEgd2l0aCBkZWZhdWx0IHByb3BlcnRpZXMgb2YgZWRnZSBzdHlsZVxuICAgICAgT2JqZWN0LmtleXMoIGRlZmF1bHRzICkuZm9yRWFjaCggZnVuY3Rpb24oIHByb3AgKSB7XG4gICAgICAgIGRhdGFbIHByb3AgXSA9IGRlZmF1bHRzWyBwcm9wIF07XG4gICAgICB9ICk7XG5cbiAgICAgIGlmKGlkKSB7XG4gICAgICAgIGRhdGEuaWQgPSBpZDtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICBkYXRhLmlkID0gZWxlbWVudFV0aWxpdGllcy5nZW5lcmF0ZUVkZ2VJZCgpO1xuICAgICAgfVxuXG4gICAgICBpZihlbGVtZW50VXRpbGl0aWVzLmNhbkhhdmVTQkdOQ2FyZGluYWxpdHkoc2JnbmNsYXNzKSl7XG4gICAgICAgIGRhdGEuY2FyZGluYWxpdHkgPSAwO1xuICAgICAgfVxuXG4gICAgICB2YXIgc291cmNlTm9kZSA9IGN5LmdldEVsZW1lbnRCeUlkKHNvdXJjZSk7IC8vIFRoZSBvcmlnaW5hbCBzb3VyY2Ugbm9kZVxuICAgICAgdmFyIHRhcmdldE5vZGUgPSBjeS5nZXRFbGVtZW50QnlJZCh0YXJnZXQpOyAvLyBUaGUgb3JpZ2luYWwgdGFyZ2V0IG5vZGVcbiAgICAgIHZhciBzb3VyY2VIYXNQb3J0cyA9IHNvdXJjZU5vZGUuZGF0YSgncG9ydHMnKS5sZW5ndGggPT09IDI7XG4gICAgICB2YXIgdGFyZ2V0SGFzUG9ydHMgPSB0YXJnZXROb2RlLmRhdGEoJ3BvcnRzJykubGVuZ3RoID09PSAyO1xuICAgICAgLy8gVGhlIHBvcnRzb3VyY2UgYW5kIHBvcnR0YXJnZXQgdmFyaWFibGVzXG4gICAgICB2YXIgcG9ydHNvdXJjZTtcbiAgICAgIHZhciBwb3J0dGFyZ2V0O1xuXG4gICAgICAvKlxuICAgICAgICogR2V0IGlucHV0L291dHB1dCBwb3J0IGlkJ3Mgb2YgYSBub2RlIHdpdGggdGhlIGFzc3VtcHRpb24gdGhhdCB0aGUgbm9kZSBoYXMgdmFsaWQgcG9ydHMuXG4gICAgICAgKi9cbiAgICAgIHZhciBnZXRJT1BvcnRJZHMgPSBmdW5jdGlvbiAobm9kZSkge1xuICAgICAgICB2YXIgbm9kZUlucHV0UG9ydElkLCBub2RlT3V0cHV0UG9ydElkO1xuICAgICAgICB2YXIgbm9kZVBvcnRzT3JkZXJpbmcgPSBzYmdudml6SW5zdGFuY2UuZWxlbWVudFV0aWxpdGllcy5nZXRQb3J0c09yZGVyaW5nKG5vZGUpO1xuICAgICAgICB2YXIgbm9kZVBvcnRzID0gbm9kZS5kYXRhKCdwb3J0cycpO1xuICAgICAgICBpZiAoIG5vZGVQb3J0c09yZGVyaW5nID09PSAnTC10by1SJyB8fCBub2RlUG9ydHNPcmRlcmluZyA9PT0gJ1ItdG8tTCcgKSB7XG4gICAgICAgICAgdmFyIGxlZnRQb3J0SWQgPSBub2RlUG9ydHNbMF0ueCA8IDAgPyBub2RlUG9ydHNbMF0uaWQgOiBub2RlUG9ydHNbMV0uaWQ7IC8vIFRoZSB4IHZhbHVlIG9mIGxlZnQgcG9ydCBpcyBzdXBwb3NlZCB0byBiZSBuZWdhdGl2ZVxuICAgICAgICAgIHZhciByaWdodFBvcnRJZCA9IG5vZGVQb3J0c1swXS54ID4gMCA/IG5vZGVQb3J0c1swXS5pZCA6IG5vZGVQb3J0c1sxXS5pZDsgLy8gVGhlIHggdmFsdWUgb2YgcmlnaHQgcG9ydCBpcyBzdXBwb3NlZCB0byBiZSBwb3NpdGl2ZVxuICAgICAgICAgIC8qXG4gICAgICAgICAgICogSWYgdGhlIHBvcnQgb3JkZXJpbmcgaXMgbGVmdCB0byByaWdodCB0aGVuIHRoZSBpbnB1dCBwb3J0IGlzIHRoZSBsZWZ0IHBvcnQgYW5kIHRoZSBvdXRwdXQgcG9ydCBpcyB0aGUgcmlnaHQgcG9ydC5cbiAgICAgICAgICAgKiBFbHNlIGlmIGl0IGlzIHJpZ2h0IHRvIGxlZnQgaXQgaXMgdmljZSB2ZXJzYVxuICAgICAgICAgICAqL1xuICAgICAgICAgIG5vZGVJbnB1dFBvcnRJZCA9IG5vZGVQb3J0c09yZGVyaW5nID09PSAnTC10by1SJyA/IGxlZnRQb3J0SWQgOiByaWdodFBvcnRJZDtcbiAgICAgICAgICBub2RlT3V0cHV0UG9ydElkID0gbm9kZVBvcnRzT3JkZXJpbmcgPT09ICdSLXRvLUwnID8gbGVmdFBvcnRJZCA6IHJpZ2h0UG9ydElkO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKCBub2RlUG9ydHNPcmRlcmluZyA9PT0gJ1QtdG8tQicgfHwgbm9kZVBvcnRzT3JkZXJpbmcgPT09ICdCLXRvLVQnICl7XG4gICAgICAgICAgdmFyIHRvcFBvcnRJZCA9IG5vZGVQb3J0c1swXS55IDwgMCA/IG5vZGVQb3J0c1swXS5pZCA6IG5vZGVQb3J0c1sxXS5pZDsgLy8gVGhlIHkgdmFsdWUgb2YgdG9wIHBvcnQgaXMgc3VwcG9zZWQgdG8gYmUgbmVnYXRpdmVcbiAgICAgICAgICB2YXIgYm90dG9tUG9ydElkID0gbm9kZVBvcnRzWzBdLnkgPiAwID8gbm9kZVBvcnRzWzBdLmlkIDogbm9kZVBvcnRzWzFdLmlkOyAvLyBUaGUgeSB2YWx1ZSBvZiBib3R0b20gcG9ydCBpcyBzdXBwb3NlZCB0byBiZSBwb3NpdGl2ZVxuICAgICAgICAgIC8qXG4gICAgICAgICAgICogSWYgdGhlIHBvcnQgb3JkZXJpbmcgaXMgdG9wIHRvIGJvdHRvbSB0aGVuIHRoZSBpbnB1dCBwb3J0IGlzIHRoZSB0b3AgcG9ydCBhbmQgdGhlIG91dHB1dCBwb3J0IGlzIHRoZSBib3R0b20gcG9ydC5cbiAgICAgICAgICAgKiBFbHNlIGlmIGl0IGlzIHJpZ2h0IHRvIGxlZnQgaXQgaXMgdmljZSB2ZXJzYVxuICAgICAgICAgICAqL1xuICAgICAgICAgIG5vZGVJbnB1dFBvcnRJZCA9IG5vZGVQb3J0c09yZGVyaW5nID09PSAnVC10by1CJyA/IHRvcFBvcnRJZCA6IGJvdHRvbVBvcnRJZDtcbiAgICAgICAgICBub2RlT3V0cHV0UG9ydElkID0gbm9kZVBvcnRzT3JkZXJpbmcgPT09ICdCLXRvLVQnID8gdG9wUG9ydElkIDogYm90dG9tUG9ydElkO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gUmV0dXJuIGFuIG9iamVjdCBjb250YWluaW5nIHRoZSBJTyBwb3J0cyBvZiB0aGUgbm9kZVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGlucHV0UG9ydElkOiBub2RlSW5wdXRQb3J0SWQsXG4gICAgICAgICAgb3V0cHV0UG9ydElkOiBub2RlT3V0cHV0UG9ydElkXG4gICAgICAgIH07XG4gICAgICB9O1xuXG4gICAgICAvLyBJZiBhdCBsZWFzdCBvbmUgZW5kIG9mIHRoZSBlZGdlIGhhcyBwb3J0cyB0aGVuIHdlIHNob3VsZCBkZXRlcm1pbmUgdGhlIHBvcnRzIHdoZXJlIHRoZSBlZGdlIHNob3VsZCBiZSBjb25uZWN0ZWQuXG4gICAgICBpZiAoc291cmNlSGFzUG9ydHMgfHwgdGFyZ2V0SGFzUG9ydHMpIHtcbiAgICAgICAgdmFyIHNvdXJjZU5vZGVJbnB1dFBvcnRJZCwgc291cmNlTm9kZU91dHB1dFBvcnRJZCwgdGFyZ2V0Tm9kZUlucHV0UG9ydElkLCB0YXJnZXROb2RlT3V0cHV0UG9ydElkO1xuXG4gICAgICAgIC8vIElmIHNvdXJjZSBub2RlIGhhcyBwb3J0cyBzZXQgdGhlIHZhcmlhYmxlcyBkZWRpY2F0ZWQgZm9yIGl0cyBJTyBwb3J0c1xuICAgICAgICBpZiAoIHNvdXJjZUhhc1BvcnRzICkge1xuICAgICAgICAgIHZhciBpb1BvcnRzID0gZ2V0SU9Qb3J0SWRzKHNvdXJjZU5vZGUpO1xuICAgICAgICAgIHNvdXJjZU5vZGVJbnB1dFBvcnRJZCA9IGlvUG9ydHMuaW5wdXRQb3J0SWQ7XG4gICAgICAgICAgc291cmNlTm9kZU91dHB1dFBvcnRJZCA9IGlvUG9ydHMub3V0cHV0UG9ydElkO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gSWYgdGFyZ2V0IG5vZGUgaGFzIHBvcnRzIHNldCB0aGUgdmFyaWFibGVzIGRlZGljYXRlZCBmb3IgaXRzIElPIHBvcnRzXG4gICAgICAgIGlmICggdGFyZ2V0SGFzUG9ydHMgKSB7XG4gICAgICAgICAgdmFyIGlvUG9ydHMgPSBnZXRJT1BvcnRJZHModGFyZ2V0Tm9kZSk7XG4gICAgICAgICAgdGFyZ2V0Tm9kZUlucHV0UG9ydElkID0gaW9Qb3J0cy5pbnB1dFBvcnRJZDtcbiAgICAgICAgICB0YXJnZXROb2RlT3V0cHV0UG9ydElkID0gaW9Qb3J0cy5vdXRwdXRQb3J0SWQ7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc2JnbmNsYXNzID09PSAnY29uc3VtcHRpb24nKSB7XG4gICAgICAgICAgLy8gQSBjb25zdW1wdGlvbiBlZGdlIHNob3VsZCBiZSBjb25uZWN0ZWQgdG8gdGhlIGlucHV0IHBvcnQgb2YgdGhlIHRhcmdldCBub2RlIHdoaWNoIGlzIHN1cHBvc2VkIHRvIGJlIGEgcHJvY2VzcyAoYW55IGtpbmQgb2YpXG4gICAgICAgICAgcG9ydHNvdXJjZSA9IHNvdXJjZU5vZGVPdXRwdXRQb3J0SWQ7XG4gICAgICAgICAgcG9ydHRhcmdldCA9IHRhcmdldE5vZGVJbnB1dFBvcnRJZDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChzYmduY2xhc3MgPT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgIC8vIEEgcHJvZHVjdGlvbiBlZGdlIHNob3VsZCBiZSBjb25uZWN0ZWQgdG8gdGhlIG91dHB1dCBwb3J0IG9mIHRoZSBzb3VyY2Ugbm9kZSB3aGljaCBpcyBzdXBwb3NlZCB0byBiZSBhIHByb2Nlc3MgKGFueSBraW5kIG9mKVxuICAgICAgICAgIC8vIEEgbW9kdWxhdGlvbiBlZGdlIG1heSBoYXZlIGEgbG9naWNhbCBvcGVyYXRvciBhcyBzb3VyY2Ugbm9kZSBpbiB0aGlzIGNhc2UgdGhlIGVkZ2Ugc2hvdWxkIGJlIGNvbm5lY3RlZCB0byB0aGUgb3V0cHV0IHBvcnQgb2YgaXRcbiAgICAgICAgICAvLyBUaGUgYmVsb3cgYXNzaWdubWVudCBzYXRpc2Z5IGFsbCBvZiB0aGVzZSBjb25kaXRpb25cbiAgICAgICAgICBpZihncm91cElEID09IDAgfHwgZ3JvdXBJRCA9PSB1bmRlZmluZWQpIHsgLy8gZ3JvdXBJRCAwIGZvciByZXZlcnNpYmxlIHJlYWN0aW9ucyBncm91cCAwXG4gICAgICAgICAgICBwb3J0c291cmNlID0gc291cmNlTm9kZU91dHB1dFBvcnRJZDtcbiAgICAgICAgICAgIHBvcnR0YXJnZXQgPSB0YXJnZXROb2RlSW5wdXRQb3J0SWQ7XG4gICAgICAgICAgfVxuICAgICAgICAgIGVsc2UgeyAvL2lmIHJlYWN0aW9uIGlzIHJldmVyc2libGUgYW5kIGVkZ2UgYmVsb25ncyB0byBncm91cCAxXG4gICAgICAgICAgICBwb3J0c291cmNlID0gc291cmNlTm9kZUlucHV0UG9ydElkO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmKGVsZW1lbnRVdGlsaXRpZXMuaXNNb2R1bGF0aW9uQXJjQ2xhc3Moc2JnbmNsYXNzKSB8fCBlbGVtZW50VXRpbGl0aWVzLmlzQUZBcmNDbGFzcyhzYmduY2xhc3MpKXtcbiAgICAgICAgICBwb3J0c291cmNlID0gc291cmNlTm9kZU91dHB1dFBvcnRJZDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChzYmduY2xhc3MgPT09ICdsb2dpYyBhcmMnKSB7XG4gICAgICAgICAgdmFyIHNyY0NsYXNzID0gc291cmNlTm9kZS5kYXRhKCdjbGFzcycpO1xuICAgICAgICAgIHZhciB0Z3RDbGFzcyA9IHRhcmdldE5vZGUuZGF0YSgnY2xhc3MnKTtcbiAgICAgICAgICB2YXIgaXNTb3VyY2VMb2dpY2FsT3AgPSBzcmNDbGFzcyA9PT0gJ2FuZCcgfHwgc3JjQ2xhc3MgPT09ICdvcicgfHwgc3JjQ2xhc3MgPT09ICdub3QnO1xuICAgICAgICAgIHZhciBpc1RhcmdldExvZ2ljYWxPcCA9IHRndENsYXNzID09PSAnYW5kJyB8fCB0Z3RDbGFzcyA9PT0gJ29yJyB8fCB0Z3RDbGFzcyA9PT0gJ25vdCc7XG5cbiAgICAgICAgICBpZiAoaXNTb3VyY2VMb2dpY2FsT3AgJiYgaXNUYXJnZXRMb2dpY2FsT3ApIHtcbiAgICAgICAgICAgIC8vIElmIGJvdGggZW5kIGFyZSBsb2dpY2FsIG9wZXJhdG9ycyB0aGVuIHRoZSBlZGdlIHNob3VsZCBiZSBjb25uZWN0ZWQgdG8gdGhlIGlucHV0IHBvcnQgb2YgdGhlIHRhcmdldCBhbmQgdGhlIG91dHB1dCBwb3J0IG9mIHRoZSBpbnB1dFxuICAgICAgICAgICAgcG9ydHRhcmdldCA9IHRhcmdldE5vZGVJbnB1dFBvcnRJZDtcbiAgICAgICAgICAgIHBvcnRzb3VyY2UgPSBzb3VyY2VOb2RlT3V0cHV0UG9ydElkO1xuICAgICAgICAgIH0vLyBJZiBqdXN0IG9uZSBlbmQgb2YgbG9naWNhbCBvcGVyYXRvciB0aGVuIHRoZSBlZGdlIHNob3VsZCBiZSBjb25uZWN0ZWQgdG8gdGhlIGlucHV0IHBvcnQgb2YgdGhlIGxvZ2ljYWwgb3BlcmF0b3JcbiAgICAgICAgICBlbHNlIGlmIChpc1NvdXJjZUxvZ2ljYWxPcCkge1xuICAgICAgICAgICAgcG9ydHNvdXJjZSA9IHNvdXJjZU5vZGVJbnB1dFBvcnRJZDtcbiAgICAgICAgICAgIHBvcnR0YXJnZXQgPSB0YXJnZXROb2RlT3V0cHV0UG9ydElkO1xuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIGlmIChpc1RhcmdldExvZ2ljYWxPcCkge1xuICAgICAgICAgICAgcG9ydHNvdXJjZSA9IHNvdXJjZU5vZGVPdXRwdXRQb3J0SWQ7XG4gICAgICAgICAgICBwb3J0dGFyZ2V0ID0gdGFyZ2V0Tm9kZUlucHV0UG9ydElkO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBUaGUgZGVmYXVsdCBwb3J0c291cmNlL3BvcnR0YXJnZXQgYXJlIHRoZSBzb3VyY2UvdGFyZ2V0IHRoZW1zZWx2ZXMuIElmIHRoZXkgYXJlIG5vdCBzZXQgdXNlIHRoZXNlIGRlZmF1bHRzLlxuICAgICAgLy8gVGhlIHBvcnRzb3VyY2UgYW5kIHBvcnR0YXJnZXQgYXJlIGRldGVybWluZWQgc2V0IHRoZW0gaW4gZGF0YSBvYmplY3QuXG4gICAgICBkYXRhLnBvcnRzb3VyY2UgPSBwb3J0c291cmNlIHx8IHNvdXJjZTtcbiAgICAgIGRhdGEucG9ydHRhcmdldCA9IHBvcnR0YXJnZXQgfHwgdGFyZ2V0O1xuXG4gICAgICB2YXIgZWxlcyA9IGN5LmFkZCh7XG4gICAgICAgIGdyb3VwOiBcImVkZ2VzXCIsXG4gICAgICAgIGRhdGE6IGRhdGEsXG4gICAgICAgIGNzczogY3NzXG4gICAgICB9KTtcblxuICAgICAgdmFyIG5ld0VkZ2UgPSBlbGVzW2VsZXMubGVuZ3RoIC0gMV07XG5cbiAgICAgIHJldHVybiBuZXdFZGdlO1xuICAgIH07XG5cbiAgICBlbGVtZW50VXRpbGl0aWVzLmFkZFByb2Nlc3NXaXRoQ29udmVuaWVudEVkZ2VzID0gZnVuY3Rpb24oX3NvdXJjZSwgX3RhcmdldCwgbm9kZVBhcmFtcykge1xuICAgICAgLy8gSWYgc291cmNlIGFuZCB0YXJnZXQgSURzIGFyZSBnaXZlbiBnZXQgdGhlIGVsZW1lbnRzIGJ5IElEc1xuICAgICAgdmFyIHNvdXJjZSA9IHR5cGVvZiBfc291cmNlID09PSAnc3RyaW5nJyA/IGN5LmdldEVsZW1lbnRCeUlkKF9zb3VyY2UpIDogX3NvdXJjZTtcbiAgICAgIHZhciB0YXJnZXQgPSB0eXBlb2YgX3RhcmdldCA9PT0gJ3N0cmluZycgPyBjeS5nZXRFbGVtZW50QnlJZChfdGFyZ2V0KSA6IF90YXJnZXQ7XG5cbiAgICAgIC8vIFByb2Nlc3MgcGFyZW50IHNob3VsZCBiZSB0aGUgY2xvc2VzdCBjb21tb24gYW5jZXN0b3Igb2YgdGhlIHNvdXJjZSBhbmQgdGFyZ2V0IG5vZGVzXG4gICAgICB2YXIgcHJvY2Vzc1BhcmVudCA9IGN5LmNvbGxlY3Rpb24oW3NvdXJjZVswXSwgdGFyZ2V0WzBdXSkuY29tbW9uQW5jZXN0b3JzKCkuZmlyc3QoKTtcblxuICAgICAgLy8gUHJvY2VzcyBzaG91bGQgYmUgYXQgdGhlIG1pZGRsZSBvZiB0aGUgc291cmNlIGFuZCB0YXJnZXQgbm9kZXNcbiAgICAgIHZhciB4ID0gKCBzb3VyY2UucG9zaXRpb24oJ3gnKSArIHRhcmdldC5wb3NpdGlvbigneCcpICkgLyAyO1xuICAgICAgdmFyIHkgPSAoIHNvdXJjZS5wb3NpdGlvbigneScpICsgdGFyZ2V0LnBvc2l0aW9uKCd5JykgKSAvIDI7XG5cbiAgICAgIC8vIENyZWF0ZSB0aGUgcHJvY2VzcyB3aXRoIGdpdmVuL2NhbGN1bGF0ZWQgdmFyaWFibGVzXG4gICAgICB2YXIgcHJvY2VzcyA9IGVsZW1lbnRVdGlsaXRpZXMuYWRkTm9kZSh4LCB5LCBub2RlUGFyYW1zLCB1bmRlZmluZWQsIHByb2Nlc3NQYXJlbnQuaWQoKSk7XG4gICAgICAgIHZhciB4ZGlmZiA9IHNvdXJjZS5wb3NpdGlvbigneCcpIC0gdGFyZ2V0LnBvc2l0aW9uKCd4Jyk7XG4gICAgICAgIHZhciB5ZGlmZiA9IHNvdXJjZS5wb3NpdGlvbigneScpIC0gdGFyZ2V0LnBvc2l0aW9uKCd5JylcbiAgICAgICAgaWYgKE1hdGguYWJzKHhkaWZmKSA+PSBNYXRoLmFicyh5ZGlmZikpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICh4ZGlmZiA8IDApXG4gICAgICAgICAgICAgICAgZWxlbWVudFV0aWxpdGllcy5zZXRQb3J0c09yZGVyaW5nKHByb2Nlc3MsICdMLXRvLVInKTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBlbGVtZW50VXRpbGl0aWVzLnNldFBvcnRzT3JkZXJpbmcocHJvY2VzcywgJ1ItdG8tTCcpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKHlkaWZmIDwgMClcbiAgICAgICAgICAgICAgICBlbGVtZW50VXRpbGl0aWVzLnNldFBvcnRzT3JkZXJpbmcocHJvY2VzcywgJ1QtdG8tQicpO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIGVsZW1lbnRVdGlsaXRpZXMuc2V0UG9ydHNPcmRlcmluZyhwcm9jZXNzLCAnQi10by1UJyk7XG4gICAgICAgIH1cblxuXG4gICAgICAvLyBDcmVhdGUgdGhlIGVkZ2VzIG9uZSBpcyBiZXR3ZWVuIHRoZSBwcm9jZXNzIGFuZCB0aGUgc291cmNlIG5vZGUgKHdoaWNoIHNob3VsZCBiZSBhIGNvbnN1bXB0aW9uKSxcbiAgICAgIC8vIHRoZSBvdGhlciBvbmUgaXMgYmV0d2VlbiB0aGUgcHJvY2VzcyBhbmQgdGhlIHRhcmdldCBub2RlICh3aGljaCBzaG91bGQgYmUgYSBwcm9kdWN0aW9uKS5cbiAgICAgIC8vIEZvciBtb3JlIGluZm9ybWF0aW9uIHBsZWFzZSByZWZlciB0byBTQkdOLVBEIHJlZmVyZW5jZSBjYXJkLlxuICAgICAgdmFyIGVkZ2VCdHdTcmMgPSBlbGVtZW50VXRpbGl0aWVzLmFkZEVkZ2Uoc291cmNlLmlkKCksIHByb2Nlc3MuaWQoKSwge2NsYXNzIDogJ2NvbnN1bXB0aW9uJywgbGFuZ3VhZ2UgOiBub2RlUGFyYW1zLmxhbmd1YWdlfSk7XG4gICAgICB2YXIgZWRnZUJ0d1RndCA9IGVsZW1lbnRVdGlsaXRpZXMuYWRkRWRnZShwcm9jZXNzLmlkKCksIHRhcmdldC5pZCgpLCB7Y2xhc3MgOiAncHJvZHVjdGlvbicsIGxhbmd1YWdlIDogbm9kZVBhcmFtcy5sYW5ndWFnZX0pO1xuXG4gICAgICAvLyBDcmVhdGUgYSBjb2xsZWN0aW9uIGluY2x1ZGluZyB0aGUgZWxlbWVudHMgYW5kIHRvIGJlIHJldHVybmVkXG4gICAgICB2YXIgY29sbGVjdGlvbiA9IGN5LmNvbGxlY3Rpb24oW3Byb2Nlc3NbMF0sIGVkZ2VCdHdTcmNbMF0sIGVkZ2VCdHdUZ3RbMF1dKTtcbiAgICAgIHJldHVybiBjb2xsZWN0aW9uO1xuICAgIH07XG5cbiAgICAvKlxuICAgICAqIFRoaXMgbWV0aG9kIGFzc3VtZXMgdGhhdCBwYXJhbS5ub2Rlc1RvTWFrZUNvbXBvdW5kIGNvbnRhaW5zIGF0IGxlYXN0IG9uZSBub2RlXG4gICAgICogYW5kIGFsbCBvZiB0aGUgbm9kZXMgaW5jbHVkaW5nIGluIGl0IGhhdmUgdGhlIHNhbWUgcGFyZW50LiBJdCBjcmVhdGVzIGEgY29tcG91bmQgZm90IHRoZSBnaXZlbiBub2RlcyBhbiBoYXZpbmcgdGhlIGdpdmVuIHR5cGUuXG4gICAgICovXG4gICAgZWxlbWVudFV0aWxpdGllcy5jcmVhdGVDb21wb3VuZEZvckdpdmVuTm9kZXMgPSBmdW5jdGlvbiAobm9kZXNUb01ha2VDb21wb3VuZCwgY29tcG91bmRUeXBlKSB7XG4gICAgICB2YXIgb2xkUGFyZW50SWQgPSBub2Rlc1RvTWFrZUNvbXBvdW5kWzBdLmRhdGEoXCJwYXJlbnRcIik7XG4gICAgICB2YXIgbGFuZ3VhZ2UgPSBub2Rlc1RvTWFrZUNvbXBvdW5kWzBdLmRhdGEoXCJsYW5ndWFnZVwiKTtcbiAgICAgIC8vIGlmIG5vZGVzVG9NYWtlQ29tcG91bmQgY29udGFpbiBib3RoIFBEIGFuZCBBRiBub2RlcywgdGhlbiBzZXQgbGFuZ3VhZ2Ugb2YgY29tcG91bmQgYXMgVW5rbm93blxuICAgICAgZm9yKCB2YXIgaT0xOyBpPG5vZGVzVG9NYWtlQ29tcG91bmQubGVuZ3RoOyBpKyspe1xuICAgICAgICBpZihub2Rlc1RvTWFrZUNvbXBvdW5kW2ldICE9IGxhbmd1YWdlKXtcbiAgICAgICAgICBsYW5ndWFnZSA9IFwiVW5rbm93blwiO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvLyBUaGUgcGFyZW50IG9mIG5ldyBjb21wb3VuZCB3aWxsIGJlIHRoZSBvbGQgcGFyZW50IG9mIHRoZSBub2RlcyB0byBtYWtlIGNvbXBvdW5kLiB4LCB5IGFuZCBpZCBwYXJhbWV0ZXJzIGFyZSBub3Qgc2V0LlxuICAgICAgdmFyIG5ld0NvbXBvdW5kID0gZWxlbWVudFV0aWxpdGllcy5hZGROb2RlKHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB7Y2xhc3MgOiBjb21wb3VuZFR5cGUsIGxhbmd1YWdlIDogbGFuZ3VhZ2V9LCB1bmRlZmluZWQsIG9sZFBhcmVudElkKTtcbiAgICAgIHZhciBuZXdDb21wb3VuZElkID0gbmV3Q29tcG91bmQuaWQoKTtcbiAgICAgIHZhciBuZXdFbGVzID0gZWxlbWVudFV0aWxpdGllcy5jaGFuZ2VQYXJlbnQobm9kZXNUb01ha2VDb21wb3VuZCwgbmV3Q29tcG91bmRJZCk7XG4gICAgICBuZXdFbGVzID0gbmV3RWxlcy51bmlvbihuZXdDb21wb3VuZCk7XG4gICAgICByZXR1cm4gbmV3RWxlcztcbiAgICB9O1xuXG4gICAgZWxlbWVudFV0aWxpdGllcy5jcmVhdGVUcmFuc2xhdGlvblJlYWN0aW9uID0gZnVuY3Rpb24obVJuYU5hbWUsIHByb3RlaW5OYW1lLCBwcm9jZXNzUG9zaXRpb24sIGVkZ2VMZW5ndGgpIHtcbiAgICAgIGNvbnN0IGRlZmF1bHRQcm9jZXNzUHJvcGVydGllcyA9IGVsZW1lbnRVdGlsaXRpZXMuZ2V0RGVmYXVsdFByb3BlcnRpZXMoXCJ0cmFuc2xhdGlvblwiKTtcbiAgICAgIGNvbnN0IGRlZmF1bHRTb3VyY2VBbmRTaW5rUHJvcGVydGllcyA9IGVsZW1lbnRVdGlsaXRpZXMuZ2V0RGVmYXVsdFByb3BlcnRpZXMoXCJzb3VyY2UgYW5kIHNpbmtcIik7XG4gICAgICBjb25zdCBkZWZhdWx0TnVjbGVpY0FjaWRGZWF0dXJlUHJvcGVydGllcyA9IGVsZW1lbnRVdGlsaXRpZXMuZ2V0RGVmYXVsdFByb3BlcnRpZXMoXCJudWNsZWljIGFjaWQgZmVhdHVyZVwiKTtcbiAgICAgIGNvbnN0IGRlZmF1bHRNYWNyb21vbGVjdWxlUHJvcGVydGllcyA9IGVsZW1lbnRVdGlsaXRpZXMuZ2V0RGVmYXVsdFByb3BlcnRpZXMoXCJtYWNyb21vbGVjdWxlXCIpO1xuICAgICAgY29uc3QgbWFjcm9tb2xlY3VsZVdpZHRoID0gZGVmYXVsdE1hY3JvbW9sZWN1bGVQcm9wZXJ0aWVzLndpZHRoIHx8IDUwO1xuICAgICAgY29uc3Qgc291cmNlQW5kU2lua1dpZHRoID0gZGVmYXVsdFNvdXJjZUFuZFNpbmtQcm9wZXJ0aWVzLndpZHRoICB8fCA1MDtcbiAgICAgIGNvbnN0IG51Y2xlaWNBY2lkRmVhdHVyZUhlaWdodCA9IGRlZmF1bHROdWNsZWljQWNpZEZlYXR1cmVQcm9wZXJ0aWVzLmhlaWdodCB8fCA1MDtcbiAgICAgIGNvbnN0IHByb2Nlc3NXaWR0aCA9IGRlZmF1bHRQcm9jZXNzUHJvcGVydGllcy53aWR0aCB8fCA1MDtcbiAgICAgIGNvbnN0IHByb2Nlc3NIZWlnaHQgPSBkZWZhdWx0UHJvY2Vzc1Byb3BlcnRpZXMuaGVpZ2h0IHx8IDUwO1xuICAgICAgdmFyIHByb2Nlc3NQb3NpdGlvbiA9IHByb2Nlc3NQb3NpdGlvbiB8fCBlbGVtZW50VXRpbGl0aWVzLmNvbnZlcnRUb01vZGVsUG9zaXRpb24oe3g6IGN5LndpZHRoKCkgLyAyLCB5OiBjeS5oZWlnaHQoKSAvIDJ9KTtcbiAgICAgIHZhciBlZGdlTGVuZ3RoID0gZWRnZUxlbmd0aCB8fCA2MDtcblxuICAgICAgY3kuc3RhcnRCYXRjaCgpO1xuICAgICAgaWYgKCFlbGVtZW50VXRpbGl0aWVzLmdldE1hcFR5cGUoKSkge1xuICAgICAgICBlbGVtZW50VXRpbGl0aWVzLnNldE1hcFR5cGUoXCJQRFwiKTtcbiAgICAgIH1cblxuICAgICAgdmFyIHByb2Nlc3NOb2RlID0gZWxlbWVudFV0aWxpdGllcy5hZGROb2RlKHByb2Nlc3NQb3NpdGlvbi54LCBwcm9jZXNzUG9zaXRpb24ueSwge2NsYXNzOiBcInByb2Nlc3NcIiwgbGFuZ3VhZ2U6IFwiUERcIn0pO1xuICAgICAgZWxlbWVudFV0aWxpdGllcy5zZXRQb3J0c09yZGVyaW5nKHByb2Nlc3NOb2RlLCBcIkwtdG8tUlwiKTtcbiAgICAgIHByb2Nlc3NOb2RlLmRhdGEoJ2p1c3RBZGRlZCcsIHRydWUpO1xuXG4gICAgICBjb25zdCB4UG9zT2ZTb3VyY2VBbmRTaW5rTm9kZSA9IHByb2Nlc3NQb3NpdGlvbi54IC0gZWRnZUxlbmd0aCAtIHByb2Nlc3NXaWR0aCAvIDIgLSBzb3VyY2VBbmRTaW5rV2lkdGggLyAyO1xuICAgICAgY29uc3QgeVBvc09mU291cmNlQW5kU2lua05vZGUgPSBwcm9jZXNzUG9zaXRpb24ueTtcbiAgICAgIHZhciBzb3VyY2VBbmRTaW5rTm9kZSA9IGVsZW1lbnRVdGlsaXRpZXMuYWRkTm9kZSh4UG9zT2ZTb3VyY2VBbmRTaW5rTm9kZSwgeVBvc09mU291cmNlQW5kU2lua05vZGUsIHtjbGFzczogJ3NvdXJjZSBhbmQgc2luaycsIGxhbmd1YWdlOiAnUEQnfSk7XG4gICAgICBzb3VyY2VBbmRTaW5rTm9kZS5kYXRhKCdqdXN0QWRkZWQnLCB0cnVlKTtcblxuICAgICAgdmFyIGNvbnN1bXB0aW9uRWRnZSA9IGVsZW1lbnRVdGlsaXRpZXMuYWRkRWRnZShzb3VyY2VBbmRTaW5rTm9kZS5pZCgpLCBwcm9jZXNzTm9kZS5pZCgpLCB7Y2xhc3M6ICdjb25zdW1wdGlvbicsIGxhbmd1YWdlOiAnUEQnfSk7XG4gICAgICBjb25zdW1wdGlvbkVkZ2UuZGF0YSgnanVzdEFkZGVkJywgdHJ1ZSk7XG5cbiAgICAgIGNvbnN0IHhQb3NPZm1SbmFOb2RlID0gcHJvY2Vzc1Bvc2l0aW9uLng7XG4gICAgICBjb25zdCB5UG9zT2ZtUm5hTm9kZSA9IHByb2Nlc3NQb3NpdGlvbi55IC0gZWRnZUxlbmd0aCAtIHByb2Nlc3NIZWlnaHQgLyAyIC0gbnVjbGVpY0FjaWRGZWF0dXJlSGVpZ2h0IC8gMjtcbiAgICAgIHZhciBtUm5hTm9kZSA9IGVsZW1lbnRVdGlsaXRpZXMuYWRkTm9kZSh4UG9zT2ZtUm5hTm9kZSwgeVBvc09mbVJuYU5vZGUsIHtjbGFzczogJ251Y2xlaWMgYWNpZCBmZWF0dXJlJywgbGFuZ3VhZ2U6ICdQRCd9KTtcbiAgICAgIG1SbmFOb2RlLmRhdGEoJ2p1c3RBZGRlZCcsIHRydWUpO1xuICAgICAgbVJuYU5vZGUuZGF0YSgnbGFiZWwnLCBtUm5hTmFtZSk7XG4gICAgICBjb25zdCBpbmZvYm94T2JqZWN0T2ZHZW5lID0ge1xuICAgICAgICBjbGF6ejogXCJ1bml0IG9mIGluZm9ybWF0aW9uXCIsXG4gICAgICAgIGxhYmVsOiB7XG4gICAgICAgICAgdGV4dDogJ2N0Om1STkEnXG4gICAgICAgIH0sXG4gICAgICAgIGJib3g6IHtcbiAgICAgICAgICB3OiA0NSxcbiAgICAgICAgICBoOiAxNVxuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgZWxlbWVudFV0aWxpdGllcy5hZGRTdGF0ZU9ySW5mb0JveChtUm5hTm9kZSwgaW5mb2JveE9iamVjdE9mR2VuZSk7XG5cbiAgICAgIHZhciBuZWNlc3NhcnlTdGltdWxhdGlvbkVkZ2UgPSBlbGVtZW50VXRpbGl0aWVzLmFkZEVkZ2UobVJuYU5vZGUuaWQoKSwgcHJvY2Vzc05vZGUuaWQoKSwge2NsYXNzOiAnbmVjZXNzYXJ5IHN0aW11bGF0aW9uJywgbGFuZ3VhZ2U6ICdQRCd9KTtcbiAgICAgIG5lY2Vzc2FyeVN0aW11bGF0aW9uRWRnZS5kYXRhKCdqdXN0QWRkZWQnLCB0cnVlKTtcblxuICAgICAgY29uc3QgeFBvc09mUHJvdGVpbk5vZGUgPSBwcm9jZXNzUG9zaXRpb24ueCArIGVkZ2VMZW5ndGggKyBwcm9jZXNzV2lkdGggLyAyICsgbWFjcm9tb2xlY3VsZVdpZHRoIC8gMjtcbiAgICAgIGNvbnN0IHlQb3N0T2ZQcm90ZWluTm9kZSA9IHByb2Nlc3NQb3NpdGlvbi55O1xuICAgICAgdmFyIHByb3RlaW5Ob2RlID0gZWxlbWVudFV0aWxpdGllcy5hZGROb2RlKHhQb3NPZlByb3RlaW5Ob2RlLCB5UG9zdE9mUHJvdGVpbk5vZGUsIHtjbGFzczogJ21hY3JvbW9sZWN1bGUnLCBsYW5ndWFnZTogJ1BEJ30pO1xuICAgICAgcHJvdGVpbk5vZGUuZGF0YSgnanVzdEFkZGVkJywgdHJ1ZSk7XG4gICAgICBwcm90ZWluTm9kZS5kYXRhKCdsYWJlbCcsIHByb3RlaW5OYW1lKTtcbiAgXG4gICAgICB2YXIgcHJvZHVjdGlvbkVkZ2UgPSBlbGVtZW50VXRpbGl0aWVzLmFkZEVkZ2UocHJvY2Vzc05vZGUuaWQoKSwgcHJvdGVpbk5vZGUuaWQoKSwge2NsYXNzOiAncHJvZHVjdGlvbicsIGxhbmd1YWdlOiAnUEQnfSk7XG4gICAgICBwcm9kdWN0aW9uRWRnZS5kYXRhKCdqdXN0QWRkZWQnLCB0cnVlKTtcblxuICAgICAgY3kuZW5kQmF0Y2goKTtcblxuICAgICAgLy9maWx0ZXIgdGhlIGp1c3QgYWRkZWQgZWxlbWVtdHMgdG8gcmV0dXJuIHRoZW0gYW5kIHJlbW92ZSBqdXN0IGFkZGVkIG1hcmtcbiAgICAgIHZhciBlbGVzID0gY3kuZWxlbWVudHMoJ1tqdXN0QWRkZWRdJyk7XG4gICAgICBlbGVzLnJlbW92ZURhdGEoJ2p1c3RBZGRlZCcpO1xuXG4gICAgICBjeS5lbGVtZW50cygpLnVuc2VsZWN0KCk7XG4gICAgICBlbGVzLnNlbGVjdCgpO1xuXG4gICAgICByZXR1cm4gZWxlczsgLy8gUmV0dXJuIHRoZSBqdXN0IGFkZGVkIGVsZW1lbnRzXG4gICAgfTtcblxuICAgIGVsZW1lbnRVdGlsaXRpZXMuY3JlYXRlVHJhbnNjcmlwdGlvblJlYWN0aW9uID0gZnVuY3Rpb24oZ2VuZU5hbWUsIG1SbmFOYW1lLCBwcm9jZXNzUG9zaXRpb24sIGVkZ2VMZW5ndGgpIHtcbiAgICAgIGNvbnN0IGRlZmF1bHRQcm9jZXNzUHJvcGVydGllcyA9IGVsZW1lbnRVdGlsaXRpZXMuZ2V0RGVmYXVsdFByb3BlcnRpZXMoXCJ0cmFuc2NyaXB0aW9uXCIpO1xuICAgICAgY29uc3QgZGVmYXVsdFNvdXJjZUFuZFNpbmtQcm9wZXJ0aWVzID0gZWxlbWVudFV0aWxpdGllcy5nZXREZWZhdWx0UHJvcGVydGllcyhcInNvdXJjZSBhbmQgc2lua1wiKTtcbiAgICAgIGNvbnN0IGRlZmF1bHROdWNsZWljQWNpZEZlYXR1cmVQcm9wZXJ0aWVzID0gZWxlbWVudFV0aWxpdGllcy5nZXREZWZhdWx0UHJvcGVydGllcyhcIm51Y2xlaWMgYWNpZCBmZWF0dXJlXCIpO1xuICAgICAgY29uc3Qgc291cmNlQW5kU2lua1dpZHRoID0gZGVmYXVsdFNvdXJjZUFuZFNpbmtQcm9wZXJ0aWVzLndpZHRoICB8fCA1MDtcbiAgICAgIGNvbnN0IG51Y2xlaWNBY2lkRmVhdHVyZUhlaWdodCA9IGRlZmF1bHROdWNsZWljQWNpZEZlYXR1cmVQcm9wZXJ0aWVzLmhlaWdodCB8fCA1MDtcbiAgICAgIGNvbnN0IG51Y2xlaWNBY2lkRmVhdHVyZVdpZHRoID0gZGVmYXVsdE51Y2xlaWNBY2lkRmVhdHVyZVByb3BlcnRpZXMud2lkdGggfHwgNTA7XG4gICAgICBjb25zdCBwcm9jZXNzV2lkdGggPSBkZWZhdWx0UHJvY2Vzc1Byb3BlcnRpZXMud2lkdGggfHwgNTA7XG4gICAgICBjb25zdCBwcm9jZXNzSGVpZ2h0ID0gZGVmYXVsdFByb2Nlc3NQcm9wZXJ0aWVzLmhlaWdodCB8fCA1MDtcbiAgICAgIHZhciBwcm9jZXNzUG9zaXRpb24gPSBwcm9jZXNzUG9zaXRpb24gfHwgZWxlbWVudFV0aWxpdGllcy5jb252ZXJ0VG9Nb2RlbFBvc2l0aW9uKHt4OiBjeS53aWR0aCgpIC8gMiwgeTogY3kuaGVpZ2h0KCkgLyAyfSk7XG4gICAgICB2YXIgZWRnZUxlbmd0aCA9IGVkZ2VMZW5ndGggfHwgNjA7XG5cbiAgICAgIGN5LnN0YXJ0QmF0Y2goKTtcbiAgICAgIGlmICghZWxlbWVudFV0aWxpdGllcy5nZXRNYXBUeXBlKCkpIHtcbiAgICAgICAgZWxlbWVudFV0aWxpdGllcy5zZXRNYXBUeXBlKFwiUERcIik7XG4gICAgICB9XG5cbiAgICAgIHZhciBwcm9jZXNzTm9kZSA9IGVsZW1lbnRVdGlsaXRpZXMuYWRkTm9kZShwcm9jZXNzUG9zaXRpb24ueCwgcHJvY2Vzc1Bvc2l0aW9uLnksIHtjbGFzczogXCJwcm9jZXNzXCIsIGxhbmd1YWdlOiBcIlBEXCJ9KTtcbiAgICAgIGVsZW1lbnRVdGlsaXRpZXMuc2V0UG9ydHNPcmRlcmluZyhwcm9jZXNzTm9kZSwgXCJMLXRvLVJcIik7XG4gICAgICBwcm9jZXNzTm9kZS5kYXRhKCdqdXN0QWRkZWQnLCB0cnVlKTtcblxuICAgICAgY29uc3QgeFBvc09mU291cmNlQW5kU2lua05vZGUgPSBwcm9jZXNzUG9zaXRpb24ueCAtIGVkZ2VMZW5ndGggLSBwcm9jZXNzV2lkdGggLyAyIC0gc291cmNlQW5kU2lua1dpZHRoIC8gMjtcbiAgICAgIGNvbnN0IHlQb3NPZlNvdXJjZUFuZFNpbmtOb2RlID0gcHJvY2Vzc1Bvc2l0aW9uLnk7XG4gICAgICB2YXIgc291cmNlQW5kU2lua05vZGUgPSBlbGVtZW50VXRpbGl0aWVzLmFkZE5vZGUoeFBvc09mU291cmNlQW5kU2lua05vZGUsIHlQb3NPZlNvdXJjZUFuZFNpbmtOb2RlLCB7Y2xhc3M6ICdzb3VyY2UgYW5kIHNpbmsnLCBsYW5ndWFnZTogJ1BEJ30pO1xuICAgICAgc291cmNlQW5kU2lua05vZGUuZGF0YSgnanVzdEFkZGVkJywgdHJ1ZSk7XG5cbiAgICAgIHZhciBjb25zdW1wdGlvbkVkZ2UgPSBlbGVtZW50VXRpbGl0aWVzLmFkZEVkZ2Uoc291cmNlQW5kU2lua05vZGUuaWQoKSwgcHJvY2Vzc05vZGUuaWQoKSwge2NsYXNzOiAnY29uc3VtcHRpb24nLCBsYW5ndWFnZTogJ1BEJ30pO1xuICAgICAgY29uc3VtcHRpb25FZGdlLmRhdGEoJ2p1c3RBZGRlZCcsIHRydWUpO1xuXG4gICAgICBjb25zdCB4UG9zT2ZHZW5lTm9kZSA9IHByb2Nlc3NQb3NpdGlvbi54O1xuICAgICAgY29uc3QgeVBvc09mR2VuZU5vZGUgPSBwcm9jZXNzUG9zaXRpb24ueSAtIGVkZ2VMZW5ndGggLSBwcm9jZXNzSGVpZ2h0IC8gMiAtIG51Y2xlaWNBY2lkRmVhdHVyZUhlaWdodCAvIDI7XG4gICAgICB2YXIgZ2VuZU5vZGUgPSBlbGVtZW50VXRpbGl0aWVzLmFkZE5vZGUoeFBvc09mR2VuZU5vZGUsIHlQb3NPZkdlbmVOb2RlLCB7Y2xhc3M6ICdudWNsZWljIGFjaWQgZmVhdHVyZScsIGxhbmd1YWdlOiAnUEQnfSk7XG4gICAgICBnZW5lTm9kZS5kYXRhKCdqdXN0QWRkZWQnLCB0cnVlKTtcbiAgICAgIGdlbmVOb2RlLmRhdGEoJ2xhYmVsJywgZ2VuZU5hbWUpO1xuICAgICAgY29uc3QgaW5mb2JveE9iamVjdE9mR2VuZSA9IHtcbiAgICAgICAgY2xheno6IFwidW5pdCBvZiBpbmZvcm1hdGlvblwiLFxuICAgICAgICBsYWJlbDoge1xuICAgICAgICAgIHRleHQ6ICdjdDpnZW5lJ1xuICAgICAgICB9LFxuICAgICAgICBiYm94OiB7XG4gICAgICAgICAgdzogMzYsXG4gICAgICAgICAgaDogMTVcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGVsZW1lbnRVdGlsaXRpZXMuYWRkU3RhdGVPckluZm9Cb3goZ2VuZU5vZGUsIGluZm9ib3hPYmplY3RPZkdlbmUpO1xuXG4gICAgICB2YXIgbmVjZXNzYXJ5U3RpbXVsYXRpb25FZGdlID0gZWxlbWVudFV0aWxpdGllcy5hZGRFZGdlKGdlbmVOb2RlLmlkKCksIHByb2Nlc3NOb2RlLmlkKCksIHtjbGFzczogJ25lY2Vzc2FyeSBzdGltdWxhdGlvbicsIGxhbmd1YWdlOiAnUEQnfSk7XG4gICAgICBuZWNlc3NhcnlTdGltdWxhdGlvbkVkZ2UuZGF0YSgnanVzdEFkZGVkJywgdHJ1ZSk7XG5cbiAgICAgIGNvbnN0IHhQb3NPZm1SbmFOb2RlID0gcHJvY2Vzc1Bvc2l0aW9uLnggKyBlZGdlTGVuZ3RoICsgcHJvY2Vzc1dpZHRoIC8gMiArIG51Y2xlaWNBY2lkRmVhdHVyZVdpZHRoIC8gMjtcbiAgICAgIGNvbnN0IHlQb3N0T2ZtUm5hTm9kZSA9IHByb2Nlc3NQb3NpdGlvbi55O1xuICAgICAgdmFyIG1SbmFOb2RlID0gZWxlbWVudFV0aWxpdGllcy5hZGROb2RlKHhQb3NPZm1SbmFOb2RlLCB5UG9zdE9mbVJuYU5vZGUsIHtjbGFzczogJ251Y2xlaWMgYWNpZCBmZWF0dXJlJywgbGFuZ3VhZ2U6ICdQRCd9KTtcbiAgICAgIG1SbmFOb2RlLmRhdGEoJ2p1c3RBZGRlZCcsIHRydWUpO1xuICAgICAgbVJuYU5vZGUuZGF0YSgnbGFiZWwnLCBtUm5hTmFtZSk7XG4gICAgICBjb25zdCBpbmZvYm94T2JqZWN0T2ZtUm5hID0ge1xuICAgICAgICBjbGF6ejogXCJ1bml0IG9mIGluZm9ybWF0aW9uXCIsXG4gICAgICAgIGxhYmVsOiB7XG4gICAgICAgICAgdGV4dDogJ2N0Om1STkEnXG4gICAgICAgIH0sXG4gICAgICAgIGJib3g6IHtcbiAgICAgICAgICB3OiA0NSxcbiAgICAgICAgICBoOiAxNVxuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgZWxlbWVudFV0aWxpdGllcy5hZGRTdGF0ZU9ySW5mb0JveChtUm5hTm9kZSwgaW5mb2JveE9iamVjdE9mbVJuYSk7XG5cbiAgICAgIHZhciBwcm9kdWN0aW9uRWRnZSA9IGVsZW1lbnRVdGlsaXRpZXMuYWRkRWRnZShwcm9jZXNzTm9kZS5pZCgpLCBtUm5hTm9kZS5pZCgpLCB7Y2xhc3M6ICdwcm9kdWN0aW9uJywgbGFuZ3VhZ2U6ICdQRCd9KTtcbiAgICAgIHByb2R1Y3Rpb25FZGdlLmRhdGEoJ2p1c3RBZGRlZCcsIHRydWUpO1xuXG4gICAgICBjeS5lbmRCYXRjaCgpO1xuXG4gICAgICAvL2ZpbHRlciB0aGUganVzdCBhZGRlZCBlbGVtZW10cyB0byByZXR1cm4gdGhlbSBhbmQgcmVtb3ZlIGp1c3QgYWRkZWQgbWFya1xuICAgICAgdmFyIGVsZXMgPSBjeS5lbGVtZW50cygnW2p1c3RBZGRlZF0nKTtcbiAgICAgIGVsZXMucmVtb3ZlRGF0YSgnanVzdEFkZGVkJyk7XG5cbiAgICAgIGN5LmVsZW1lbnRzKCkudW5zZWxlY3QoKTtcbiAgICAgIGVsZXMuc2VsZWN0KCk7XG5cbiAgICAgIHJldHVybiBlbGVzOyAvLyBSZXR1cm4gdGhlIGp1c3QgYWRkZWQgZWxlbWVudHNcbiAgICB9O1xuXG4gICAgZWxlbWVudFV0aWxpdGllcy5yb3RhdGU5MCA9IGZ1bmN0aW9uKHBvaW50LCBjZW50ZXIpIHtcbiAgICAgIGNvbnN0IHJlbGF0aXZlWCA9IGNlbnRlci54IC0gcG9pbnQueDtcbiAgICAgIGNvbnN0IHJlbGF0aXZlWSA9IGNlbnRlci55IC0gcG9pbnQueTtcblxuICAgICAgY29uc3QgcmVsYXRpdmVSb3RhdGVkWCA9IHJlbGF0aXZlWTtcbiAgICAgIGNvbnN0IHJlbGF0aXZlUm90YXRlZFkgPSAtMSAqIHJlbGF0aXZlWDtcblxuICAgICAgY29uc3QgcmVzdWx0WCA9IHJlbGF0aXZlUm90YXRlZFggKyBjZW50ZXIueDtcbiAgICAgIGNvbnN0IHJlc3VsdFkgPSByZWxhdGl2ZVJvdGF0ZWRZICsgY2VudGVyLnk7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHg6IHJlc3VsdFgsXG4gICAgICAgIHk6IHJlc3VsdFlcbiAgICAgIH1cbiAgICB9XG5cbiAgICBlbGVtZW50VXRpbGl0aWVzLmNyZWF0ZVRyYW5zbGF0aW9uID0gZnVuY3Rpb24ocmVndWxhdG9yTGFiZWwsIG91dHB1dExhYmVsLCBvcmllbnRhdGlvbikge1xuICAgICAgY29uc3QgZGVmYXVsdFNvdXJjZUFuZFNpbmtQcm9wZXJ0aWVzID0gZWxlbWVudFV0aWxpdGllcy5nZXREZWZhdWx0UHJvcGVydGllcyhcInNvdXJjZSBhbmQgc2lua1wiKTtcbiAgICAgIGNvbnN0IGRlZmF1bHROdWNsZWljQWNpZEZlYXR1cmVQcm9wZXJ0aWVzID0gZWxlbWVudFV0aWxpdGllcy5nZXREZWZhdWx0UHJvcGVydGllcyhcIm51Y2xlaWMgYWNpZCBmZWF0dXJlXCIpO1xuICAgICAgY29uc3QgZGVmYXVsdE1hY3JvbW9sZWN1bGVQcm9wZXRpZXMgPSBlbGVtZW50VXRpbGl0aWVzLmdldERlZmF1bHRQcm9wZXJ0aWVzKFwibWFjcm9tb2xlY3VsZVwiKVxuICAgICAgY29uc3QgZGVmYXVsdFByb2Nlc3NQcm9wZXJ0aWVzID0gZWxlbWVudFV0aWxpdGllcy5nZXREZWZhdWx0UHJvcGVydGllcyhcInByb2Nlc3NcIik7XG4gICAgICBjb25zdCBzb3VyY2VBbmRTaW5rV2lkdGggPSBkZWZhdWx0U291cmNlQW5kU2lua1Byb3BlcnRpZXMud2lkdGggfHwgNTA7XG4gICAgICBjb25zdCBudWNsZWljQWNpZEZlYXR1cmVXaWR0aCA9IGRlZmF1bHROdWNsZWljQWNpZEZlYXR1cmVQcm9wZXJ0aWVzLndpZHRoIHx8IDUwO1xuICAgICAgY29uc3QgbnVjbGVpY0FjaWRGZWF0dXJlSGVpZ2h0ID0gZGVmYXVsdE51Y2xlaWNBY2lkRmVhdHVyZVByb3BlcnRpZXMuaGVpZ2h0IHx8IDUwO1xuICAgICAgY29uc3QgbWFjcm9tb2xlY3VsZVdpZHRoID0gZGVmYXVsdE1hY3JvbW9sZWN1bGVQcm9wZXRpZXMud2lkdGggfHwgNTA7XG4gICAgICBjb25zdCBwcm9jZXNzV2lkdGggPSBkZWZhdWx0UHJvY2Vzc1Byb3BlcnRpZXMud2lkdGggfHwgNTA7XG4gICAgICBjb25zdCBwcm9jZXNzSGVpZ2h0ID0gZGVmYXVsdFByb2Nlc3NQcm9wZXJ0aWVzLmhlaWdodCB8fCA1MDtcbiAgICAgIGNvbnN0IHByb2Nlc3NQb3NpdGlvbiA9IGVsZW1lbnRVdGlsaXRpZXMuY29udmVydFRvTW9kZWxQb3NpdGlvbih7eDogY3kud2lkdGgoKSAvIDIsIHk6IGN5LmhlaWdodCgpIC8gMn0pO1xuICAgICAgY29uc3QgZWRnZUxlbmd0aCA9IDMwO1xuICAgICAgY29uc3QgdmVydGljYWwgPSBvcmllbnRhdGlvbiA9PT0gXCJ2ZXJ0aWNhbFwiO1xuICAgICAgY29uc3QgcHJvY2Vzc1BvcnRzT3JkZXJpbmcgPSB2ZXJ0aWNhbCA/IFwiVC10by1CXCIgOiBcIkwtdG8tUlwiO1xuICAgICAgY29uc3QgbWluSW5mb2JveERpbWVuc2lvbiA9IDE1O1xuICAgICAgY29uc3Qgd2lkdGhQZXJDaGFyID0gNjtcbiAgICAgIGNvbnN0IHJlZ3VsYXRvckluZm9ib3hMYWJlbCA9IFwiY3Q6bVJOQVwiO1xuXG4gICAgICBjeS5zdGFydEJhdGNoKCk7XG5cbiAgICAgIGlmICghZWxlbWVudFV0aWxpdGllcy5nZXRNYXBUeXBlKCkpIHtcbiAgICAgICAgZWxlbWVudFV0aWxpdGllcy5zZXRNYXBUeXBlKFwiUERcIik7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHByb2Nlc3NOb2RlID0gZWxlbWVudFV0aWxpdGllcy5hZGROb2RlKHByb2Nlc3NQb3NpdGlvbi54LCBwcm9jZXNzUG9zaXRpb24ueSwge2NsYXNzOiBcInByb2Nlc3NcIiwgbGFuZ3VhZ2U6IFwiUERcIn0pO1xuICAgICAgZWxlbWVudFV0aWxpdGllcy5zZXRQb3J0c09yZGVyaW5nKHByb2Nlc3NOb2RlLCBwcm9jZXNzUG9ydHNPcmRlcmluZyk7XG4gICAgICBwcm9jZXNzTm9kZS5kYXRhKCdqdXN0QWRkZWQnLCB0cnVlKTtcblxuICAgICAgbGV0IHhQb3NPZklucHV0ID0gcHJvY2Vzc1Bvc2l0aW9uLnggLSBlZGdlTGVuZ3RoIC0gcHJvY2Vzc1dpZHRoIC8gMiAtIHNvdXJjZUFuZFNpbmtXaWR0aCAvIDI7XG4gICAgICBsZXQgeFBvc09mT3V0cHV0ID0gcHJvY2Vzc1Bvc2l0aW9uLnggKyBlZGdlTGVuZ3RoICsgcHJvY2Vzc1dpZHRoIC8gMiArIG1hY3JvbW9sZWN1bGVXaWR0aCAvIDI7XG4gICAgICBsZXQgeVBvc09mSW5wdXQgPSBwcm9jZXNzUG9zaXRpb24ueTtcbiAgICAgIGxldCB5UG9zT2ZPdXRwdXQgPSBwcm9jZXNzUG9zaXRpb24ueTtcblxuICAgICAgbGV0IG5vZGVQb3NpdGlvbiA9IHtcbiAgICAgICAgeDogeFBvc09mSW5wdXQsXG4gICAgICAgIHk6IHlQb3NPZklucHV0XG4gICAgICB9XG4gICAgICBpZiAodmVydGljYWwpIHtcbiAgICAgICAgbm9kZVBvc2l0aW9uID0gZWxlbWVudFV0aWxpdGllcy5yb3RhdGU5MChub2RlUG9zaXRpb24sIHByb2Nlc3NQb3NpdGlvbik7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGlucHV0Tm9kZSA9IGVsZW1lbnRVdGlsaXRpZXMuYWRkTm9kZShub2RlUG9zaXRpb24ueCwgbm9kZVBvc2l0aW9uLnksIHtjbGFzczogJ3NvdXJjZSBhbmQgc2luaycsIGxhbmd1YWdlOiAnUEQnfSk7XG4gICAgICBpbnB1dE5vZGUuZGF0YShcImp1c3RBZGRlZFwiLCB0cnVlKTtcbiAgICAgIGlucHV0Tm9kZS5kYXRhKFwibGFiZWxcIiwgbGFiZWwpO1xuXG4gICAgICBjb25zdCBpbnB1dEVkZ2UgPSBlbGVtZW50VXRpbGl0aWVzLmFkZEVkZ2UoaW5wdXROb2RlLmlkKCksIHByb2Nlc3NOb2RlLmlkKCksIHtjbGFzczogJ2NvbnN1bXB0aW9uJywgbGFuZ3VhZ2U6ICdQRCd9KVxuICAgICAgaW5wdXRFZGdlLmRhdGEoXCJqdXN0QWRkZWRcIiwgdHJ1ZSk7XG5cbiAgICAgIG5vZGVQb3NpdGlvbiA9IHtcbiAgICAgICAgeDogeFBvc09mT3V0cHV0LFxuICAgICAgICB5OiB5UG9zT2ZPdXRwdXRcbiAgICAgIH1cblxuICAgICAgaWYgKHZlcnRpY2FsKSB7XG4gICAgICAgIG5vZGVQb3NpdGlvbiA9IGVsZW1lbnRVdGlsaXRpZXMucm90YXRlOTAobm9kZVBvc2l0aW9uLCBwcm9jZXNzUG9zaXRpb24pO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBvdXRwdXROb2RlID0gZWxlbWVudFV0aWxpdGllcy5hZGROb2RlKG5vZGVQb3NpdGlvbi54LCBub2RlUG9zaXRpb24ueSwge2NsYXNzOiBcIm1hY3JvbW9sZWN1bGVcIiwgbGFuZ3VhZ2U6ICdQRCd9KTtcbiAgICAgIG91dHB1dE5vZGUuZGF0YShcImp1c3RBZGRlZFwiLCB0cnVlKTtcbiAgICAgIG91dHB1dE5vZGUuZGF0YShcImxhYmVsXCIsIG91dHB1dExhYmVsKTtcblxuICAgICAgY29uc3Qgb3V0cHV0RWRnZSA9IGVsZW1lbnRVdGlsaXRpZXMuYWRkRWRnZShwcm9jZXNzTm9kZS5pZCgpLCBvdXRwdXROb2RlLmlkKCksIHtjbGFzczogJ3Byb2R1Y3Rpb24nLCBsYW5ndWFnZTogJ1BEJ30pXG4gICAgICBvdXRwdXRFZGdlLmRhdGEoXCJqdXN0QWRkZWRcIiwgdHJ1ZSk7XG5cbiAgICAgIGxldCB4UG9zT2ZSZWd1bGF0b3IgPSBwcm9jZXNzUG9zaXRpb24ueDtcbiAgICAgIGNvbnN0IGRpbWVuc2lvbiA9IHZlcnRpY2FsID8gbnVjbGVpY0FjaWRGZWF0dXJlV2lkdGggOiBudWNsZWljQWNpZEZlYXR1cmVIZWlnaHQ7XG4gICAgICBsZXQgeVBvc09mUmVndWxhdG9yID0gcHJvY2Vzc1Bvc2l0aW9uLnkgLSAoKHByb2Nlc3NIZWlnaHQgLyAyKSArIChkaW1lbnNpb24gLyAyKSArIGVkZ2VMZW5ndGgpOyBcblxuICAgICAgbm9kZVBvc2l0aW9uID0ge1xuICAgICAgICB4OiB4UG9zT2ZSZWd1bGF0b3IsXG4gICAgICAgIHk6IHlQb3NPZlJlZ3VsYXRvclxuICAgICAgfVxuICAgICAgaWYgKHZlcnRpY2FsKSB7XG4gICAgICAgIG5vZGVQb3NpdGlvbiA9IGVsZW1lbnRVdGlsaXRpZXMucm90YXRlOTAobm9kZVBvc2l0aW9uLCBwcm9jZXNzUG9zaXRpb24pO1xuICAgICAgfVxuXG4gICAgICBjb25zdCByZWd1bGF0b3JOb2RlID0gZWxlbWVudFV0aWxpdGllcy5hZGROb2RlKG5vZGVQb3NpdGlvbi54LCBub2RlUG9zaXRpb24ueSwge2NsYXNzOiBcIm51Y2xlaWMgYWNpZCBmZWF0dXJlXCIsIGxhbmd1YWdlOiAnUEQnfSk7XG4gICAgICByZWd1bGF0b3JOb2RlLmRhdGEoJ2p1c3RBZGRlZCcsIHRydWUpO1xuICAgICAgcmVndWxhdG9yTm9kZS5kYXRhKCdsYWJlbCcsIHJlZ3VsYXRvckxhYmVsKTtcbiAgICAgIGluZm9ib3hPYmplY3QgPSB7XG4gICAgICAgIGNsYXp6OiBcInVuaXQgb2YgaW5mb3JtYXRpb25cIixcbiAgICAgICAgbGFiZWw6IHtcbiAgICAgICAgICB0ZXh0OiByZWd1bGF0b3JJbmZvYm94TGFiZWxcbiAgICAgICAgfSxcbiAgICAgICAgYmJveDoge1xuICAgICAgICAgIHc6IE1hdGgubWF4KHJlZ3VsYXRvckluZm9ib3hMYWJlbC5sZW5ndGggKiB3aWR0aFBlckNoYXIsIG1pbkluZm9ib3hEaW1lbnNpb24pLFxuICAgICAgICAgIGg6IG1pbkluZm9ib3hEaW1lbnNpb25cbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGVsZW1lbnRVdGlsaXRpZXMuYWRkU3RhdGVPckluZm9Cb3gocmVndWxhdG9yTm9kZSwgaW5mb2JveE9iamVjdCk7XG5cbiAgICAgIGNvbnN0IHJlZ3VsYXRvckVkZ2UgPSBlbGVtZW50VXRpbGl0aWVzLmFkZEVkZ2UocmVndWxhdG9yTm9kZS5pZCgpLCBwcm9jZXNzTm9kZS5pZCgpLCB7Y2xhc3M6ICduZWNlc3Nhcnkgc3RpbXVsYXRpb24nLCBsYW5ndWFnZTogJ1BEJ30pO1xuICAgICAgcmVndWxhdG9yRWRnZS5kYXRhKCdqdXN0QWRkZWQnLCB0cnVlKTtcblxuICAgICAgY3kuZW5kQmF0Y2goKTtcblxuICAgICAgY29uc3QgZWxlcyA9IGN5LmVsZW1lbnRzKCdbanVzdEFkZGVkXScpO1xuICAgICAgZWxlcy5yZW1vdmVEYXRhKCdqdXN0QWRkZWQnKTtcblxuICAgICAgY3kuZWxlbWVudHMoKS51bnNlbGVjdCgpO1xuICAgICAgZWxlcy5zZWxlY3QoKTtcblxuICAgICAgcmV0dXJuIGVsZXM7XG4gICAgfVxuXG4gICAgZWxlbWVudFV0aWxpdGllcy5jcmVhdGVUcmFuc2NyaXB0aW9uID0gZnVuY3Rpb24obGFiZWwsIG9yaWVudGF0aW9uKSB7XG4gICAgICBjb25zdCBkZWZhdWx0U291cmNlQW5kU2lua1Byb3BlcnRpZXMgPSBlbGVtZW50VXRpbGl0aWVzLmdldERlZmF1bHRQcm9wZXJ0aWVzKFwic291cmNlIGFuZCBzaW5rXCIpO1xuICAgICAgY29uc3QgZGVmYXVsdE51Y2xlaWNBY2lkRmVhdHVyZVByb3BlcnRpZXMgPSBlbGVtZW50VXRpbGl0aWVzLmdldERlZmF1bHRQcm9wZXJ0aWVzKFwibnVjbGVpYyBhY2lkIGZlYXR1cmVcIik7XG4gICAgICBjb25zdCBkZWZhdWx0UHJvY2Vzc1Byb3BlcnRpZXMgPSBlbGVtZW50VXRpbGl0aWVzLmdldERlZmF1bHRQcm9wZXJ0aWVzKFwicHJvY2Vzc1wiKVxuICAgICAgY29uc3Qgc291cmNlQW5kU2lua1dpZHRoID0gZGVmYXVsdFNvdXJjZUFuZFNpbmtQcm9wZXJ0aWVzLndpZHRoIHx8IDUwO1xuICAgICAgY29uc3QgbnVjbGVpY0FjaWRGZWF0dXJlV2lkdGggPSBkZWZhdWx0TnVjbGVpY0FjaWRGZWF0dXJlUHJvcGVydGllcy53aWR0aCB8fCA1MDtcbiAgICAgIGNvbnN0IG51Y2xlaWNBY2lkRmVhdHVyZUhlaWdodCA9IGRlZmF1bHROdWNsZWljQWNpZEZlYXR1cmVQcm9wZXJ0aWVzLmhlaWdodCB8fCA1MDtcbiAgICAgIGNvbnN0IHByb2Nlc3NXaWR0aCA9IGRlZmF1bHRQcm9jZXNzUHJvcGVydGllcy53aWR0aCB8fCA1MDtcbiAgICAgIGNvbnN0IHByb2Nlc3NIZWlnaHQgPSBkZWZhdWx0UHJvY2Vzc1Byb3BlcnRpZXMuaGVpZ2h0IHx8IDUwO1xuICAgICAgY29uc3QgcHJvY2Vzc1Bvc2l0aW9uID0gZWxlbWVudFV0aWxpdGllcy5jb252ZXJ0VG9Nb2RlbFBvc2l0aW9uKHt4OiBjeS53aWR0aCgpIC8gMiwgeTogY3kuaGVpZ2h0KCkgLyAyfSk7XG4gICAgICBjb25zdCBlZGdlTGVuZ3RoID0gMzA7XG4gICAgICBjb25zdCB2ZXJ0aWNhbCA9IG9yaWVudGF0aW9uID09PSBcInZlcnRpY2FsXCI7XG4gICAgICBjb25zdCBwcm9jZXNzUG9ydHNPcmRlcmluZyA9IHZlcnRpY2FsID8gXCJULXRvLUJcIiA6IFwiTC10by1SXCI7XG4gICAgICBjb25zdCBtaW5JbmZvYm94RGltZW5zaW9uID0gMTU7XG4gICAgICBjb25zdCB3aWR0aFBlckNoYXIgPSA2O1xuICAgICAgY29uc3Qgb3V0cHV0SW5mb2JveExhYmVsID0gXCJjdDptUk5BXCI7XG4gICAgICBjb25zdCByZWd1bGF0b3JJbmZvYm94TGFiZWwgPSBcImN0OmdlbmVcIjtcblxuICAgICAgY3kuc3RhcnRCYXRjaCgpO1xuXG4gICAgICBpZiAoIWVsZW1lbnRVdGlsaXRpZXMuZ2V0TWFwVHlwZSgpKSB7XG4gICAgICAgIGVsZW1lbnRVdGlsaXRpZXMuc2V0TWFwVHlwZShcIlBEXCIpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBwcm9jZXNzTm9kZSA9IGVsZW1lbnRVdGlsaXRpZXMuYWRkTm9kZShwcm9jZXNzUG9zaXRpb24ueCwgcHJvY2Vzc1Bvc2l0aW9uLnksIHtjbGFzczogXCJwcm9jZXNzXCIsIGxhbmd1YWdlOiBcIlBEXCJ9KTtcbiAgICAgIGVsZW1lbnRVdGlsaXRpZXMuc2V0UG9ydHNPcmRlcmluZyhwcm9jZXNzTm9kZSwgcHJvY2Vzc1BvcnRzT3JkZXJpbmcpO1xuICAgICAgcHJvY2Vzc05vZGUuZGF0YSgnanVzdEFkZGVkJywgdHJ1ZSk7XG5cbiAgICAgIGxldCB4UG9zT2ZJbnB1dCA9IHByb2Nlc3NQb3NpdGlvbi54IC0gZWRnZUxlbmd0aCAtIHByb2Nlc3NXaWR0aCAvIDIgLSBzb3VyY2VBbmRTaW5rV2lkdGggLyAyO1xuICAgICAgbGV0IHhQb3NPZk91dHB1dCA9IHByb2Nlc3NQb3NpdGlvbi54ICsgZWRnZUxlbmd0aCArIHByb2Nlc3NXaWR0aCAvIDIgKyBudWNsZWljQWNpZEZlYXR1cmVXaWR0aCAvIDI7XG4gICAgICBsZXQgeVBvc09mSW5wdXQgPSBwcm9jZXNzUG9zaXRpb24ueTtcbiAgICAgIGxldCB5UG9zT2ZPdXRwdXQgPSBwcm9jZXNzUG9zaXRpb24ueTtcblxuICAgICAgbGV0IG5vZGVQb3NpdGlvbiA9IHtcbiAgICAgICAgeDogeFBvc09mSW5wdXQsXG4gICAgICAgIHk6IHlQb3NPZklucHV0XG4gICAgICB9XG4gICAgICBpZiAodmVydGljYWwpIHtcbiAgICAgICAgbm9kZVBvc2l0aW9uID0gZWxlbWVudFV0aWxpdGllcy5yb3RhdGU5MChub2RlUG9zaXRpb24sIHByb2Nlc3NQb3NpdGlvbik7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGlucHV0Tm9kZSA9IGVsZW1lbnRVdGlsaXRpZXMuYWRkTm9kZShub2RlUG9zaXRpb24ueCwgbm9kZVBvc2l0aW9uLnksIHtjbGFzczogJ3NvdXJjZSBhbmQgc2luaycsIGxhbmd1YWdlOiAnUEQnfSk7XG4gICAgICBpbnB1dE5vZGUuZGF0YShcImp1c3RBZGRlZFwiLCB0cnVlKTtcblxuICAgICAgY29uc3QgaW5wdXRFZGdlID0gZWxlbWVudFV0aWxpdGllcy5hZGRFZGdlKGlucHV0Tm9kZS5pZCgpLCBwcm9jZXNzTm9kZS5pZCgpLCB7Y2xhc3M6ICdjb25zdW1wdGlvbicsIGxhbmd1YWdlOiAnUEQnfSlcbiAgICAgIGlucHV0RWRnZS5kYXRhKFwianVzdEFkZGVkXCIsIHRydWUpO1xuXG4gICAgICBub2RlUG9zaXRpb24gPSB7XG4gICAgICAgIHg6IHhQb3NPZk91dHB1dCxcbiAgICAgICAgeTogeVBvc09mT3V0cHV0XG4gICAgICB9XG5cbiAgICAgIGlmICh2ZXJ0aWNhbCkge1xuICAgICAgICBub2RlUG9zaXRpb24gPSBlbGVtZW50VXRpbGl0aWVzLnJvdGF0ZTkwKG5vZGVQb3NpdGlvbiwgcHJvY2Vzc1Bvc2l0aW9uKTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgb3V0cHV0Tm9kZSA9IGVsZW1lbnRVdGlsaXRpZXMuYWRkTm9kZShub2RlUG9zaXRpb24ueCwgbm9kZVBvc2l0aW9uLnksIHtjbGFzczogJ251Y2xlaWMgYWNpZCBmZWF0dXJlJywgbGFuZ3VhZ2U6ICdQRCd9KTtcbiAgICAgIG91dHB1dE5vZGUuZGF0YShcImp1c3RBZGRlZFwiLCB0cnVlKTtcbiAgICAgIG91dHB1dE5vZGUuZGF0YShcImxhYmVsXCIsIGxhYmVsKTtcbiAgICAgIGluZm9ib3hPYmplY3QgPSB7XG4gICAgICAgIGNsYXp6OiBcInVuaXQgb2YgaW5mb3JtYXRpb25cIixcbiAgICAgICAgbGFiZWw6IHtcbiAgICAgICAgICB0ZXh0OiBvdXRwdXRJbmZvYm94TGFiZWxcbiAgICAgICAgfSxcbiAgICAgICAgYmJveDoge1xuICAgICAgICAgIHc6IE1hdGgubWF4KG91dHB1dEluZm9ib3hMYWJlbC5sZW5ndGggKiB3aWR0aFBlckNoYXIsIG1pbkluZm9ib3hEaW1lbnNpb24pLFxuICAgICAgICAgIGg6IG1pbkluZm9ib3hEaW1lbnNpb25cbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGVsZW1lbnRVdGlsaXRpZXMuYWRkU3RhdGVPckluZm9Cb3gob3V0cHV0Tm9kZSwgaW5mb2JveE9iamVjdCk7XG5cbiAgICAgIGNvbnN0IG91dHB1dEVkZ2UgPSBlbGVtZW50VXRpbGl0aWVzLmFkZEVkZ2UocHJvY2Vzc05vZGUuaWQoKSwgb3V0cHV0Tm9kZS5pZCgpLCB7Y2xhc3M6ICdwcm9kdWN0aW9uJywgbGFuZ3VhZ2U6ICdQRCd9KVxuICAgICAgb3V0cHV0RWRnZS5kYXRhKFwianVzdEFkZGVkXCIsIHRydWUpO1xuXG4gICAgICBsZXQgeFBvc09mUmVndWxhdG9yID0gcHJvY2Vzc1Bvc2l0aW9uLng7XG4gICAgICBjb25zdCBkaW1lbnNpb24gPSB2ZXJ0aWNhbCA/IG51Y2xlaWNBY2lkRmVhdHVyZVdpZHRoIDogbnVjbGVpY0FjaWRGZWF0dXJlSGVpZ2h0O1xuICAgICAgbGV0IHlQb3NPZlJlZ3VsYXRvciA9IHByb2Nlc3NQb3NpdGlvbi55IC0gKChwcm9jZXNzSGVpZ2h0IC8gMikgKyAoZGltZW5zaW9uIC8gMikgKyBlZGdlTGVuZ3RoKTsgXG5cbiAgICAgIG5vZGVQb3NpdGlvbiA9IHtcbiAgICAgICAgeDogeFBvc09mUmVndWxhdG9yLFxuICAgICAgICB5OiB5UG9zT2ZSZWd1bGF0b3JcbiAgICAgIH1cbiAgICAgIGlmICh2ZXJ0aWNhbCkge1xuICAgICAgICBub2RlUG9zaXRpb24gPSBlbGVtZW50VXRpbGl0aWVzLnJvdGF0ZTkwKG5vZGVQb3NpdGlvbiwgcHJvY2Vzc1Bvc2l0aW9uKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcmVndWxhdG9yTm9kZSA9IGVsZW1lbnRVdGlsaXRpZXMuYWRkTm9kZShub2RlUG9zaXRpb24ueCwgbm9kZVBvc2l0aW9uLnksIHtjbGFzczogXCJudWNsZWljIGFjaWQgZmVhdHVyZVwiLCBsYW5ndWFnZTogJ1BEJ30pO1xuICAgICAgcmVndWxhdG9yTm9kZS5kYXRhKCdqdXN0QWRkZWQnLCB0cnVlKTtcbiAgICAgIHJlZ3VsYXRvck5vZGUuZGF0YSgnbGFiZWwnLCBsYWJlbCk7XG4gICAgICBpbmZvYm94T2JqZWN0ID0ge1xuICAgICAgICBjbGF6ejogXCJ1bml0IG9mIGluZm9ybWF0aW9uXCIsXG4gICAgICAgIGxhYmVsOiB7XG4gICAgICAgICAgdGV4dDogcmVndWxhdG9ySW5mb2JveExhYmVsXG4gICAgICAgIH0sXG4gICAgICAgIGJib3g6IHtcbiAgICAgICAgICB3OiBNYXRoLm1heChyZWd1bGF0b3JJbmZvYm94TGFiZWwubGVuZ3RoICogd2lkdGhQZXJDaGFyLCBtaW5JbmZvYm94RGltZW5zaW9uKSxcbiAgICAgICAgICBoOiBtaW5JbmZvYm94RGltZW5zaW9uXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBlbGVtZW50VXRpbGl0aWVzLmFkZFN0YXRlT3JJbmZvQm94KHJlZ3VsYXRvck5vZGUsIGluZm9ib3hPYmplY3QpO1xuXG4gICAgICBjb25zdCByZWd1bGF0b3JFZGdlID0gZWxlbWVudFV0aWxpdGllcy5hZGRFZGdlKHJlZ3VsYXRvck5vZGUuaWQoKSwgcHJvY2Vzc05vZGUuaWQoKSwge2NsYXNzOiAnbmVjZXNzYXJ5IHN0aW11bGF0aW9uJywgbGFuZ3VhZ2U6ICdQRCd9KTtcbiAgICAgIHJlZ3VsYXRvckVkZ2UuZGF0YSgnanVzdEFkZGVkJywgdHJ1ZSk7XG5cbiAgICAgIGN5LmVuZEJhdGNoKCk7XG5cbiAgICAgIGNvbnN0IGVsZXMgPSBjeS5lbGVtZW50cygnW2p1c3RBZGRlZF0nKTtcbiAgICAgIGVsZXMucmVtb3ZlRGF0YSgnanVzdEFkZGVkJyk7XG5cbiAgICAgIGN5LmVsZW1lbnRzKCkudW5zZWxlY3QoKTtcbiAgICAgIGVsZXMuc2VsZWN0KCk7XG5cbiAgICAgIHJldHVybiBlbGVzO1xuICAgIH1cblxuICAgIGVsZW1lbnRVdGlsaXRpZXMuY3JlYXRlRGVncmFkYXRpb24gPSBmdW5jdGlvbihtYWNyb21vbGVjdWxlLCBvcmllbnRhdGlvbikge1xuICAgICAgY29uc3QgbWFjcm9tb2xlY3VsZU5hbWUgPSBtYWNyb21vbGVjdWxlLm5hbWU7XG4gICAgICBjb25zdCBkZWZhdWx0TWFjcm9tb2xlY3VsZVByb3BlcnRpZXMgPSBlbGVtZW50VXRpbGl0aWVzLmdldERlZmF1bHRQcm9wZXJ0aWVzKFwibWFjcm9tb2xlY3VsZVwiKTtcbiAgICAgIGNvbnN0IG1hY3JvbW9sZWN1bGVXaWR0aCA9IGRlZmF1bHRNYWNyb21vbGVjdWxlUHJvcGVydGllcy53aWR0aCB8fCA1MDtcbiAgICAgIGNvbnN0IGRlZmF1bHRQcm9jZXNzUHJvcGVydGllcyA9IGVsZW1lbnRVdGlsaXRpZXMuZ2V0RGVmYXVsdFByb3BlcnRpZXMoXCJjYXRhbHl0aWNcIik7XG4gICAgICBjb25zdCBwcm9jZXNzV2lkdGggPSBkZWZhdWx0UHJvY2Vzc1Byb3BlcnRpZXMud2lkdGggfHwgNTA7XG4gICAgICBjb25zdCBwcm9jZXNzUG9zaXRpb24gPSBlbGVtZW50VXRpbGl0aWVzLmNvbnZlcnRUb01vZGVsUG9zaXRpb24oe3g6IGN5LndpZHRoKCkgLyAyLCB5OiBjeS5oZWlnaHQoKSAvIDJ9KTtcbiAgICAgIGNvbnN0IGVkZ2VMZW5ndGggPSAzMDtcbiAgICAgIGNvbnN0IHZlcnRpY2FsID0gb3JpZW50YXRpb24gPT09IFwidmVydGljYWxcIjtcbiAgICAgIGNvbnN0IHByb2Nlc3NQb3J0c09yZGVyaW5nID0gdmVydGljYWwgPyBcIlQtdG8tQlwiIDogXCJMLXRvLVJcIjtcblxuICAgICAgY3kuc3RhcnRCYXRjaCgpO1xuXG4gICAgICBpZiAoIWVsZW1lbnRVdGlsaXRpZXMuZ2V0TWFwVHlwZSgpKSB7XG4gICAgICAgIGVsZW1lbnRVdGlsaXRpZXMuc2V0TWFwVHlwZShcIlBEXCIpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBwcm9jZXNzTm9kZSA9IGVsZW1lbnRVdGlsaXRpZXMuYWRkTm9kZShwcm9jZXNzUG9zaXRpb24ueCwgcHJvY2Vzc1Bvc2l0aW9uLnksIHtjbGFzczogXCJwcm9jZXNzXCIsIGxhbmd1YWdlOiBcIlBEXCJ9KTtcbiAgICAgIGVsZW1lbnRVdGlsaXRpZXMuc2V0UG9ydHNPcmRlcmluZyhwcm9jZXNzTm9kZSwgcHJvY2Vzc1BvcnRzT3JkZXJpbmcpO1xuICAgICAgcHJvY2Vzc05vZGUuZGF0YSgnanVzdEFkZGVkJywgdHJ1ZSk7XG5cbiAgICAgIGxldCB4UG9zT2ZJbnB1dCA9IHByb2Nlc3NQb3NpdGlvbi54IC0gZWRnZUxlbmd0aCAtIHByb2Nlc3NXaWR0aCAvIDIgLSBtYWNyb21vbGVjdWxlV2lkdGggLyAyO1xuICAgICAgbGV0IHhQb3NPZk91dHB1dCA9IHByb2Nlc3NQb3NpdGlvbi54ICsgZWRnZUxlbmd0aCArIHByb2Nlc3NXaWR0aCAvIDIgKyBtYWNyb21vbGVjdWxlV2lkdGggLyAyO1xuICAgICAgbGV0IHlQb3NPZklucHV0ID0gcHJvY2Vzc1Bvc2l0aW9uLnk7XG4gICAgICBsZXQgeVBvc09mT3V0cHV0ID0gcHJvY2Vzc1Bvc2l0aW9uLnk7XG5cbiAgICAgIGxldCBub2RlUG9zaXRpb24gPSB7XG4gICAgICAgIHg6IHhQb3NPZklucHV0LFxuICAgICAgICB5OiB5UG9zT2ZJbnB1dFxuICAgICAgfVxuICAgICAgaWYgKHZlcnRpY2FsKSB7XG4gICAgICAgIG5vZGVQb3NpdGlvbiA9IGVsZW1lbnRVdGlsaXRpZXMucm90YXRlOTAobm9kZVBvc2l0aW9uLCBwcm9jZXNzUG9zaXRpb24pO1xuICAgICAgfVxuXG4gICAgICBsZXQgaW5wdXROb2RlID0gZWxlbWVudFV0aWxpdGllcy5hZGROb2RlKG5vZGVQb3NpdGlvbi54LCBub2RlUG9zaXRpb24ueSwge2NsYXNzOiAnbWFjcm9tb2xlY3VsZScsIGxhbmd1YWdlOiAnUEQnfSk7XG4gICAgICBpbnB1dE5vZGUuZGF0YShcImp1c3RBZGRlZFwiLCB0cnVlKTtcbiAgICAgIGlucHV0Tm9kZS5kYXRhKFwibGFiZWxcIiwgbWFjcm9tb2xlY3VsZU5hbWUpO1xuXG4gICAgICBsZXQgaW5wdXRFZGdlID0gZWxlbWVudFV0aWxpdGllcy5hZGRFZGdlKGlucHV0Tm9kZS5pZCgpLCBwcm9jZXNzTm9kZS5pZCgpLCB7Y2xhc3M6ICdjb25zdW1wdGlvbicsIGxhbmd1YWdlOiAnUEQnfSlcbiAgICAgIGlucHV0RWRnZS5kYXRhKFwianVzdEFkZGVkXCIsIHRydWUpO1xuXG4gICAgICBub2RlUG9zaXRpb24gPSB7XG4gICAgICAgIHg6IHhQb3NPZk91dHB1dCxcbiAgICAgICAgeTogeVBvc09mT3V0cHV0XG4gICAgICB9XG5cbiAgICAgIGlmICh2ZXJ0aWNhbCkge1xuICAgICAgICBub2RlUG9zaXRpb24gPSBlbGVtZW50VXRpbGl0aWVzLnJvdGF0ZTkwKG5vZGVQb3NpdGlvbiwgcHJvY2Vzc1Bvc2l0aW9uKTtcbiAgICAgIH1cblxuICAgICAgbGV0IG91dHB1dE5vZGUgPSBlbGVtZW50VXRpbGl0aWVzLmFkZE5vZGUobm9kZVBvc2l0aW9uLngsIG5vZGVQb3NpdGlvbi55LCB7Y2xhc3M6ICdzb3VyY2UgYW5kIHNpbmsnLCBsYW5ndWFnZTogJ1BEJ30pO1xuICAgICAgb3V0cHV0Tm9kZS5kYXRhKFwianVzdEFkZGVkXCIsIHRydWUpO1xuXG4gICAgICBsZXQgb3V0cHV0RWRnZSA9IGVsZW1lbnRVdGlsaXRpZXMuYWRkRWRnZShwcm9jZXNzTm9kZS5pZCgpLCBvdXRwdXROb2RlLmlkKCksIHtjbGFzczogJ3Byb2R1Y3Rpb24nLCBsYW5ndWFnZTogJ1BEJ30pXG4gICAgICBvdXRwdXRFZGdlLmRhdGEoXCJqdXN0QWRkZWRcIiwgdHJ1ZSk7XG5cbiAgICAgIGN5LmVuZEJhdGNoKCk7XG5cbiAgICAgIGNvbnN0IGVsZXMgPSBjeS5lbGVtZW50cygnW2p1c3RBZGRlZF0nKTtcbiAgICAgIGVsZXMucmVtb3ZlRGF0YSgnanVzdEFkZGVkJyk7XG5cbiAgICAgIGN5LmVsZW1lbnRzKCkudW5zZWxlY3QoKTtcbiAgICAgIGVsZXMuc2VsZWN0KCk7XG5cbiAgICAgIHJldHVybiBlbGVzO1xuICAgIH1cblxuICAgIGVsZW1lbnRVdGlsaXRpZXMuY3JlYXRlQ29tcGxleFByb3RlaW5Gb3JtYXRpb24gPSBmdW5jdGlvbihwcm90ZWluTGFiZWxzLCBjb21wbGV4TGFiZWwsIHJlZ3VsYXRvciwgb3JpZW50YXRpb24sIHJldmVyc2UpIHtcbiAgICAgIGNvbnN0IGhhc1JlZ3VsYXRvciA9IHJlZ3VsYXRvci5uYW1lICE9PSB1bmRlZmluZWQ7XG4gICAgICBjb25zdCBkZWZhdWx0TWFjcm9tb2xlY3VsZVByb3BlcnRpZXMgPSBlbGVtZW50VXRpbGl0aWVzLmdldERlZmF1bHRQcm9wZXJ0aWVzKFwibWFjcm9tb2xlY3VsZVwiKTtcbiAgICAgIGNvbnN0IGRlZmF1bHRSZWd1bGF0b3JQcm9wZXJ0aWVzID0gaGFzUmVndWxhdG9yID8gZWxlbWVudFV0aWxpdGllcy5nZXREZWZhdWx0UHJvcGVydGllcyhyZWd1bGF0b3IudHlwZSkgOiB7fTtcbiAgICAgIGNvbnN0IGRlZmF1bHRQcm9jZXNzUHJvcGVydGllcyA9IGVsZW1lbnRVdGlsaXRpZXMuZ2V0RGVmYXVsdFByb3BlcnRpZXMoXCJjYXRhbHl0aWNcIik7XG4gICAgICBjb25zdCBwcm9jZXNzV2lkdGggPSBkZWZhdWx0UHJvY2Vzc1Byb3BlcnRpZXMud2lkdGggfHwgNTA7XG4gICAgICBjb25zdCBtYWNyb21vbGVjdWxlV2lkdGggPSBkZWZhdWx0TWFjcm9tb2xlY3VsZVByb3BlcnRpZXMud2lkdGggfHwgNTA7XG4gICAgICBjb25zdCBtYWNyb21vbGVjdWxlSGVpZ2h0ID0gZGVmYXVsdE1hY3JvbW9sZWN1bGVQcm9wZXJ0aWVzLmhlaWdodCB8fCA1MDsgXG4gICAgICBjb25zdCBwcm9jZXNzSGVpZ2h0ID0gZGVmYXVsdFByb2Nlc3NQcm9wZXJ0aWVzLmhlaWdodCB8fCA1MDtcbiAgICAgIGNvbnN0IHJlZ3VsYXRvckhlaWdodCA9IGRlZmF1bHRSZWd1bGF0b3JQcm9wZXJ0aWVzLmhlaWdodCB8fCA1MDtcbiAgICAgIGNvbnN0IHByb2Nlc3NQb3NpdGlvbiA9IGVsZW1lbnRVdGlsaXRpZXMuY29udmVydFRvTW9kZWxQb3NpdGlvbih7eDogY3kud2lkdGgoKSAvIDIsIHk6IGN5LmhlaWdodCgpIC8gMn0pO1xuICAgICAgY29uc3QgZWRnZUxlbmd0aCA9IDMwO1xuICAgICAgY29uc3QgcHJvY2Vzc1BvcnRzT3JkZXJpbmcgPSBvcmllbnRhdGlvbiA9PT0gXCJ2ZXJ0aWNhbFwiID8gXCJULXRvLUJcIiA6IFwiTC10by1SXCI7XG4gICAgICBjb25zdCBtaW5JbmZvYm94RGltZW5zaW9uID0gMjA7XG4gICAgICBjb25zdCB3aWR0aFBlckNoYXIgPSA2O1xuICAgICAgY29uc3QgdGlsaW5nUGFkZGluZ1ZlcnRpY2FsID0gMTU7XG4gICAgICBjb25zdCB0aWxpbmdQYWRkaW5nSG9yaXpvbnRhbCA9IDE1O1xuICAgICAgY29uc3QgbXVsdGltZXJPZmZzZXQgPSA2O1xuXG4gICAgICBjeS5zdGFydEJhdGNoKCk7XG5cbiAgICAgIGlmICghZWxlbWVudFV0aWxpdGllcy5nZXRNYXBUeXBlKCkpIHtcbiAgICAgICAgZWxlbWVudFV0aWxpdGllcy5zZXRNYXBUeXBlKFwiUERcIik7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHByb2Nlc3NOb2RlID0gZWxlbWVudFV0aWxpdGllcy5hZGROb2RlKHByb2Nlc3NQb3NpdGlvbi54LCBwcm9jZXNzUG9zaXRpb24ueSwge2NsYXNzOiBcInByb2Nlc3NcIiwgbGFuZ3VhZ2U6IFwiUERcIn0pO1xuICAgICAgZWxlbWVudFV0aWxpdGllcy5zZXRQb3J0c09yZGVyaW5nKHByb2Nlc3NOb2RlLCBwcm9jZXNzUG9ydHNPcmRlcmluZyk7XG4gICAgICBwcm9jZXNzTm9kZS5kYXRhKCdqdXN0QWRkZWQnLCB0cnVlKTtcblxuICAgICAgY29uc3Qgb2Zmc2V0WCA9IHByb2Nlc3NXaWR0aCAvIDIgKyBlZGdlTGVuZ3RoICsgbWFjcm9tb2xlY3VsZVdpZHRoIC8gMjtcbiAgICAgIGxldCB4UG9zT2ZQcm90ZWluID0gcmV2ZXJzZSA/IHByb2Nlc3NQb3NpdGlvbi54ICsgb2Zmc2V0WFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHByb2Nlc3NQb3NpdGlvbi54IC0gb2Zmc2V0WDtcblxuICAgICAgY29uc3QgcHJvdGVpbkNvdW50ID0gcHJvdGVpbkxhYmVscy5sZW5ndGg7XG5cbiAgICAgIGNvbnN0IG1hY3JvbW9sZWN1bGVEaW1lbnNpb24gPSBvcmllbnRhdGlvbiA9PT0gXCJ2ZXJ0aWNhbFwiID8gbWFjcm9tb2xlY3VsZVdpZHRoIDogbWFjcm9tb2xlY3VsZUhlaWdodDtcbiAgICAgIGNvbnN0IHN0ZXBPZmZzZXQgPSBtYWNyb21vbGVjdWxlRGltZW5zaW9uICsgdGlsaW5nUGFkZGluZ1ZlcnRpY2FsO1xuICAgICAgY29uc3Qgb2Zmc2V0WSA9IChwcm90ZWluQ291bnQgLSAxKSAvIDIgKiAobWFjcm9tb2xlY3VsZURpbWVuc2lvbiArIHRpbGluZ1BhZGRpbmdWZXJ0aWNhbCk7XG4gICAgICBjb25zdCBob3Jpem9udGFsT2Zmc2V0WCA9IChwcm90ZWluQ291bnQgLSAxKSAvIDIgKiAobWFjcm9tb2xlY3VsZURpbWVuc2lvbiArIHRpbGluZ1BhZGRpbmdIb3Jpem9udGFsKTtcbiAgICAgIFxuICAgICAgbGV0IHlQb3NPZlByb3RlaW4gPSBwcm9jZXNzUG9zaXRpb24ueSAtIG9mZnNldFk7XG5cbiAgICAgIHByb3RlaW5MYWJlbHMuZm9yRWFjaChmdW5jdGlvbihsYWJlbCkge1xuICAgICAgICBsZXQgbm9kZVBvc2l0aW9uID0ge1xuICAgICAgICAgIHg6IHhQb3NPZlByb3RlaW4sXG4gICAgICAgICAgeTogeVBvc09mUHJvdGVpblxuICAgICAgICB9XG4gICAgICAgIGlmIChvcmllbnRhdGlvbiA9PT0gXCJ2ZXJ0aWNhbFwiKSB7XG4gICAgICAgICAgbm9kZVBvc2l0aW9uID0gZWxlbWVudFV0aWxpdGllcy5yb3RhdGU5MChub2RlUG9zaXRpb24sIHByb2Nlc3NQb3NpdGlvbik7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBub2RlID0gZWxlbWVudFV0aWxpdGllcy5hZGROb2RlKG5vZGVQb3NpdGlvbi54LCBub2RlUG9zaXRpb24ueSwge2NsYXNzOiBcIm1hY3JvbW9sZWN1bGVcIiwgbGFuZ3VhZ2U6IFwiUERcIn0pO1xuICAgICAgICBub2RlLmRhdGEoXCJsYWJlbFwiLCBsYWJlbCk7XG4gICAgICAgIG5vZGUuZGF0YShcImp1c3RBZGRlZFwiLCB0cnVlKTtcbiAgICAgICAgeVBvc09mUHJvdGVpbiArPSBzdGVwT2Zmc2V0O1xuXG4gICAgICAgIGNvbnN0IHNvdXJjZSA9IHJldmVyc2UgPyBwcm9jZXNzTm9kZS5pZCgpIDogbm9kZS5pZCgpO1xuICAgICAgICBjb25zdCB0YXJnZXQgPSByZXZlcnNlID8gbm9kZS5pZCgpIDogcHJvY2Vzc05vZGUuaWQoKTtcbiAgICAgICAgY29uc3QgZWRnZUNsYXNzID0gcmV2ZXJzZSA/IFwicHJvZHVjdGlvblwiIDogXCJjb25zdW1wdGlvblwiO1xuICAgICAgICBjb25zdCBlZGdlID0gZWxlbWVudFV0aWxpdGllcy5hZGRFZGdlKHNvdXJjZSwgdGFyZ2V0LCB7Y2xhc3M6IGVkZ2VDbGFzcywgbGFuZ3VhZ2U6IFwiUERcIn0pO1xuICAgICAgICBlZGdlLmRhdGEoXCJqdXN0QWRkZWRcIiwgdHJ1ZSk7XG4gICAgICB9KTtcblxuICAgICAgbGV0IGNvbXBsZXhQb3MgPSB7XG4gICAgICAgIHg6IHByb2Nlc3NQb3NpdGlvbi54ICsgKHJldmVyc2UgPyAtMSA6IDEpICogb2Zmc2V0WCxcbiAgICAgICAgeTogcHJvY2Vzc1Bvc2l0aW9uLnlcbiAgICAgIH1cblxuICAgICAgaWYgKG9yaWVudGF0aW9uID09PSBcInZlcnRpY2FsXCIpIHtcbiAgICAgICAgY29tcGxleFBvcyA9IGVsZW1lbnRVdGlsaXRpZXMucm90YXRlOTAoY29tcGxleFBvcywgcHJvY2Vzc1Bvc2l0aW9uKTsgXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNvbXBsZXggPSBlbGVtZW50VXRpbGl0aWVzLmFkZE5vZGUoY29tcGxleFBvcy54LCBjb21wbGV4UG9zLnksIHtjbGFzczogXCJjb21wbGV4XCIsIGxhbmd1YWdlOiBcIlBEXCJ9KTtcbiAgICAgIGNvbXBsZXguZGF0YShcImxhYmVsXCIsIGNvbXBsZXhMYWJlbCk7XG4gICAgICBjb21wbGV4LmRhdGEoXCJqdXN0QWRkZWRcIiwgdHJ1ZSk7XG5cbiAgICAgIGNvbnN0IHNvdXJjZSA9IHJldmVyc2UgPyBjb21wbGV4LmlkKCkgOiBwcm9jZXNzTm9kZS5pZCgpO1xuICAgICAgY29uc3QgdGFyZ2V0ID0gcmV2ZXJzZSA/IHByb2Nlc3NOb2RlLmlkKCkgOiBjb21wbGV4LmlkKCk7XG4gICAgICBjb25zdCBlZGdlQ2xhc3MgPSByZXZlcnNlID8gXCJjb25zdW1wdGlvblwiIDogXCJwcm9kdWN0aW9uXCI7XG4gICAgICBjb25zdCBjb21wbGV4RWRnZSA9IGVsZW1lbnRVdGlsaXRpZXMuYWRkRWRnZShzb3VyY2UsIHRhcmdldCwge2NsYXNzOiBlZGdlQ2xhc3MsIGxhbmd1YWdlOiBcIlBEXCJ9KTtcbiAgICAgIGNvbXBsZXhFZGdlLmRhdGEoXCJqdXN0QWRkZWRcIiwgdHJ1ZSk7XG5cbiAgICAgIFxuICAgICAgaWYgKG9yaWVudGF0aW9uID09PSBcInZlcnRpY2FsXCIpIHtcbiAgICAgICAgeFBvc09mUHJvdGVpbiA9IGNvbXBsZXgucG9zaXRpb24oXCJ4XCIpIC0gaG9yaXpvbnRhbE9mZnNldFg7XG4gICAgICAgIHlQb3NPZlByb3RlaW4gPSBjb21wbGV4LnBvc2l0aW9uKFwieVwiKTsgICBcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICB4UG9zT2ZQcm90ZWluID0gY29tcGxleC5wb3NpdGlvbihcInhcIik7XG4gICAgICAgIHlQb3NPZlByb3RlaW4gPSBjb21wbGV4LnBvc2l0aW9uKFwieVwiKSAtIG9mZnNldFk7XG4gICAgICB9XG5cbiAgICAgIHByb3RlaW5MYWJlbHMuZm9yRWFjaChmdW5jdGlvbihsYWJlbCkge1xuXG4gICAgICAgIGxldCBub2RlUG9zaXRpb24gPSB7XG4gICAgICAgICAgeDogeFBvc09mUHJvdGVpbixcbiAgICAgICAgICB5OiB5UG9zT2ZQcm90ZWluXG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIGNvbnN0IG5vZGUgPSBlbGVtZW50VXRpbGl0aWVzLmFkZE5vZGUobm9kZVBvc2l0aW9uLngsIG5vZGVQb3NpdGlvbi55LCB7Y2xhc3M6IFwibWFjcm9tb2xlY3VsZVwiLCBsYW5ndWFnZTogXCJQRFwifSwgdW5kZWZpbmVkLCBjb21wbGV4LmlkKCkpO1xuICAgICAgICBub2RlLmRhdGEoXCJsYWJlbFwiLCBsYWJlbCk7XG4gICAgICAgIG5vZGUuZGF0YShcImp1c3RBZGRlZFwiLCB0cnVlKTtcbiAgICAgICAgXG4gICAgICAgIGlmIChvcmllbnRhdGlvbiA9PT0gXCJ2ZXJ0aWNhbFwiKSB7XG4gICAgICAgICAgeFBvc09mUHJvdGVpbiArPSBzdGVwT2Zmc2V0O1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIHlQb3NPZlByb3RlaW4gKz0gc3RlcE9mZnNldDtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIGlmIChoYXNSZWd1bGF0b3IpIHtcbiAgICAgICAgY29uc3QgcmVndWxhdG9yTmFtZSA9IHJlZ3VsYXRvci5uYW1lO1xuICAgICAgICBjb25zdCByZWd1bGF0b3JUeXBlID0gcmVndWxhdG9yLnR5cGU7XG4gICAgICAgIGNvbnN0IHJlZ3VsYXRvckVkZ2VUeXBlID0gcmVndWxhdG9yLmVkZ2VUeXBlO1xuICAgICAgICBjb25zdCByZWd1bGF0b3JNdWx0aW1lciA9IHJlZ3VsYXRvci5tdWx0aW1lcjtcblxuICAgICAgICBsZXQgeFBvc09mUmVndWxhdG9yID0gcHJvY2Vzc1Bvc2l0aW9uLng7XG4gICAgICAgIGlmIChyZWd1bGF0b3JNdWx0aW1lci5lbmFibGVkICYmIG9yaWVudGF0aW9uID09PSBcImhvcml6b250YWxcIikge1xuICAgICAgICAgIHhQb3NPZlJlZ3VsYXRvciAtPSBtdWx0aW1lck9mZnNldDtcbiAgICAgICAgfVxuICAgICAgICBsZXQgeVBvc09mUmVndWxhdG9yID0gcHJvY2Vzc1Bvc2l0aW9uLnkgLSAoKHByb2Nlc3NIZWlnaHQgLyAyKSArIChyZWd1bGF0b3JIZWlnaHQgLyAyKSArIGVkZ2VMZW5ndGgpOyBcblxuICAgICAgICBub2RlUG9zaXRpb24gPSB7XG4gICAgICAgICAgeDogeFBvc09mUmVndWxhdG9yLFxuICAgICAgICAgIHk6IHlQb3NPZlJlZ3VsYXRvclxuICAgICAgICB9XG4gICAgICAgIGlmIChvcmllbnRhdGlvbiA9PT0gXCJ2ZXJ0aWNhbFwiKSB7XG4gICAgICAgICAgbm9kZVBvc2l0aW9uID0gZWxlbWVudFV0aWxpdGllcy5yb3RhdGU5MChub2RlUG9zaXRpb24sIHByb2Nlc3NQb3NpdGlvbik7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgcmVndWxhdG9yTm9kZSA9IGVsZW1lbnRVdGlsaXRpZXMuYWRkTm9kZShub2RlUG9zaXRpb24ueCwgbm9kZVBvc2l0aW9uLnksIHtjbGFzczogcmVndWxhdG9yVHlwZSwgbGFuZ3VhZ2U6ICdQRCd9KTtcbiAgICAgICAgcmVndWxhdG9yTm9kZS5kYXRhKCdqdXN0QWRkZWQnLCB0cnVlKTtcbiAgICAgICAgcmVndWxhdG9yTm9kZS5kYXRhKCdsYWJlbCcsIHJlZ3VsYXRvck5hbWUpO1xuXG4gICAgICAgIGlmIChyZWd1bGF0b3JNdWx0aW1lci5lbmFibGVkKSB7XG4gICAgICAgICAgZWxlbWVudFV0aWxpdGllcy5zZXRNdWx0aW1lclN0YXR1cyhyZWd1bGF0b3JOb2RlLCB0cnVlKTtcblxuICAgICAgICAgIGNvbnN0IGNhcmRpbmFsaXR5ID0gcmVndWxhdG9yTXVsdGltZXIuY2FyZGluYWxpdHk7XG4gICAgICAgICAgaWYgKGNhcmRpbmFsaXR5ICE9ICcnKSB7XG4gICAgICAgICAgICBjb25zdCBpbmZvYm94TGFiZWwgPSBcIk46XCIgKyBjYXJkaW5hbGl0eTtcbiAgICAgICAgICAgIGluZm9ib3hPYmplY3QgPSB7XG4gICAgICAgICAgICAgIGNsYXp6OiBcInVuaXQgb2YgaW5mb3JtYXRpb25cIixcbiAgICAgICAgICAgICAgbGFiZWw6IHtcbiAgICAgICAgICAgICAgICB0ZXh0OiBpbmZvYm94TGFiZWxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgYmJveDoge1xuICAgICAgICAgICAgICAgIHc6IGluZm9ib3hMYWJlbC5sZW5ndGggKiB3aWR0aFBlckNoYXIsXG4gICAgICAgICAgICAgICAgaDogbWluSW5mb2JveERpbWVuc2lvblxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgZWxlbWVudFV0aWxpdGllcy5hZGRTdGF0ZU9ySW5mb0JveChyZWd1bGF0b3JOb2RlLCBpbmZvYm94T2JqZWN0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgcmVndWxhdG9yRWRnZSA9IGVsZW1lbnRVdGlsaXRpZXMuYWRkRWRnZShyZWd1bGF0b3JOb2RlLmlkKCksIHByb2Nlc3NOb2RlLmlkKCksIHtjbGFzczogcmVndWxhdG9yRWRnZVR5cGUsIGxhbmd1YWdlOiAnUEQnfSk7XG4gICAgICAgIHJlZ3VsYXRvckVkZ2UuZGF0YSgnanVzdEFkZGVkJywgdHJ1ZSk7XG4gICAgICB9XG5cbiAgICAgIGN5LmVuZEJhdGNoKCk7XG5cbiAgICAgIGNvbnN0IGVsZXMgPSBjeS5lbGVtZW50cygnW2p1c3RBZGRlZF0nKTtcbiAgICAgIGVsZXMucmVtb3ZlRGF0YSgnanVzdEFkZGVkJyk7XG5cbiAgICAgIGN5LmVsZW1lbnRzKCkudW5zZWxlY3QoKTtcbiAgICAgIGVsZXMuc2VsZWN0KCk7XG5cbiAgICAgIHJldHVybiBlbGVzO1xuXG4gICAgfVxuXG4gICAgZWxlbWVudFV0aWxpdGllcy5jcmVhdGVNdWx0aW1lcml6YXRpb24gPSBmdW5jdGlvbiAobWFjcm9tb2xlY3VsZSwgcmVndWxhdG9yLCByZWd1bGF0b3JNdWx0aW1lciwgb3JpZW50YXRpb24pIHtcbiAgICAgIGNvbnN0IGhhc1JlZ3VsYXRvciA9IHJlZ3VsYXRvci5uYW1lICE9PSB1bmRlZmluZWQ7XG4gICAgICBjb25zdCBtYWNyb21vbGVjdWxlTmFtZSA9IG1hY3JvbW9sZWN1bGUubmFtZTtcbiAgICAgIGNvbnN0IG1hY3JvbW9sZWN1bGVNdWx0aW1lckNhcmRpbmFsaXR5ID0gbWFjcm9tb2xlY3VsZS5jYXJkaW5hbGl0eTtcbiAgICAgIGNvbnN0IGRlZmF1bHRNYWNyb21vbGVjdWxlUHJvcGVydGllcyA9IGVsZW1lbnRVdGlsaXRpZXMuZ2V0RGVmYXVsdFByb3BlcnRpZXMoXCJtYWNyb21vbGVjdWxlXCIpO1xuICAgICAgY29uc3QgZGVmYXVsdFJlZ3VsYXRvclByb3BlcnRpZXMgPSBoYXNSZWd1bGF0b3IgPyBlbGVtZW50VXRpbGl0aWVzLmdldERlZmF1bHRQcm9wZXJ0aWVzKHJlZ3VsYXRvci50eXBlKSA6IHt9O1xuICAgICAgY29uc3QgZGVmYXVsdFByb2Nlc3NQcm9wZXJ0aWVzID0gZWxlbWVudFV0aWxpdGllcy5nZXREZWZhdWx0UHJvcGVydGllcyhcImNhdGFseXRpY1wiKTtcbiAgICAgIGNvbnN0IHByb2Nlc3NXaWR0aCA9IGRlZmF1bHRQcm9jZXNzUHJvcGVydGllcy53aWR0aCB8fCA1MDtcbiAgICAgIGNvbnN0IG1hY3JvbW9sZWN1bGVXaWR0aCA9IGRlZmF1bHRNYWNyb21vbGVjdWxlUHJvcGVydGllcy53aWR0aCB8fCA1MDtcbiAgICAgIGNvbnN0IG1hY3JvbW9sZWN1bGVIZWlnaHQgPSBkZWZhdWx0TWFjcm9tb2xlY3VsZVByb3BlcnRpZXMuaGVpZ2h0IHx8IDUwOyBcbiAgICAgIGNvbnN0IHByb2Nlc3NIZWlnaHQgPSBkZWZhdWx0UHJvY2Vzc1Byb3BlcnRpZXMuaGVpZ2h0IHx8IDUwO1xuICAgICAgY29uc3QgcmVndWxhdG9ySGVpZ2h0ID0gZGVmYXVsdFJlZ3VsYXRvclByb3BlcnRpZXMuaGVpZ2h0IHx8IDUwO1xuICAgICAgY29uc3QgcHJvY2Vzc1Bvc2l0aW9uID0gZWxlbWVudFV0aWxpdGllcy5jb252ZXJ0VG9Nb2RlbFBvc2l0aW9uKHt4OiBjeS53aWR0aCgpIC8gMiwgeTogY3kuaGVpZ2h0KCkgLyAyfSk7XG4gICAgICBjb25zdCBlZGdlTGVuZ3RoID0gMzA7XG4gICAgICBjb25zdCBwcm9jZXNzUG9ydHNPcmRlcmluZyA9IG9yaWVudGF0aW9uID09PSBcInZlcnRpY2FsXCIgPyBcIlQtdG8tQlwiIDogXCJMLXRvLVJcIjtcbiAgICAgIGNvbnN0IG1pbkluZm9ib3hEaW1lbnNpb24gPSAyMDtcbiAgICAgIGNvbnN0IHdpZHRoUGVyQ2hhciA9IDY7XG4gICAgICBjb25zdCBtdWx0aW1lck9mZnNldCA9IDY7XG5cbiAgICAgIGN5LnN0YXJ0QmF0Y2goKTtcblxuICAgICAgaWYgKCFlbGVtZW50VXRpbGl0aWVzLmdldE1hcFR5cGUoKSkge1xuICAgICAgICBlbGVtZW50VXRpbGl0aWVzLnNldE1hcFR5cGUoXCJQRFwiKTtcbiAgICAgIH1cblxuICAgICAgbGV0IHhQb3NPZklucHV0ID0gcHJvY2Vzc1Bvc2l0aW9uLnggLSBlZGdlTGVuZ3RoIC0gcHJvY2Vzc1dpZHRoIC8gMiAtIG1hY3JvbW9sZWN1bGVXaWR0aCAvIDI7XG4gICAgICBsZXQgeFBvc09mT3V0cHV0ID0gcHJvY2Vzc1Bvc2l0aW9uLnggKyBlZGdlTGVuZ3RoICsgcHJvY2Vzc1dpZHRoIC8gMiArIG1hY3JvbW9sZWN1bGVXaWR0aCAvIDI7XG4gICAgICBsZXQgeVBvc09mSW5wdXQgPSBwcm9jZXNzUG9zaXRpb24ueTtcbiAgICAgIGxldCB5UG9zT2ZPdXRwdXQgPSBwcm9jZXNzUG9zaXRpb24ueTtcblxuICAgICAgbGV0IHByb2Nlc3NOb2RlID0gZWxlbWVudFV0aWxpdGllcy5hZGROb2RlKHByb2Nlc3NQb3NpdGlvbi54LCBwcm9jZXNzUG9zaXRpb24ueSwge2NsYXNzOiBcInByb2Nlc3NcIiwgbGFuZ3VhZ2U6IFwiUERcIn0pO1xuICAgICAgZWxlbWVudFV0aWxpdGllcy5zZXRQb3J0c09yZGVyaW5nKHByb2Nlc3NOb2RlLCBwcm9jZXNzUG9ydHNPcmRlcmluZyk7XG4gICAgICBwcm9jZXNzTm9kZS5kYXRhKCdqdXN0QWRkZWQnLCB0cnVlKTtcblxuICAgICAgbGV0IG5vZGVQb3NpdGlvbiA9IHtcbiAgICAgICAgeDogeFBvc09mSW5wdXQsXG4gICAgICAgIHk6IHlQb3NPZklucHV0XG4gICAgICB9XG4gICAgICBpZiAob3JpZW50YXRpb24gPT09IFwidmVydGljYWxcIikge1xuICAgICAgICBub2RlUG9zaXRpb24gPSBlbGVtZW50VXRpbGl0aWVzLnJvdGF0ZTkwKG5vZGVQb3NpdGlvbiwgcHJvY2Vzc1Bvc2l0aW9uKTtcbiAgICAgIH1cblxuICAgICAgbGV0IGlucHV0Tm9kZSA9IGVsZW1lbnRVdGlsaXRpZXMuYWRkTm9kZShub2RlUG9zaXRpb24ueCwgbm9kZVBvc2l0aW9uLnksIHtjbGFzczogJ21hY3JvbW9sZWN1bGUnLCBsYW5ndWFnZTogJ1BEJ30pO1xuICAgICAgaW5wdXROb2RlLmRhdGEoXCJqdXN0QWRkZWRcIiwgdHJ1ZSk7XG4gICAgICBpbnB1dE5vZGUuZGF0YShcImxhYmVsXCIsIG1hY3JvbW9sZWN1bGVOYW1lKTtcblxuICAgICAgbGV0IGlucHV0RWRnZSA9IGVsZW1lbnRVdGlsaXRpZXMuYWRkRWRnZShpbnB1dE5vZGUuaWQoKSwgcHJvY2Vzc05vZGUuaWQoKSwge2NsYXNzOiAnY29uc3VtcHRpb24nLCBsYW5ndWFnZTogJ1BEJ30pXG4gICAgICBpbnB1dEVkZ2UuZGF0YShcImp1c3RBZGRlZFwiLCB0cnVlKTtcblxuICAgICAgbGV0IGNhcmRpbmFsaXR5ID0gbWFjcm9tb2xlY3VsZU11bHRpbWVyQ2FyZGluYWxpdHk7XG4gICAgICBpZiAoY2FyZGluYWxpdHkgIT09ICcnKSB7XG4gICAgICAgIGlucHV0RWRnZS5kYXRhKFwiY2FyZGluYWxpdHlcIiwgY2FyZGluYWxpdHkpO1xuICAgICAgfVxuXG4gICAgICBub2RlUG9zaXRpb24gPSB7XG4gICAgICAgIHg6IHhQb3NPZk91dHB1dCxcbiAgICAgICAgeTogeVBvc09mT3V0cHV0XG4gICAgICB9XG5cbiAgICAgIGlmIChvcmllbnRhdGlvbiA9PT0gXCJ2ZXJ0aWNhbFwiKSB7XG4gICAgICAgIG5vZGVQb3NpdGlvbiA9IGVsZW1lbnRVdGlsaXRpZXMucm90YXRlOTAobm9kZVBvc2l0aW9uLCBwcm9jZXNzUG9zaXRpb24pO1xuICAgICAgfVxuXG4gICAgICBsZXQgb3V0cHV0Tm9kZSA9IGVsZW1lbnRVdGlsaXRpZXMuYWRkTm9kZShub2RlUG9zaXRpb24ueCwgbm9kZVBvc2l0aW9uLnksIHtjbGFzczogJ21hY3JvbW9sZWN1bGUnLCBsYW5ndWFnZTogJ1BEJ30pO1xuICAgICAgb3V0cHV0Tm9kZS5kYXRhKFwianVzdEFkZGVkXCIsIHRydWUpO1xuICAgICAgb3V0cHV0Tm9kZS5kYXRhKFwibGFiZWxcIiwgbWFjcm9tb2xlY3VsZU5hbWUpO1xuICAgICAgZWxlbWVudFV0aWxpdGllcy5zZXRNdWx0aW1lclN0YXR1cyhvdXRwdXROb2RlLCB0cnVlKTtcblxuICAgICAgaWYgKGNhcmRpbmFsaXR5ICE9PSAnJykge1xuICAgICAgICBjb25zdCBpbmZvYm94TGFiZWwgPSBcIk46XCIgKyBjYXJkaW5hbGl0eTtcbiAgICAgICAgaW5mb2JveE9iamVjdCA9IHtcbiAgICAgICAgICBjbGF6ejogXCJ1bml0IG9mIGluZm9ybWF0aW9uXCIsXG4gICAgICAgICAgbGFiZWw6IHtcbiAgICAgICAgICAgIHRleHQ6IGluZm9ib3hMYWJlbFxuICAgICAgICAgIH0sXG4gICAgICAgICAgYmJveDoge1xuICAgICAgICAgICAgdzogaW5mb2JveExhYmVsLmxlbmd0aCAqIHdpZHRoUGVyQ2hhcixcbiAgICAgICAgICAgIGg6IG1pbkluZm9ib3hEaW1lbnNpb25cbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIGVsZW1lbnRVdGlsaXRpZXMuYWRkU3RhdGVPckluZm9Cb3gob3V0cHV0Tm9kZSwgaW5mb2JveE9iamVjdCk7XG4gICAgICB9XG5cbiAgICAgIGxldCBvdXRwdXRFZGdlID0gZWxlbWVudFV0aWxpdGllcy5hZGRFZGdlKHByb2Nlc3NOb2RlLmlkKCksIG91dHB1dE5vZGUuaWQoKSwge2NsYXNzOiAncHJvZHVjdGlvbicsIGxhbmd1YWdlOiAnUEQnfSlcbiAgICAgIG91dHB1dEVkZ2UuZGF0YShcImp1c3RBZGRlZFwiLCB0cnVlKTtcblxuICAgICAgaWYgKGhhc1JlZ3VsYXRvcikge1xuICAgICAgICBjb25zdCByZWd1bGF0b3JOYW1lID0gcmVndWxhdG9yLm5hbWU7XG4gICAgICAgIGNvbnN0IHJlZ3VsYXRvclR5cGUgPSByZWd1bGF0b3IudHlwZTtcbiAgICAgICAgY29uc3QgcmVndWxhdG9yRWRnZVR5cGUgPSByZWd1bGF0b3IuZWRnZVR5cGU7XG5cbiAgICAgICAgbGV0IHhQb3NPZlJlZ3VsYXRvciA9IHByb2Nlc3NQb3NpdGlvbi54O1xuICAgICAgICBpZiAocmVndWxhdG9yTXVsdGltZXIuZW5hYmxlZCAmJiBvcmllbnRhdGlvbiA9PT0gXCJob3Jpem9udGFsXCIpIHtcbiAgICAgICAgICB4UG9zT2ZSZWd1bGF0b3IgLT0gbXVsdGltZXJPZmZzZXQ7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHlQb3NPZlJlZ3VsYXRvciA9IHByb2Nlc3NQb3NpdGlvbi55IC0gKChwcm9jZXNzSGVpZ2h0IC8gMikgKyAocmVndWxhdG9ySGVpZ2h0IC8gMikgKyBlZGdlTGVuZ3RoKTsgXG5cbiAgICAgICAgbm9kZVBvc2l0aW9uID0ge1xuICAgICAgICAgIHg6IHhQb3NPZlJlZ3VsYXRvcixcbiAgICAgICAgICB5OiB5UG9zT2ZSZWd1bGF0b3JcbiAgICAgICAgfVxuICAgICAgICBpZiAob3JpZW50YXRpb24gPT09IFwidmVydGljYWxcIikge1xuICAgICAgICAgIG5vZGVQb3NpdGlvbiA9IGVsZW1lbnRVdGlsaXRpZXMucm90YXRlOTAobm9kZVBvc2l0aW9uLCBwcm9jZXNzUG9zaXRpb24pO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHJlZ3VsYXRvck5vZGUgPSBlbGVtZW50VXRpbGl0aWVzLmFkZE5vZGUobm9kZVBvc2l0aW9uLngsIG5vZGVQb3NpdGlvbi55LCB7Y2xhc3M6IHJlZ3VsYXRvclR5cGUsIGxhbmd1YWdlOiAnUEQnfSk7XG4gICAgICAgIHJlZ3VsYXRvck5vZGUuZGF0YSgnanVzdEFkZGVkJywgdHJ1ZSk7XG4gICAgICAgIHJlZ3VsYXRvck5vZGUuZGF0YSgnbGFiZWwnLCByZWd1bGF0b3JOYW1lKTtcblxuICAgICAgICBpZiAocmVndWxhdG9yTXVsdGltZXIuZW5hYmxlZCkge1xuICAgICAgICAgIGVsZW1lbnRVdGlsaXRpZXMuc2V0TXVsdGltZXJTdGF0dXMocmVndWxhdG9yTm9kZSwgdHJ1ZSk7XG5cbiAgICAgICAgICBjb25zdCBjYXJkaW5hbGl0eSA9IHJlZ3VsYXRvck11bHRpbWVyLmNhcmRpbmFsaXR5O1xuICAgICAgICAgIGlmIChjYXJkaW5hbGl0eSAhPSAnJykge1xuICAgICAgICAgICAgY29uc3QgaW5mb2JveExhYmVsID0gXCJOOlwiICsgY2FyZGluYWxpdHk7XG4gICAgICAgICAgICBpbmZvYm94T2JqZWN0ID0ge1xuICAgICAgICAgICAgICBjbGF6ejogXCJ1bml0IG9mIGluZm9ybWF0aW9uXCIsXG4gICAgICAgICAgICAgIGxhYmVsOiB7XG4gICAgICAgICAgICAgICAgdGV4dDogaW5mb2JveExhYmVsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIGJib3g6IHtcbiAgICAgICAgICAgICAgICB3OiBpbmZvYm94TGFiZWwubGVuZ3RoICogd2lkdGhQZXJDaGFyLFxuICAgICAgICAgICAgICAgIGg6IG1pbkluZm9ib3hEaW1lbnNpb25cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGVsZW1lbnRVdGlsaXRpZXMuYWRkU3RhdGVPckluZm9Cb3gocmVndWxhdG9yTm9kZSwgaW5mb2JveE9iamVjdCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHJlZ3VsYXRvckVkZ2UgPSBlbGVtZW50VXRpbGl0aWVzLmFkZEVkZ2UocmVndWxhdG9yTm9kZS5pZCgpLCBwcm9jZXNzTm9kZS5pZCgpLCB7Y2xhc3M6IHJlZ3VsYXRvckVkZ2VUeXBlLCBsYW5ndWFnZTogJ1BEJ30pO1xuICAgICAgICByZWd1bGF0b3JFZGdlLmRhdGEoJ2p1c3RBZGRlZCcsIHRydWUpO1xuICAgICAgfVxuXG4gICAgICBjeS5lbmRCYXRjaCgpO1xuXG4gICAgICBjb25zdCBlbGVzID0gY3kuZWxlbWVudHMoJ1tqdXN0QWRkZWRdJyk7XG4gICAgICBlbGVzLnJlbW92ZURhdGEoJ2p1c3RBZGRlZCcpO1xuXG4gICAgICBjeS5lbGVtZW50cygpLnVuc2VsZWN0KCk7XG4gICAgICBlbGVzLnNlbGVjdCgpO1xuXG4gICAgICByZXR1cm4gZWxlcztcbiAgICB9O1xuXG4gICAgZWxlbWVudFV0aWxpdGllcy5jcmVhdGVDb252ZXJzaW9uID0gZnVuY3Rpb24gKG1hY3JvbW9sZWN1bGUsIHJlZ3VsYXRvciwgcmVndWxhdG9yTXVsdGltZXIsIG9yaWVudGF0aW9uLCBpbnB1dEluZm9ib3hMYWJlbHMsIG91dHB1dEluZm9ib3hMYWJlbHMpIHtcbiAgICAgIGNvbnN0IGhhc1JlZ3VsYXRvciA9IHJlZ3VsYXRvci5uYW1lICE9PSB1bmRlZmluZWQ7XG4gICAgICBjb25zdCBtYWNyb21vbGVjdWxlTmFtZSA9IG1hY3JvbW9sZWN1bGUubmFtZTtcbiAgICAgIGNvbnN0IG1hY3JvbW9sZWN1bGVJc011bHRpbWVyID0gbWFjcm9tb2xlY3VsZS5tdWx0aW1lci5lbmFibGVkO1xuICAgICAgY29uc3QgbWFjcm9tb2xlY3VsZU11bHRpbWVyQ2FyZGluYWxpdHkgPSBtYWNyb21vbGVjdWxlLm11bHRpbWVyLmNhcmRpbmFsaXR5O1xuICAgICAgY29uc3QgZGVmYXVsdE1hY3JvbW9sZWN1bGVQcm9wZXJ0aWVzID0gZWxlbWVudFV0aWxpdGllcy5nZXREZWZhdWx0UHJvcGVydGllcyhcIm1hY3JvbW9sZWN1bGVcIik7XG4gICAgICBjb25zdCBkZWZhdWx0UmVndWxhdG9yUHJvcGVydGllcyA9IGhhc1JlZ3VsYXRvciA/IGVsZW1lbnRVdGlsaXRpZXMuZ2V0RGVmYXVsdFByb3BlcnRpZXMocmVndWxhdG9yLnR5cGUpIDoge307XG4gICAgICBjb25zdCBkZWZhdWx0UHJvY2Vzc1Byb3BlcnRpZXMgPSBlbGVtZW50VXRpbGl0aWVzLmdldERlZmF1bHRQcm9wZXJ0aWVzKFwiY2F0YWx5dGljXCIpO1xuICAgICAgY29uc3QgcHJvY2Vzc1dpZHRoID0gZGVmYXVsdFByb2Nlc3NQcm9wZXJ0aWVzLndpZHRoIHx8IDUwO1xuICAgICAgY29uc3QgbWFjcm9tb2xlY3VsZVdpZHRoID0gZGVmYXVsdE1hY3JvbW9sZWN1bGVQcm9wZXJ0aWVzLndpZHRoIHx8IDUwO1xuICAgICAgY29uc3QgbWFjcm9tb2xlY3VsZUhlaWdodCA9IGRlZmF1bHRNYWNyb21vbGVjdWxlUHJvcGVydGllcy5oZWlnaHQgfHwgNTA7IFxuICAgICAgY29uc3QgcHJvY2Vzc0hlaWdodCA9IGRlZmF1bHRQcm9jZXNzUHJvcGVydGllcy5oZWlnaHQgfHwgNTA7XG4gICAgICBjb25zdCByZWd1bGF0b3JIZWlnaHQgPSBkZWZhdWx0UmVndWxhdG9yUHJvcGVydGllcy5oZWlnaHQgfHwgNTA7XG4gICAgICBjb25zdCBwcm9jZXNzUG9zaXRpb24gPSBlbGVtZW50VXRpbGl0aWVzLmNvbnZlcnRUb01vZGVsUG9zaXRpb24oe3g6IGN5LndpZHRoKCkgLyAyLCB5OiBjeS5oZWlnaHQoKSAvIDJ9KTtcbiAgICAgIGNvbnN0IGVkZ2VMZW5ndGggPSAzMDtcbiAgICAgIGNvbnN0IHByb2Nlc3NQb3J0c09yZGVyaW5nID0gb3JpZW50YXRpb24gPT09IFwidmVydGljYWxcIiA/IFwiVC10by1CXCIgOiBcIkwtdG8tUlwiO1xuICAgICAgY29uc3QgbWluSW5mb2JveERpbWVuc2lvbiA9IDIwO1xuICAgICAgY29uc3Qgd2lkdGhQZXJDaGFyID0gNjtcbiAgICAgIGNvbnN0IG11bHRpbWVyT2Zmc2V0ID0gNjtcblxuICAgICAgY3kuc3RhcnRCYXRjaCgpO1xuXG4gICAgICBpZiAoIWVsZW1lbnRVdGlsaXRpZXMuZ2V0TWFwVHlwZSgpKSB7XG4gICAgICAgIGVsZW1lbnRVdGlsaXRpZXMuc2V0TWFwVHlwZShcIlBEXCIpO1xuICAgICAgfVxuXG4gICAgICBsZXQgeFBvc09mSW5wdXQgPSBwcm9jZXNzUG9zaXRpb24ueCAtIGVkZ2VMZW5ndGggLSBwcm9jZXNzV2lkdGggLyAyIC0gbWFjcm9tb2xlY3VsZVdpZHRoIC8gMjtcbiAgICAgIGxldCB4UG9zT2ZPdXRwdXQgPSBwcm9jZXNzUG9zaXRpb24ueCArIGVkZ2VMZW5ndGggKyBwcm9jZXNzV2lkdGggLyAyICsgbWFjcm9tb2xlY3VsZVdpZHRoIC8gMjtcbiAgICAgIGxldCB5UG9zT2ZJbnB1dCA9IHByb2Nlc3NQb3NpdGlvbi55O1xuICAgICAgbGV0IHlQb3NPZk91dHB1dCA9IHByb2Nlc3NQb3NpdGlvbi55O1xuXG4gICAgICBsZXQgcHJvY2Vzc05vZGUgPSBlbGVtZW50VXRpbGl0aWVzLmFkZE5vZGUocHJvY2Vzc1Bvc2l0aW9uLngsIHByb2Nlc3NQb3NpdGlvbi55LCB7Y2xhc3M6IFwicHJvY2Vzc1wiLCBsYW5ndWFnZTogXCJQRFwifSk7XG4gICAgICBlbGVtZW50VXRpbGl0aWVzLnNldFBvcnRzT3JkZXJpbmcocHJvY2Vzc05vZGUsIHByb2Nlc3NQb3J0c09yZGVyaW5nKTtcbiAgICAgIHByb2Nlc3NOb2RlLmRhdGEoJ2p1c3RBZGRlZCcsIHRydWUpO1xuXG4gICAgICBsZXQgbm9kZVBvc2l0aW9uID0ge1xuICAgICAgICB4OiB4UG9zT2ZJbnB1dCxcbiAgICAgICAgeTogeVBvc09mSW5wdXRcbiAgICAgIH1cbiAgICAgIGlmIChvcmllbnRhdGlvbiA9PT0gXCJ2ZXJ0aWNhbFwiKSB7XG4gICAgICAgIG5vZGVQb3NpdGlvbiA9IGVsZW1lbnRVdGlsaXRpZXMucm90YXRlOTAobm9kZVBvc2l0aW9uLCBwcm9jZXNzUG9zaXRpb24pO1xuICAgICAgfVxuXG4gICAgICBsZXQgaW5wdXROb2RlID0gZWxlbWVudFV0aWxpdGllcy5hZGROb2RlKG5vZGVQb3NpdGlvbi54LCBub2RlUG9zaXRpb24ueSwge2NsYXNzOiAnbWFjcm9tb2xlY3VsZScsIGxhbmd1YWdlOiAnUEQnfSk7XG4gICAgICBpbnB1dE5vZGUuZGF0YShcImp1c3RBZGRlZFwiLCB0cnVlKTtcbiAgICAgIGlucHV0Tm9kZS5kYXRhKFwibGFiZWxcIiwgbWFjcm9tb2xlY3VsZU5hbWUpO1xuICAgICAgaWYgKG1hY3JvbW9sZWN1bGVJc011bHRpbWVyKSB7XG4gICAgICAgIFxuICAgICAgICBlbGVtZW50VXRpbGl0aWVzLnNldE11bHRpbWVyU3RhdHVzKGlucHV0Tm9kZSwgdHJ1ZSk7XG5cbiAgICAgICAgY29uc3QgY2FyZGluYWxpdHkgPSBtYWNyb21vbGVjdWxlTXVsdGltZXJDYXJkaW5hbGl0eTtcbiAgICAgICAgaWYgKGNhcmRpbmFsaXR5ICE9ICcnKSB7XG4gICAgICAgICAgY29uc3QgaW5mb2JveExhYmVsID0gXCJOOlwiICsgY2FyZGluYWxpdHk7XG4gICAgICAgICAgaW5mb2JveE9iamVjdCA9IHtcbiAgICAgICAgICAgIGNsYXp6OiBcInVuaXQgb2YgaW5mb3JtYXRpb25cIixcbiAgICAgICAgICAgIGxhYmVsOiB7XG4gICAgICAgICAgICAgIHRleHQ6IGluZm9ib3hMYWJlbFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGJib3g6IHtcbiAgICAgICAgICAgICAgdzogaW5mb2JveExhYmVsLmxlbmd0aCAqIHdpZHRoUGVyQ2hhcixcbiAgICAgICAgICAgICAgaDogbWluSW5mb2JveERpbWVuc2lvblxuICAgICAgICAgICAgfVxuICAgICAgICAgIH07XG4gICAgICAgICAgZWxlbWVudFV0aWxpdGllcy5hZGRTdGF0ZU9ySW5mb0JveChpbnB1dE5vZGUsIGluZm9ib3hPYmplY3QpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlucHV0SW5mb2JveExhYmVscy5mb3JFYWNoKGZ1bmN0aW9uKGxhYmVsKSB7XG4gICAgICAgIGNvbnN0IGlucHV0SW5mb2JveFdpZHRoID0gbGFiZWwubGVuZ3RoID4gMCA/IFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYXRoLm1heCh3aWR0aFBlckNoYXIgKiBsYWJlbC5sZW5ndGgsIG1pbkluZm9ib3hEaW1lbnNpb24pIDogXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbkluZm9ib3hEaW1lbnNpb247IFxuICAgICAgICBsZXQgaW5mb2JveE9iamVjdCA9IHtcbiAgICAgICAgICBjbGF6ejogXCJ1bml0IG9mIGluZm9ybWF0aW9uXCIsXG4gICAgICAgICAgbGFiZWw6IHtcbiAgICAgICAgICAgIHRleHQ6IGxhYmVsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBiYm94OiB7XG4gICAgICAgICAgICB3OiBpbnB1dEluZm9ib3hXaWR0aCxcbiAgICAgICAgICAgIGg6IG1pbkluZm9ib3hEaW1lbnNpb25cbiAgICAgICAgICB9LFxuICAgICAgICAgIHN0eWxlOiB7XG4gICAgICAgICAgICBcInNoYXBlLW5hbWVcIjogXCJlbGxpcHNlXCJcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIGVsZW1lbnRVdGlsaXRpZXMuYWRkU3RhdGVPckluZm9Cb3goaW5wdXROb2RlLCBpbmZvYm94T2JqZWN0KTtcbiAgICAgIH0pO1xuXG4gICAgICBsZXQgaW5wdXRFZGdlID0gZWxlbWVudFV0aWxpdGllcy5hZGRFZGdlKGlucHV0Tm9kZS5pZCgpLCBwcm9jZXNzTm9kZS5pZCgpLCB7Y2xhc3M6ICdjb25zdW1wdGlvbicsIGxhbmd1YWdlOiAnUEQnfSlcbiAgICAgIGlucHV0RWRnZS5kYXRhKFwianVzdEFkZGVkXCIsIHRydWUpO1xuXG4gICAgICBub2RlUG9zaXRpb24gPSB7XG4gICAgICAgIHg6IHhQb3NPZk91dHB1dCxcbiAgICAgICAgeTogeVBvc09mT3V0cHV0XG4gICAgICB9XG5cbiAgICAgIGlmIChvcmllbnRhdGlvbiA9PT0gXCJ2ZXJ0aWNhbFwiKSB7XG4gICAgICAgIG5vZGVQb3NpdGlvbiA9IGVsZW1lbnRVdGlsaXRpZXMucm90YXRlOTAobm9kZVBvc2l0aW9uLCBwcm9jZXNzUG9zaXRpb24pO1xuICAgICAgfVxuXG4gICAgICBsZXQgb3V0cHV0Tm9kZSA9IGVsZW1lbnRVdGlsaXRpZXMuYWRkTm9kZShub2RlUG9zaXRpb24ueCwgbm9kZVBvc2l0aW9uLnksIHtjbGFzczogJ21hY3JvbW9sZWN1bGUnLCBsYW5ndWFnZTogJ1BEJ30pO1xuICAgICAgb3V0cHV0Tm9kZS5kYXRhKFwianVzdEFkZGVkXCIsIHRydWUpO1xuICAgICAgb3V0cHV0Tm9kZS5kYXRhKFwibGFiZWxcIiwgbWFjcm9tb2xlY3VsZU5hbWUpO1xuICAgICAgaWYgKG1hY3JvbW9sZWN1bGVJc011bHRpbWVyKSB7XG4gICAgICAgIFxuICAgICAgICBlbGVtZW50VXRpbGl0aWVzLnNldE11bHRpbWVyU3RhdHVzKG91dHB1dE5vZGUsIHRydWUpO1xuXG4gICAgICAgIGNvbnN0IGNhcmRpbmFsaXR5ID0gbWFjcm9tb2xlY3VsZU11bHRpbWVyQ2FyZGluYWxpdHk7XG4gICAgICAgIGlmIChjYXJkaW5hbGl0eSAhPSAnJykge1xuICAgICAgICAgIGNvbnN0IGluZm9ib3hMYWJlbCA9IFwiTjpcIiArIGNhcmRpbmFsaXR5O1xuICAgICAgICAgIGluZm9ib3hPYmplY3QgPSB7XG4gICAgICAgICAgICBjbGF6ejogXCJ1bml0IG9mIGluZm9ybWF0aW9uXCIsXG4gICAgICAgICAgICBsYWJlbDoge1xuICAgICAgICAgICAgICB0ZXh0OiBpbmZvYm94TGFiZWxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBiYm94OiB7XG4gICAgICAgICAgICAgIHc6IGluZm9ib3hMYWJlbC5sZW5ndGggKiB3aWR0aFBlckNoYXIsXG4gICAgICAgICAgICAgIGg6IG1pbkluZm9ib3hEaW1lbnNpb25cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9O1xuICAgICAgICAgIGVsZW1lbnRVdGlsaXRpZXMuYWRkU3RhdGVPckluZm9Cb3gob3V0cHV0Tm9kZSwgaW5mb2JveE9iamVjdCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgb3V0cHV0SW5mb2JveExhYmVscy5mb3JFYWNoKGZ1bmN0aW9uKGxhYmVsKSB7XG4gICAgICAgIGNvbnN0IG91dHB1dEluZm9ib3hXaWR0aCA9IGxhYmVsLmxlbmd0aCA+IDAgPyBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWF0aC5tYXgod2lkdGhQZXJDaGFyICogbGFiZWwubGVuZ3RoLCBtaW5JbmZvYm94RGltZW5zaW9uKSA6IFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW5JbmZvYm94RGltZW5zaW9uO1xuICAgICAgICBpbmZvYm94T2JqZWN0ID0ge1xuICAgICAgICAgIGNsYXp6OiBcInVuaXQgb2YgaW5mb3JtYXRpb25cIixcbiAgICAgICAgICBsYWJlbDoge1xuICAgICAgICAgICAgdGV4dDogbGFiZWxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGJib3g6IHtcbiAgICAgICAgICAgIHc6IG91dHB1dEluZm9ib3hXaWR0aCxcbiAgICAgICAgICAgIGg6IG1pbkluZm9ib3hEaW1lbnNpb25cbiAgICAgICAgICB9LFxuICAgICAgICAgIHN0eWxlOiB7XG4gICAgICAgICAgICBcInNoYXBlLW5hbWVcIjogXCJlbGxpcHNlXCJcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIGVsZW1lbnRVdGlsaXRpZXMuYWRkU3RhdGVPckluZm9Cb3gob3V0cHV0Tm9kZSwgaW5mb2JveE9iamVjdCk7XG4gICAgICB9KTtcblxuICAgICAgXG4gICAgICBbaW5wdXROb2RlLCBvdXRwdXROb2RlXS5mb3JFYWNoKGZ1bmN0aW9uKG5vZGUpe1xuICAgICAgICBjb25zdCB3aWR0aCA9IGVsZW1lbnRVdGlsaXRpZXMuY2FsY3VsYXRlTWluV2lkdGgobm9kZSk7XG4gICAgICAgIFxuICAgICAgICBlbGVtZW50VXRpbGl0aWVzLnJlc2l6ZU5vZGVzKG5vZGUsIHdpZHRoLCBtYWNyb21vbGVjdWxlSGVpZ2h0LCBmYWxzZSwgdHJ1ZSk7XG4gICAgICB9KTtcbiAgICAgIFxuICAgICAgaWYgKG9yaWVudGF0aW9uID09PSBcImhvcml6b250YWxcIikge1xuICAgICAgICBsZXQgbmV3SW5wdXRYUG9zID0gcHJvY2Vzc1Bvc2l0aW9uLnggLSBlZGdlTGVuZ3RoIC0gcHJvY2Vzc1dpZHRoIC8gMiAtIGlucHV0Tm9kZS5kYXRhKCdiYm94JykudyAvIDI7XG4gICAgICAgIGlucHV0Tm9kZS5wb3NpdGlvbigneCcsIG5ld0lucHV0WFBvcyk7XG4gICAgICBcbiAgICAgICAgbGV0IG5ld091dHB1dFhQb3MgPSBwcm9jZXNzUG9zaXRpb24ueCArIGVkZ2VMZW5ndGggKyBwcm9jZXNzV2lkdGggLyAyICsgb3V0cHV0Tm9kZS5kYXRhKCdiYm94JykudyAvIDI7XG4gICAgICAgIG91dHB1dE5vZGUucG9zaXRpb24oJ3gnLCBuZXdPdXRwdXRYUG9zKTtcbiAgICAgIH0gXG4gICAgICBlbHNlIHtcbiAgICAgICAgbGV0IG5ld0lucHV0WVBvcyA9IHByb2Nlc3NQb3NpdGlvbi55IC0gZWRnZUxlbmd0aCAtIHByb2Nlc3NXaWR0aCAvIDIgLSBpbnB1dE5vZGUuZGF0YSgnYmJveCcpLmggLyAyO1xuICAgICAgICBpbnB1dE5vZGUucG9zaXRpb24oJ3knLCBuZXdJbnB1dFlQb3MpO1xuICAgICAgXG4gICAgICAgIGxldCBuZXdPdXRwdXRZUG9zID0gcHJvY2Vzc1Bvc2l0aW9uLnkgKyBlZGdlTGVuZ3RoICsgcHJvY2Vzc1dpZHRoIC8gMiArIG91dHB1dE5vZGUuZGF0YSgnYmJveCcpLmggLyAyO1xuICAgICAgICBvdXRwdXROb2RlLnBvc2l0aW9uKCd5JywgbmV3T3V0cHV0WVBvcyk7XG4gICAgICB9XG5cbiAgICAgIGxldCBvdXRwdXRFZGdlID0gZWxlbWVudFV0aWxpdGllcy5hZGRFZGdlKHByb2Nlc3NOb2RlLmlkKCksIG91dHB1dE5vZGUuaWQoKSwge2NsYXNzOiAncHJvZHVjdGlvbicsIGxhbmd1YWdlOiAnUEQnfSlcbiAgICAgIG91dHB1dEVkZ2UuZGF0YShcImp1c3RBZGRlZFwiLCB0cnVlKTtcblxuICAgICAgaWYgKGhhc1JlZ3VsYXRvcikge1xuICAgICAgICBjb25zdCByZWd1bGF0b3JOYW1lID0gcmVndWxhdG9yLm5hbWU7XG4gICAgICAgIGNvbnN0IHJlZ3VsYXRvclR5cGUgPSByZWd1bGF0b3IudHlwZTtcbiAgICAgICAgbGV0IHhQb3NPZlJlZ3VsYXRvciA9IHByb2Nlc3NQb3NpdGlvbi54O1xuICAgICAgICBpZiAocmVndWxhdG9yTXVsdGltZXIuZW5hYmxlZCAmJiBvcmllbnRhdGlvbiA9PT0gXCJob3Jpem9udGFsXCIpIHtcbiAgICAgICAgICB4UG9zT2ZSZWd1bGF0b3IgLT0gbXVsdGltZXJPZmZzZXQ7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHlQb3NPZlJlZ3VsYXRvciA9IHByb2Nlc3NQb3NpdGlvbi55IC0gKChwcm9jZXNzSGVpZ2h0IC8gMikgKyAocmVndWxhdG9ySGVpZ2h0IC8gMikgKyBlZGdlTGVuZ3RoKTsgXG5cbiAgICAgICAgbm9kZVBvc2l0aW9uID0ge1xuICAgICAgICAgIHg6IHhQb3NPZlJlZ3VsYXRvcixcbiAgICAgICAgICB5OiB5UG9zT2ZSZWd1bGF0b3JcbiAgICAgICAgfVxuICAgICAgICBpZiAob3JpZW50YXRpb24gPT09IFwidmVydGljYWxcIikge1xuICAgICAgICAgIG5vZGVQb3NpdGlvbiA9IGVsZW1lbnRVdGlsaXRpZXMucm90YXRlOTAobm9kZVBvc2l0aW9uLCBwcm9jZXNzUG9zaXRpb24pO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHJlZ3VsYXRvck5vZGUgPSBlbGVtZW50VXRpbGl0aWVzLmFkZE5vZGUobm9kZVBvc2l0aW9uLngsIG5vZGVQb3NpdGlvbi55LCB7Y2xhc3M6IHJlZ3VsYXRvclR5cGUsIGxhbmd1YWdlOiAnUEQnfSk7XG4gICAgICAgIHJlZ3VsYXRvck5vZGUuZGF0YSgnanVzdEFkZGVkJywgdHJ1ZSk7XG4gICAgICAgIHJlZ3VsYXRvck5vZGUuZGF0YSgnbGFiZWwnLCByZWd1bGF0b3JOYW1lKTtcblxuICAgICAgICBpZiAocmVndWxhdG9yTXVsdGltZXIuZW5hYmxlZCkge1xuICAgICAgICAgIGVsZW1lbnRVdGlsaXRpZXMuc2V0TXVsdGltZXJTdGF0dXMocmVndWxhdG9yTm9kZSwgdHJ1ZSk7XG5cbiAgICAgICAgICBjb25zdCBjYXJkaW5hbGl0eSA9IHJlZ3VsYXRvck11bHRpbWVyLmNhcmRpbmFsaXR5O1xuICAgICAgICAgIGlmIChjYXJkaW5hbGl0eSAhPSAnJykge1xuICAgICAgICAgICAgY29uc3QgaW5mb2JveExhYmVsID0gXCJOOlwiICsgY2FyZGluYWxpdHk7XG4gICAgICAgICAgICBpbmZvYm94T2JqZWN0ID0ge1xuICAgICAgICAgICAgICBjbGF6ejogXCJ1bml0IG9mIGluZm9ybWF0aW9uXCIsXG4gICAgICAgICAgICAgIGxhYmVsOiB7XG4gICAgICAgICAgICAgICAgdGV4dDogaW5mb2JveExhYmVsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIGJib3g6IHtcbiAgICAgICAgICAgICAgICB3OiBpbmZvYm94TGFiZWwubGVuZ3RoICogd2lkdGhQZXJDaGFyLFxuICAgICAgICAgICAgICAgIGg6IG1pbkluZm9ib3hEaW1lbnNpb25cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGVsZW1lbnRVdGlsaXRpZXMuYWRkU3RhdGVPckluZm9Cb3gocmVndWxhdG9yTm9kZSwgaW5mb2JveE9iamVjdCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHJlZ3VsYXRvckVkZ2UgPSBlbGVtZW50VXRpbGl0aWVzLmFkZEVkZ2UocmVndWxhdG9yTm9kZS5pZCgpLCBwcm9jZXNzTm9kZS5pZCgpLCB7Y2xhc3M6ICdjYXRhbHlzaXMnLCBsYW5ndWFnZTogJ1BEJ30pO1xuICAgICAgICByZWd1bGF0b3JFZGdlLmRhdGEoJ2p1c3RBZGRlZCcsIHRydWUpO1xuICAgICAgfVxuXG4gICAgICBjeS5lbmRCYXRjaCgpO1xuXG4gICAgICBjb25zdCBlbGVzID0gY3kuZWxlbWVudHMoJ1tqdXN0QWRkZWRdJyk7XG4gICAgICBlbGVzLnJlbW92ZURhdGEoJ2p1c3RBZGRlZCcpO1xuXG4gICAgICBjeS5lbGVtZW50cygpLnVuc2VsZWN0KCk7XG4gICAgICBlbGVzLnNlbGVjdCgpO1xuXG4gICAgICByZXR1cm4gZWxlcztcbiAgICB9O1xuXG4gICAgZWxlbWVudFV0aWxpdGllcy5jcmVhdGVNZXRhYm9saWNSZWFjdGlvbiA9IGZ1bmN0aW9uIChpbnB1dHMsIG91dHB1dHMsIHJldmVyc2libGUsIHJlZ3VsYXRvciwgcmVndWxhdG9yTXVsdGltZXIsIG9yaWVudGF0aW9uKSB7XG4gICAgICBsZXQgcm90YXRlOTAgPSBmdW5jdGlvbihwb2ludCwgY2VudGVyKSB7XG4gICAgICAgIGNvbnN0IHJlbGF0aXZlWCA9IGNlbnRlci54IC0gcG9pbnQueDtcbiAgICAgICAgY29uc3QgcmVsYXRpdmVZID0gY2VudGVyLnkgLSBwb2ludC55O1xuXG4gICAgICAgIGNvbnN0IHJlbGF0aXZlUm90YXRlZFggPSByZWxhdGl2ZVk7XG4gICAgICAgIGNvbnN0IHJlbGF0aXZlUm90YXRlZFkgPSAtMSAqIHJlbGF0aXZlWDtcblxuICAgICAgICBjb25zdCByZXN1bHRYID0gcmVsYXRpdmVSb3RhdGVkWCArIGNlbnRlci54O1xuICAgICAgICBjb25zdCByZXN1bHRZID0gcmVsYXRpdmVSb3RhdGVkWSArIGNlbnRlci55O1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgeDogcmVzdWx0WCxcbiAgICAgICAgICB5OiByZXN1bHRZXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBjb25zdCBoYXNSZWd1bGF0b3IgPSByZWd1bGF0b3IubmFtZSAhPT0gdW5kZWZpbmVkO1xuICAgICAgY29uc3QgZGVmYXVsdFNpbXBsZUNoZW1pY2FsUHJvcGVydGllcyA9IGVsZW1lbnRVdGlsaXRpZXMuZ2V0RGVmYXVsdFByb3BlcnRpZXMoIFwic2ltcGxlIGNoZW1pY2FsXCIgKTtcbiAgICAgIGNvbnN0IGRlZmF1bHRSZWd1bGF0b3JQcm9wZXJ0aWVzID0gaGFzUmVndWxhdG9yID8gZWxlbWVudFV0aWxpdGllcy5nZXREZWZhdWx0UHJvcGVydGllcyhyZWd1bGF0b3IudHlwZSkgOiB7fTtcbiAgICAgIGNvbnN0IGRlZmF1bHRQcm9jZXNzUHJvcGVydGllcyA9IGVsZW1lbnRVdGlsaXRpZXMuZ2V0RGVmYXVsdFByb3BlcnRpZXMoXCJjYXRhbHl0aWNcIik7XG4gICAgICBjb25zdCBwcm9jZXNzV2lkdGggPSBkZWZhdWx0UHJvY2Vzc1Byb3BlcnRpZXMud2lkdGggfHwgNTA7XG4gICAgICBjb25zdCBwcm9jZXNzSGVpZ2h0ID0gZGVmYXVsdFByb2Nlc3NQcm9wZXJ0aWVzLmhlaWdodCB8fCA1MDtcbiAgICAgIGNvbnN0IHNpbXBsZUNoZW1pY2FsSGVpZ2h0ID0gZGVmYXVsdFNpbXBsZUNoZW1pY2FsUHJvcGVydGllcy5oZWlnaHQgfHwgMzU7XG4gICAgICBjb25zdCBzaW1wbGVDaGVtaWNhbFdpZHRoID0gZGVmYXVsdFNpbXBsZUNoZW1pY2FsUHJvcGVydGllcy53aWR0aCB8fCAzNTtcbiAgICAgIGNvbnN0IHJlZ3VsYXRvckhlaWdodCA9IGRlZmF1bHRSZWd1bGF0b3JQcm9wZXJ0aWVzLmhlaWdodCB8fCA1MDtcbiAgICAgIGNvbnN0IHByb2Nlc3NQb3NpdGlvbiA9IGVsZW1lbnRVdGlsaXRpZXMuY29udmVydFRvTW9kZWxQb3NpdGlvbih7eDogY3kud2lkdGgoKSAvIDIsIHk6IGN5LmhlaWdodCgpIC8gMn0pO1xuICAgICAgY29uc3QgdGlsaW5nUGFkZGluZ1ZlcnRpY2FsID0gMTU7XG4gICAgICBjb25zdCBlZGdlTGVuZ3RoID0gMzA7XG4gICAgICBjb25zdCBwcm9jZXNzTGVmdFNpZGVFZGdlVHlwZSA9IHJldmVyc2libGUgPyBcInByb2R1Y3Rpb25cIiA6IFwiY29uc3VtcHRpb25cIjtcbiAgICAgIGNvbnN0IHByb2Nlc3NSaWdodFNpZGVFZGdlVHlwZSA9IFwicHJvZHVjdGlvblwiO1xuICAgICAgY29uc3QgcHJvY2Vzc1BvcnRzT3JkZXJpbmcgPSBvcmllbnRhdGlvbiA9PT0gXCJ2ZXJ0aWNhbFwiID8gXCJULXRvLUJcIiA6IFwiTC10by1SXCI7XG4gICAgICBjb25zdCBtdWx0aW1lck9mZnNldCA9IDY7XG5cbiAgICAgIGN5LnN0YXJ0QmF0Y2goKTtcbiAgICAgIGlmICghZWxlbWVudFV0aWxpdGllcy5nZXRNYXBUeXBlKCkpIHtcbiAgICAgICAgZWxlbWVudFV0aWxpdGllcy5zZXRNYXBUeXBlKFwiUERcIik7XG4gICAgICB9XG5cbiAgICAgIGxldCB4UG9zT2ZJbnB1dCA9IHByb2Nlc3NQb3NpdGlvbi54IC0gZWRnZUxlbmd0aCAtIHByb2Nlc3NXaWR0aCAvIDIgLSBzaW1wbGVDaGVtaWNhbFdpZHRoIC8gMjtcbiAgICAgIGxldCB4UG9zT2ZPdXRwdXQgPSBwcm9jZXNzUG9zaXRpb24ueCArIGVkZ2VMZW5ndGggKyBwcm9jZXNzV2lkdGggLyAyICsgc2ltcGxlQ2hlbWljYWxXaWR0aCAvIDI7XG5cblxuICAgICAgbGV0IHByb2Nlc3NOb2RlID0gZWxlbWVudFV0aWxpdGllcy5hZGROb2RlKHByb2Nlc3NQb3NpdGlvbi54LCBwcm9jZXNzUG9zaXRpb24ueSwge2NsYXNzOiBcInByb2Nlc3NcIiwgbGFuZ3VhZ2U6IFwiUERcIn0pO1xuICAgICAgZWxlbWVudFV0aWxpdGllcy5zZXRQb3J0c09yZGVyaW5nKHByb2Nlc3NOb2RlLCBwcm9jZXNzUG9ydHNPcmRlcmluZyk7XG4gICAgICBwcm9jZXNzTm9kZS5kYXRhKCdqdXN0QWRkZWQnLCB0cnVlKTtcblxuICAgICAgY29uc3QgbnVtT2ZJbnB1dE5vZGVzID0gaW5wdXRzLmxlbmd0aDtcbiAgICAgIGNvbnN0IG51bU9mT3V0cHV0Tm9kZXMgPSBvdXRwdXRzLmxlbmd0aDtcblxuICAgICAgbGV0IHlQb3NPZklucHV0ID0gcHJvY2Vzc1Bvc2l0aW9uLnkgLSAoKG51bU9mSW5wdXROb2RlcyAtIDEpIC8gMikgKiAoc2ltcGxlQ2hlbWljYWxIZWlnaHQgKyB0aWxpbmdQYWRkaW5nVmVydGljYWwpO1xuXG4gICAgICBpbnB1dHMuZm9yRWFjaChmdW5jdGlvbihkYXRhLCBpbmRleCkge1xuICAgICAgICBjb25zdCBub2RlTmFtZSA9IGRhdGEubmFtZTtcbiAgICAgICAgY29uc3Qgbm9kZVR5cGUgPSBkYXRhLnR5cGU7XG5cbiAgICAgICAgaWYgKGluZGV4ID09PSAwKSB7XG4gICAgICAgICAgeVBvc09mSW5wdXQgPSBwcm9jZXNzUG9zaXRpb24ueTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChpbmRleCAlIDIgPT09IDEpIHtcbiAgICAgICAgICB5UG9zT2ZJbnB1dCA9IHByb2Nlc3NQb3NpdGlvbi55IC0gKChzaW1wbGVDaGVtaWNhbEhlaWdodCArIHRpbGluZ1BhZGRpbmdWZXJ0aWNhbCkgKiBNYXRoLmNlaWwoaW5kZXggLyAyKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgeVBvc09mSW5wdXQgPSBwcm9jZXNzUG9zaXRpb24ueSArICgoc2ltcGxlQ2hlbWljYWxIZWlnaHQgKyB0aWxpbmdQYWRkaW5nVmVydGljYWwpICogKGluZGV4IC8gMikpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IG5vZGVQb3NpdGlvbiA9IHtcbiAgICAgICAgICB4OiB4UG9zT2ZJbnB1dCxcbiAgICAgICAgICB5OiB5UG9zT2ZJbnB1dFxuICAgICAgICB9XG4gICAgICAgIGlmIChvcmllbnRhdGlvbiA9PT0gXCJ2ZXJ0aWNhbFwiKSB7XG4gICAgICAgICAgbm9kZVBvc2l0aW9uID0gcm90YXRlOTAobm9kZVBvc2l0aW9uLCBwcm9jZXNzUG9zaXRpb24pO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IG5ld05vZGUgPSBlbGVtZW50VXRpbGl0aWVzLmFkZE5vZGUobm9kZVBvc2l0aW9uLngsIG5vZGVQb3NpdGlvbi55LCB7Y2xhc3M6IG5vZGVUeXBlLnRvTG93ZXJDYXNlKCksIGxhbmd1YWdlOiBcIlBEXCJ9KTtcbiAgICAgICAgbmV3Tm9kZS5kYXRhKFwianVzdEFkZGVkXCIsIHRydWUpO1xuICAgICAgICBuZXdOb2RlLmRhdGEoXCJsYWJlbFwiLCBub2RlTmFtZSk7XG5cbiAgICAgICAgbGV0IG5ld0VkZ2U7XG4gICAgICAgIGlmIChyZXZlcnNpYmxlKSB7XG4gICAgICAgICAgbmV3RWRnZSA9IGVsZW1lbnRVdGlsaXRpZXMuYWRkRWRnZShwcm9jZXNzTm9kZS5pZCgpLCBuZXdOb2RlLmlkKCksIHtjbGFzczogcHJvY2Vzc0xlZnRTaWRlRWRnZVR5cGUsIGxhbmd1YWdlOiBcIlBEXCJ9LCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgMSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgbmV3RWRnZSA9IGVsZW1lbnRVdGlsaXRpZXMuYWRkRWRnZShuZXdOb2RlLmlkKCksIHByb2Nlc3NOb2RlLmlkKCksIHtjbGFzczogcHJvY2Vzc0xlZnRTaWRlRWRnZVR5cGUsIGxhbmd1YWdlOiBcIlBEXCJ9KTtcbiAgICAgICAgfVxuICAgICAgICBuZXdFZGdlLmRhdGEoXCJqdXN0QWRkZWRcIiwgdHJ1ZSk7XG4gICAgICB9KTtcblxuICAgICAgbGV0IHlQb3NPZk91dHB1dCA9IHByb2Nlc3NQb3NpdGlvbi55IC0gKChudW1PZk91dHB1dE5vZGVzIC0gMSkgLyAyKSAqIChzaW1wbGVDaGVtaWNhbEhlaWdodCArIHRpbGluZ1BhZGRpbmdWZXJ0aWNhbCk7XG5cbiAgICAgIG91dHB1dHMuZm9yRWFjaChmdW5jdGlvbihkYXRhLCBpbmRleCkge1xuICAgICAgICBjb25zdCBub2RlTmFtZSA9IGRhdGEubmFtZTtcbiAgICAgICAgY29uc3Qgbm9kZVR5cGUgPSBkYXRhLnR5cGU7XG5cbiAgICAgICAgaWYgKGluZGV4ID09PSAwKSB7XG4gICAgICAgICAgeVBvc09mT3V0cHV0ID0gcHJvY2Vzc1Bvc2l0aW9uLnk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaW5kZXggJSAyID09PSAxKSB7XG4gICAgICAgICAgeVBvc09mT3V0cHV0ID0gcHJvY2Vzc1Bvc2l0aW9uLnkgLSAoKHNpbXBsZUNoZW1pY2FsSGVpZ2h0ICsgdGlsaW5nUGFkZGluZ1ZlcnRpY2FsKSAqIE1hdGguY2VpbChpbmRleCAvIDIpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICB5UG9zT2ZPdXRwdXQgPSBwcm9jZXNzUG9zaXRpb24ueSArICgoc2ltcGxlQ2hlbWljYWxIZWlnaHQgKyB0aWxpbmdQYWRkaW5nVmVydGljYWwpICogKGluZGV4IC8gMikpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IG5vZGVQb3NpdGlvbiA9IHtcbiAgICAgICAgICB4OiB4UG9zT2ZPdXRwdXQsXG4gICAgICAgICAgeTogeVBvc09mT3V0cHV0XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9yaWVudGF0aW9uID09PSBcInZlcnRpY2FsXCIpIHtcbiAgICAgICAgICBub2RlUG9zaXRpb24gPSByb3RhdGU5MChub2RlUG9zaXRpb24sIHByb2Nlc3NQb3NpdGlvbik7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbmV3Tm9kZSA9IGVsZW1lbnRVdGlsaXRpZXMuYWRkTm9kZShub2RlUG9zaXRpb24ueCwgbm9kZVBvc2l0aW9uLnksIHtjbGFzczogbm9kZVR5cGUudG9Mb3dlckNhc2UoKSwgbGFuZ3VhZ2U6IFwiUERcIn0pO1xuICAgICAgICBuZXdOb2RlLmRhdGEoXCJqdXN0QWRkZWRcIiwgdHJ1ZSk7XG4gICAgICAgIG5ld05vZGUuZGF0YShcImxhYmVsXCIsIG5vZGVOYW1lKTtcblxuICAgICAgICBsZXQgbmV3RWRnZSA9IGVsZW1lbnRVdGlsaXRpZXMuYWRkRWRnZShwcm9jZXNzTm9kZS5pZCgpLCBuZXdOb2RlLmlkKCksIHtjbGFzczogcHJvY2Vzc1JpZ2h0U2lkZUVkZ2VUeXBlLCBsYW5ndWFnZTogXCJQRFwifSwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIDApO1xuICAgICAgICBuZXdFZGdlLmRhdGEoXCJqdXN0QWRkZWRcIiwgdHJ1ZSk7XG4gICAgICB9KTtcblxuICAgICAgLy8gYWRkIHJlZ3VsYXRvciBub2RlXG4gICAgICBpZiAoaGFzUmVndWxhdG9yKSB7XG4gICAgICAgIGNvbnN0IHJlZ3VsYXRvck5hbWUgPSByZWd1bGF0b3IubmFtZTtcbiAgICAgICAgY29uc3QgcmVndWxhdG9yVHlwZSA9IHJlZ3VsYXRvci50eXBlO1xuICAgICAgICBsZXQgeFBvc09mUmVndWxhdG9yID0gcHJvY2Vzc1Bvc2l0aW9uLng7XG4gICAgICAgIGlmIChyZWd1bGF0b3JNdWx0aW1lci5lbmFibGVkICYmIG9yaWVudGF0aW9uID09PSBcImhvcml6b250YWxcIikge1xuICAgICAgICAgIHhQb3NPZlJlZ3VsYXRvciAtPSBtdWx0aW1lck9mZnNldDtcbiAgICAgICAgfVxuICAgICAgICBsZXQgeVBvc09mUmVndWxhdG9yID0gcHJvY2Vzc1Bvc2l0aW9uLnkgLSAoKHByb2Nlc3NIZWlnaHQgLyAyKSArIChyZWd1bGF0b3JIZWlnaHQgLyAyKSArIGVkZ2VMZW5ndGgpOyBcblxuICAgICAgICBsZXQgbm9kZVBvc2l0aW9uID0ge1xuICAgICAgICAgIHg6IHhQb3NPZlJlZ3VsYXRvcixcbiAgICAgICAgICB5OiB5UG9zT2ZSZWd1bGF0b3JcbiAgICAgICAgfVxuICAgICAgICBpZiAob3JpZW50YXRpb24gPT09IFwidmVydGljYWxcIikge1xuICAgICAgICAgIG5vZGVQb3NpdGlvbiA9IHJvdGF0ZTkwKG5vZGVQb3NpdGlvbiwgcHJvY2Vzc1Bvc2l0aW9uKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCByZWd1bGF0b3JOb2RlID0gZWxlbWVudFV0aWxpdGllcy5hZGROb2RlKG5vZGVQb3NpdGlvbi54LCBub2RlUG9zaXRpb24ueSwge2NsYXNzOiByZWd1bGF0b3JUeXBlLCBsYW5ndWFnZTogJ1BEJ30pO1xuICAgICAgICByZWd1bGF0b3JOb2RlLmRhdGEoJ2p1c3RBZGRlZCcsIHRydWUpO1xuICAgICAgICByZWd1bGF0b3JOb2RlLmRhdGEoJ2xhYmVsJywgcmVndWxhdG9yTmFtZSk7XG5cbiAgICAgICAgaWYgKHJlZ3VsYXRvck11bHRpbWVyLmVuYWJsZWQpIHtcbiAgICAgICAgICBlbGVtZW50VXRpbGl0aWVzLnNldE11bHRpbWVyU3RhdHVzKHJlZ3VsYXRvck5vZGUsIHRydWUpO1xuXG4gICAgICAgICAgY29uc3QgY2FyZGluYWxpdHkgPSByZWd1bGF0b3JNdWx0aW1lci5jYXJkaW5hbGl0eTtcbiAgICAgICAgICBpZiAoY2FyZGluYWxpdHkgIT0gJycpIHtcbiAgICAgICAgICAgIGNvbnN0IGluZm9ib3hMYWJlbCA9IFwiTjpcIiArIGNhcmRpbmFsaXR5O1xuICAgICAgICAgICAgaW5mb2JveE9iamVjdCA9IHtcbiAgICAgICAgICAgICAgY2xheno6IFwidW5pdCBvZiBpbmZvcm1hdGlvblwiLFxuICAgICAgICAgICAgICBsYWJlbDoge1xuICAgICAgICAgICAgICAgIHRleHQ6IGluZm9ib3hMYWJlbFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBiYm94OiB7XG4gICAgICAgICAgICAgICAgdzogaW5mb2JveExhYmVsLmxlbmd0aCAqIDYsXG4gICAgICAgICAgICAgICAgaDogMTVcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgZWxlbWVudFV0aWxpdGllcy5hZGRTdGF0ZU9ySW5mb0JveChyZWd1bGF0b3JOb2RlLCBpbmZvYm94T2JqZWN0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgcmVndWxhdG9yRWRnZSA9IGVsZW1lbnRVdGlsaXRpZXMuYWRkRWRnZShyZWd1bGF0b3JOb2RlLmlkKCksIHByb2Nlc3NOb2RlLmlkKCksIHtjbGFzczogJ2NhdGFseXNpcycsIGxhbmd1YWdlOiAnUEQnfSk7XG4gICAgICAgIHJlZ3VsYXRvckVkZ2UuZGF0YSgnanVzdEFkZGVkJywgdHJ1ZSk7XG4gICAgICB9XG5cbiAgICAgIGN5LmVuZEJhdGNoKCk7XG5cbiAgICAgIGNvbnN0IGVsZXMgPSBjeS5lbGVtZW50cygnW2p1c3RBZGRlZF0nKTtcbiAgICAgIGVsZXMucmVtb3ZlRGF0YSgnanVzdEFkZGVkJyk7XG5cbiAgICAgIGN5LmVsZW1lbnRzKCkudW5zZWxlY3QoKTtcbiAgICAgIGVsZXMuc2VsZWN0KCk7XG5cbiAgICAgIHJldHVybiBlbGVzO1xuICAgIH07XG5cbiAgICBlbGVtZW50VXRpbGl0aWVzLmNyZWF0ZU1ldGFib2xpY0NhdGFseXRpY0FjdGl2aXR5ID0gZnVuY3Rpb24oaW5wdXROb2RlTGlzdCwgb3V0cHV0Tm9kZUxpc3QsIGNhdGFseXN0TmFtZSwgY2F0YWx5c3RUeXBlLCBwcm9jZXNzUG9zaXRpb24sIHRpbGluZ1BhZGRpbmdWZXJ0aWNhbCwgdGlsaW5nUGFkZGluZ0hvcml6b250YWwsIGVkZ2VMZW5ndGgpIHtcbiAgICAgIHZhciBkZWZhdWx0TWFjcm9tb2xlY3VsUHJvcGVydGllcyA9IGVsZW1lbnRVdGlsaXRpZXMuZ2V0RGVmYXVsdFByb3BlcnRpZXMoIFwibWFjcm9tb2xlY3VsZVwiICk7XG4gICAgICB2YXIgZGVmYXVsdFNpbXBsZUNoZW1pY2FsUHJvcGVydGllcyA9IGVsZW1lbnRVdGlsaXRpZXMuZ2V0RGVmYXVsdFByb3BlcnRpZXMoIFwic2ltcGxlIGNoZW1pY2FsXCIgKTtcbiAgICAgIHZhciBkZWZhdWx0Q2F0YWx5c3RUeXBlUHJvcGVydGllcyA9IGVsZW1lbnRVdGlsaXRpZXMuZ2V0RGVmYXVsdFByb3BlcnRpZXMoY2F0YWx5c3RUeXBlKTtcbiAgICAgIHZhciBkZWZhdWx0UHJvY2Vzc1Byb3BlcnRpZXMgPSBlbGVtZW50VXRpbGl0aWVzLmdldERlZmF1bHRQcm9wZXJ0aWVzKFwiY2F0YWx5dGljXCIpO1xuICAgICAgdmFyIHByb2Nlc3NXaWR0aCA9IGRlZmF1bHRQcm9jZXNzUHJvcGVydGllcy53aWR0aCB8fCA1MDtcbiAgICAgIHZhciBwcm9jZXNzSGVpZ2h0ID0gZGVmYXVsdFByb2Nlc3NQcm9wZXJ0aWVzLmhlaWdodCB8fCA1MDtcbiAgICAgIHZhciBzaW1wbGVDaGVtaWNhbEhlaWdodCA9IGRlZmF1bHRTaW1wbGVDaGVtaWNhbFByb3BlcnRpZXMuaGVpZ2h0IHx8IDM1O1xuICAgICAgdmFyIG1hY3JvbW9sZWN1bGVXaWR0aCA9IGRlZmF1bHRNYWNyb21vbGVjdWxQcm9wZXJ0aWVzLndpZHRoIHx8IDUwO1xuICAgICAgdmFyIG1hY3JvbW9sZWN1bGVIZWlnaHQgPSBkZWZhdWx0TWFjcm9tb2xlY3VsUHJvcGVydGllcy5oZWlnaHQgfHwgNTA7XG4gICAgICB2YXIgY2F0YWx5c3RIZWlnaHQgPSBkZWZhdWx0Q2F0YWx5c3RUeXBlUHJvcGVydGllcy5oZWlnaHQgfHwgNTA7XG4gICAgICB2YXIgcHJvY2Vzc1Bvc2l0aW9uID0gcHJvY2Vzc1Bvc2l0aW9uIHx8IGVsZW1lbnRVdGlsaXRpZXMuY29udmVydFRvTW9kZWxQb3NpdGlvbih7eDogY3kud2lkdGgoKSAvIDIsIHk6IGN5LmhlaWdodCgpIC8gMn0pO1xuICAgICAgdmFyIHRpbGluZ1BhZGRpbmdWZXJ0aWNhbCA9IHRpbGluZ1BhZGRpbmdWZXJ0aWNhbCB8fCAxNTtcbiAgICAgIHZhciB0aWxpbmdQYWRkaW5nSG9yaXpvbnRhbCA9IHRpbGluZ1BhZGRpbmdIb3Jpem9udGFsIHx8IDE1O1xuICAgICAgdmFyIGVkZ2VMZW5ndGggPSBlZGdlTGVuZ3RoIHx8IDYwO1xuXG4gICAgICBjeS5zdGFydEJhdGNoKCk7XG4gICAgICBpZiAoIWVsZW1lbnRVdGlsaXRpZXMuZ2V0TWFwVHlwZSgpKSB7XG4gICAgICAgIGVsZW1lbnRVdGlsaXRpZXMuc2V0TWFwVHlwZShcIlBEXCIpO1xuICAgICAgfVxuXG4gICAgICB2YXIgeFBvc09mSW5wdXQgPSBwcm9jZXNzUG9zaXRpb24ueCAtIGVkZ2VMZW5ndGggLSBwcm9jZXNzV2lkdGggLyAyIC0gbWFjcm9tb2xlY3VsZVdpZHRoIC8gMjtcbiAgICAgIHZhciB4UG9zT2ZPdXRwdXQgPSBwcm9jZXNzUG9zaXRpb24ueCArIGVkZ2VMZW5ndGggKyBwcm9jZXNzV2lkdGggLyAyICsgbWFjcm9tb2xlY3VsZVdpZHRoIC8gMjtcblxuICAgICAgdmFyIHByb2Nlc3NOb2RlID0gZWxlbWVudFV0aWxpdGllcy5hZGROb2RlKHByb2Nlc3NQb3NpdGlvbi54LCBwcm9jZXNzUG9zaXRpb24ueSwge2NsYXNzOiBcInByb2Nlc3NcIiwgbGFuZ3VhZ2U6IFwiUERcIn0pO1xuICAgICAgZWxlbWVudFV0aWxpdGllcy5zZXRQb3J0c09yZGVyaW5nKHByb2Nlc3NOb2RlLCBcIkwtdG8tUlwiKTtcbiAgICAgIHByb2Nlc3NOb2RlLmRhdGEoJ2p1c3RBZGRlZCcsIHRydWUpO1xuXG4gICAgICBjb25zdCBudW1PZklucHV0Tm9kZXMgPSBpbnB1dE5vZGVMaXN0Lmxlbmd0aDtcbiAgICAgIGNvbnN0IG51bU9mT3V0cHV0Tm9kZXMgPSBvdXRwdXROb2RlTGlzdC5sZW5ndGg7XG4gICAgICB2YXIgeVBvc09mSW5wdXQgPSBwcm9jZXNzUG9zaXRpb24ueSAtICgobnVtT2ZJbnB1dE5vZGVzIC0gMSkgLyAyKSAqIChtYWNyb21vbGVjdWxlSGVpZ2h0ICsgdGlsaW5nUGFkZGluZ1ZlcnRpY2FsKTtcblxuICAgICAgLy8gYWRkIGlucHV0IHNpZGUgbm9kZXNcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtT2ZJbnB1dE5vZGVzOyBpKyspIHtcbiAgICAgICAgaWYoaW5wdXROb2RlTGlzdFtpXS50eXBlID09IFwiU2ltcGxlIENoZW1pY2FsXCIpe1xuICAgICAgICAgIHZhciBuZXdOb2RlID0gZWxlbWVudFV0aWxpdGllcy5hZGROb2RlKHhQb3NPZklucHV0LCB5UG9zT2ZJbnB1dCwge2NsYXNzIDogJ3NpbXBsZSBjaGVtaWNhbCcsIGxhbmd1YWdlIDogJ1BEJ30pO1xuICAgICAgICAgIHlQb3NPZklucHV0ICs9IHNpbXBsZUNoZW1pY2FsSGVpZ2h0ICsgdGlsaW5nUGFkZGluZ1ZlcnRpY2FsO1xuICAgICAgICB9XG4gICAgICAgIGVsc2V7XG4gICAgICAgICAgdmFyIG5ld05vZGUgPSBlbGVtZW50VXRpbGl0aWVzLmFkZE5vZGUoeFBvc09mSW5wdXQsIHlQb3NPZklucHV0LCB7Y2xhc3MgOiAnbWFjcm9tb2xlY3VsZScsIGxhbmd1YWdlIDogJ1BEJ30pO1xuICAgICAgICAgIC8vdXBkYXRlIHRoZSB5IHBvc2l0aW9uXG4gICAgICAgICAgeVBvc09mSW5wdXQgKz0gbWFjcm9tb2xlY3VsZUhlaWdodCArIHRpbGluZ1BhZGRpbmdWZXJ0aWNhbDtcbiAgICAgICAgfVxuICAgICAgICBuZXdOb2RlLmRhdGEoJ2p1c3RBZGRlZCcsIHRydWUpO1xuICAgICAgICBuZXdOb2RlLmRhdGEoJ2xhYmVsJywgaW5wdXROb2RlTGlzdFtpXS5uYW1lKTtcblxuICAgICAgICB2YXIgbmV3RWRnZSA9IGVsZW1lbnRVdGlsaXRpZXMuYWRkRWRnZShuZXdOb2RlLmlkKCksIHByb2Nlc3NOb2RlLmlkKCksIHtjbGFzcyA6ICdjb25zdW1wdGlvbicsIGxhbmd1YWdlIDogJ1BEJ30pO1xuICAgICAgICBuZXdFZGdlLmRhdGEoJ2p1c3RBZGRlZCcsIHRydWUpO1xuICAgICAgfVxuICAgICAgXG4gICAgICB2YXIgeVBvc09mT3V0cHV0ID0gcHJvY2Vzc1Bvc2l0aW9uLnkgLSAoKG51bU9mT3V0cHV0Tm9kZXMgLSAxKSAvIDIpICogKG1hY3JvbW9sZWN1bGVIZWlnaHQgKyB0aWxpbmdQYWRkaW5nVmVydGljYWwpO1xuXG4gICAgICAvLyBhZGQgb3V0cHV0IHNpZGUgbm9kZXNcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtT2ZPdXRwdXROb2RlczsgaSsrKSB7XG4gICAgICAgIGlmKG91dHB1dE5vZGVMaXN0W2ldLnR5cGUgPT0gXCJTaW1wbGUgQ2hlbWljYWxcIil7XG4gICAgICAgICAgdmFyIG5ld05vZGUgPSBlbGVtZW50VXRpbGl0aWVzLmFkZE5vZGUoeFBvc09mT3V0cHV0LCB5UG9zT2ZPdXRwdXQsIHtjbGFzcyA6ICdzaW1wbGUgY2hlbWljYWwnLCBsYW5ndWFnZSA6ICdQRCd9KTtcbiAgICAgICAgICB5UG9zT2ZPdXRwdXQgKz0gc2ltcGxlQ2hlbWljYWxIZWlnaHQgKyB0aWxpbmdQYWRkaW5nVmVydGljYWw7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZXtcbiAgICAgICAgICB2YXIgbmV3Tm9kZSA9IGVsZW1lbnRVdGlsaXRpZXMuYWRkTm9kZSh4UG9zT2ZPdXRwdXQsIHlQb3NPZk91dHB1dCwge2NsYXNzIDogJ21hY3JvbW9sZWN1bGUnLCBsYW5ndWFnZSA6ICdQRCd9KTtcbiAgICAgICAgICAvL3VwZGF0ZSB0aGUgeSBwb3NpdGlvblxuICAgICAgICAgIHlQb3NPZk91dHB1dCArPSBtYWNyb21vbGVjdWxlSGVpZ2h0ICsgdGlsaW5nUGFkZGluZ1ZlcnRpY2FsO1xuICAgICAgICB9XG4gICAgICAgIG5ld05vZGUuZGF0YSgnanVzdEFkZGVkJywgdHJ1ZSk7XG4gICAgICAgIG5ld05vZGUuZGF0YSgnbGFiZWwnLCBvdXRwdXROb2RlTGlzdFtpXS5uYW1lKTtcblxuICAgICAgICB2YXIgbmV3RWRnZSA9IGVsZW1lbnRVdGlsaXRpZXMuYWRkRWRnZShwcm9jZXNzTm9kZS5pZCgpLCBuZXdOb2RlLmlkKCksIHtjbGFzcyA6ICdwcm9kdWN0aW9uJywgbGFuZ3VhZ2UgOiAnUEQnfSk7XG4gICAgICAgIG5ld0VkZ2UuZGF0YSgnanVzdEFkZGVkJywgdHJ1ZSk7XG4gICAgICB9XG5cbiAgICAgIC8vIGFkZCBjYXRhbHlzdCBub2RlXG4gICAgICB2YXIgeFBvc09mQ2F0YWx5c3QgPSBwcm9jZXNzUG9zaXRpb24ueDtcbiAgICAgIHZhciB5UG9zT2ZDYXRhbHlzdCA9IHByb2Nlc3NQb3NpdGlvbi55IC0gKHByb2Nlc3NIZWlnaHQgKyBjYXRhbHlzdEhlaWdodCArIHRpbGluZ1BhZGRpbmdWZXJ0aWNhbCk7IFxuICAgICAgdmFyIGNhdGFseXN0Tm9kZSA9IGVsZW1lbnRVdGlsaXRpZXMuYWRkTm9kZSh4UG9zT2ZDYXRhbHlzdCwgeVBvc09mQ2F0YWx5c3QsIHtjbGFzczogY2F0YWx5c3RUeXBlLCBsYW5ndWFnZTogJ1BEJ30pO1xuICAgICAgY2F0YWx5c3ROb2RlLmRhdGEoJ2p1c3RBZGRlZCcsIHRydWUpO1xuICAgICAgY2F0YWx5c3ROb2RlLmRhdGEoJ2xhYmVsJywgY2F0YWx5c3ROYW1lKTtcblxuICAgICAgdmFyIGNhdGFseXN0RWRnZSA9IGVsZW1lbnRVdGlsaXRpZXMuYWRkRWRnZShjYXRhbHlzdE5vZGUuaWQoKSwgcHJvY2Vzc05vZGUuaWQoKSwge2NsYXNzOiAnY2F0YWx5c2lzJywgbGFuZ3VhZ2U6ICdQRCd9KTtcbiAgICAgIGNhdGFseXN0RWRnZS5kYXRhKCdqdXN0QWRkZWQnLCB0cnVlKTtcblxuICAgICAgY3kuZW5kQmF0Y2goKTtcblxuICAgICAgLy9maWx0ZXIgdGhlIGp1c3QgYWRkZWQgZWxlbWVtdHMgdG8gcmV0dXJuIHRoZW0gYW5kIHJlbW92ZSBqdXN0IGFkZGVkIG1hcmtcbiAgICAgIHZhciBlbGVzID0gY3kuZWxlbWVudHMoJ1tqdXN0QWRkZWRdJyk7XG4gICAgICBlbGVzLnJlbW92ZURhdGEoJ2p1c3RBZGRlZCcpO1xuXG4gICAgICBjeS5lbGVtZW50cygpLnVuc2VsZWN0KCk7XG4gICAgICBlbGVzLnNlbGVjdCgpO1xuXG4gICAgICByZXR1cm4gZWxlczsgLy8gUmV0dXJuIHRoZSBqdXN0IGFkZGVkIGVsZW1lbnRzXG4gICAgfVxuXG4gICAgZWxlbWVudFV0aWxpdGllcy5jcmVhdGVBY3RpdmF0aW9uUmVhY3Rpb24gPSBmdW5jdGlvbiAocHJvdGVpbk5hbWUsIHByb2Nlc3NQb3NpdGlvbiwgZWRnZUxlbmd0aCwgcmV2ZXJzZSkge1xuICAgICAgdmFyIGRlZmF1bHRNYWNyb21vbGVjdWxQcm9wZXJ0aWVzID0gZWxlbWVudFV0aWxpdGllcy5nZXREZWZhdWx0UHJvcGVydGllcyggXCJtYWNyb21vbGVjdWxlXCIgKTtcbiAgICAgIHZhciBkZWZhdWx0UHJvY2Vzc1Byb3BlcnRpZXMgPSBlbGVtZW50VXRpbGl0aWVzLmdldERlZmF1bHRQcm9wZXJ0aWVzKFwiYWN0aXZhdGlvblwiKTtcbiAgICAgIHZhciBwcm9jZXNzV2lkdGggPSBkZWZhdWx0UHJvY2Vzc1Byb3BlcnRpZXMud2lkdGggfHwgNTA7XG4gICAgICB2YXIgbWFjcm9tb2xlY3VsZVdpZHRoID0gZGVmYXVsdE1hY3JvbW9sZWN1bFByb3BlcnRpZXMud2lkdGggfHwgNTA7XG4gICAgICB2YXIgcHJvY2Vzc1Bvc2l0aW9uID0gcHJvY2Vzc1Bvc2l0aW9uIHx8IGVsZW1lbnRVdGlsaXRpZXMuY29udmVydFRvTW9kZWxQb3NpdGlvbih7eDogY3kud2lkdGgoKSAvIDIsIHk6IGN5LmhlaWdodCgpIC8gMn0pO1xuICAgICAgdmFyIGVkZ2VMZW5ndGggPSBlZGdlTGVuZ3RoIHx8IDYwO1xuXG4gICAgICBjeS5zdGFydEJhdGNoKCk7XG4gICAgICBpZiAoIWVsZW1lbnRVdGlsaXRpZXMuZ2V0TWFwVHlwZSgpKSB7XG4gICAgICAgIGVsZW1lbnRVdGlsaXRpZXMuc2V0TWFwVHlwZShcIlBEXCIpO1xuICAgICAgfVxuXG4gICAgICB2YXIgeFBvc09mSW5wdXQgPSBwcm9jZXNzUG9zaXRpb24ueCAtIGVkZ2VMZW5ndGggLSBwcm9jZXNzV2lkdGggLyAyIC0gbWFjcm9tb2xlY3VsZVdpZHRoIC8gMjtcbiAgICAgIHZhciB4UG9zT2ZPdXRwdXQgPSBwcm9jZXNzUG9zaXRpb24ueCArIGVkZ2VMZW5ndGggKyBwcm9jZXNzV2lkdGggLyAyICsgbWFjcm9tb2xlY3VsZVdpZHRoIC8gMjtcblxuICAgICAgdmFyIHByb2Nlc3NOb2RlID0gZWxlbWVudFV0aWxpdGllcy5hZGROb2RlKHByb2Nlc3NQb3NpdGlvbi54LCBwcm9jZXNzUG9zaXRpb24ueSwge2NsYXNzOiBcInByb2Nlc3NcIiwgbGFuZ3VhZ2U6IFwiUERcIn0pO1xuICAgICAgZWxlbWVudFV0aWxpdGllcy5zZXRQb3J0c09yZGVyaW5nKHByb2Nlc3NOb2RlLCBcIkwtdG8tUlwiKTtcbiAgICAgIHByb2Nlc3NOb2RlLmRhdGEoJ2p1c3RBZGRlZCcsIHRydWUpO1xuXG4gICAgICB2YXIgeVBvc2l0aW9uID0gcHJvY2Vzc1Bvc2l0aW9uLnk7XG5cbiAgICAgIHZhciBpbnB1dE5vZGUgPSBlbGVtZW50VXRpbGl0aWVzLmFkZE5vZGUoeFBvc09mSW5wdXQsIHlQb3NpdGlvbiwge2NsYXNzOiBcIm1hY3JvbW9sZWN1bGVcIiwgbGFuZ3VhZ2U6IFwiUERcIn0pO1xuICAgICAgaW5wdXROb2RlLmRhdGEoXCJqdXN0QWRkZWRcIiwgdHJ1ZSk7XG4gICAgICBpbnB1dE5vZGUuZGF0YShcImxhYmVsXCIsIHByb3RlaW5OYW1lKTtcbiAgICAgIHZhciBpbmZvYm94T2JqZWN0ID0ge1xuICAgICAgICBjbGF6ejogXCJ1bml0IG9mIGluZm9ybWF0aW9uXCIsXG4gICAgICAgIGxhYmVsOiB7XG4gICAgICAgICAgdGV4dDogcmV2ZXJzZSA/IFwiYWN0aXZlXCIgOiBcImluYWN0aXZlXCJcbiAgICAgICAgfSxcbiAgICAgICAgc3R5bGU6IHtcbiAgICAgICAgICBcInNoYXBlLW5hbWVcIjogXCJlbGxpcHNlXCJcbiAgICAgICAgfSxcbiAgICAgICAgYmJveDoge1xuICAgICAgICAgIHc6IDM2LFxuICAgICAgICAgIGg6IDE1XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBlbGVtZW50VXRpbGl0aWVzLmFkZFN0YXRlT3JJbmZvQm94KGlucHV0Tm9kZSwgaW5mb2JveE9iamVjdCk7XG5cbiAgICAgIHZhciBvdXRwdXROb2RlID0gZWxlbWVudFV0aWxpdGllcy5hZGROb2RlKHhQb3NPZk91dHB1dCwgeVBvc2l0aW9uLCB7Y2xhc3M6IFwibWFjcm9tb2xlY3VsZVwiLCBsYW5ndWFnZTogXCJQRFwifSk7XG4gICAgICBvdXRwdXROb2RlLmRhdGEoXCJqdXN0QWRkZWRcIiwgdHJ1ZSk7XG4gICAgICBvdXRwdXROb2RlLmRhdGEoXCJsYWJlbFwiLCBwcm90ZWluTmFtZSk7XG4gICAgICBpbmZvYm94T2JqZWN0ID0ge1xuICAgICAgICBjbGF6ejogXCJ1bml0IG9mIGluZm9ybWF0aW9uXCIsXG4gICAgICAgIGxhYmVsOiB7XG4gICAgICAgICAgdGV4dDogcmV2ZXJzZSA/IFwiaW5hY3RpdmVcIiA6IFwiYWN0aXZlXCJcbiAgICAgICAgfSxcbiAgICAgICAgc3R5bGU6IHtcbiAgICAgICAgICBcInNoYXBlLW5hbWVcIjogXCJlbGxpcHNlXCJcbiAgICAgICAgfSxcbiAgICAgICAgYmJveDoge1xuICAgICAgICAgIHc6IDM2LFxuICAgICAgICAgIGg6IDE1XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGVsZW1lbnRVdGlsaXRpZXMuYWRkU3RhdGVPckluZm9Cb3gob3V0cHV0Tm9kZSwgaW5mb2JveE9iamVjdCk7XG5cbiAgICAgIHZhciBpbnB1dFNpZGVFZGdlID0gZWxlbWVudFV0aWxpdGllcy5hZGRFZGdlKGlucHV0Tm9kZS5pZCgpLCBwcm9jZXNzTm9kZS5pZCgpLCB7Y2xhc3M6IFwiY29uc3VtcHRpb25cIiwgbGFuZ3VhZ2U6IFwiUERcIn0pO1xuICAgICAgaW5wdXRTaWRlRWRnZS5kYXRhKFwianVzdEFkZGVkXCIsIHRydWUpO1xuICAgICAgdmFyIG91dHB1dFNpZGVFZGdlID0gZWxlbWVudFV0aWxpdGllcy5hZGRFZGdlKHByb2Nlc3NOb2RlLmlkKCksIG91dHB1dE5vZGUuaWQoKSwge2NsYXNzOiBcInByb2R1Y3Rpb25cIiwgbGFuZ3VhZ2U6IFwiUERcIn0pO1xuICAgICAgb3V0cHV0U2lkZUVkZ2UuZGF0YShcImp1c3RBZGRlZFwiLCB0cnVlKTtcbiAgICAgIGN5LmVuZEJhdGNoKCk7XG5cbiAgICAgIC8vZmlsdGVyIHRoZSBqdXN0IGFkZGVkIGVsZW1lbXRzIHRvIHJldHVybiB0aGVtIGFuZCByZW1vdmUganVzdCBhZGRlZCBtYXJrXG4gICAgICB2YXIgZWxlcyA9IGN5LmVsZW1lbnRzKCdbanVzdEFkZGVkXScpO1xuICAgICAgZWxlcy5yZW1vdmVEYXRhKCdqdXN0QWRkZWQnKTtcblxuICAgICAgY3kuZWxlbWVudHMoKS51bnNlbGVjdCgpO1xuICAgICAgZWxlcy5zZWxlY3QoKTtcblxuICAgICAgcmV0dXJuIGVsZXM7IC8vIFJldHVybiB0aGUganVzdCBhZGRlZCBlbGVtZW50c1xuICAgIH1cblxuICAgIC8qXG4gICAgICogQ3JlYXRlcyBhIHRlbXBsYXRlIHJlYWN0aW9uIHdpdGggZ2l2ZW4gcGFyYW1ldGVycy4gUmVxdWlyZXMgY29zZS1iaWxrZW50IGxheW91dCB0byB0aWxlIHRoZSBmcmVlIG1hY3JvbW9sZWN1bGVzIGluY2x1ZGVkXG4gICAgICogaW4gdGhlIGNvbXBsZXguIFBhcmFtZXRlcnMgYXJlIGV4cGxhaW5lZCBiZWxvdy5cbiAgICAgKiB0ZW1wbGF0ZVR5cGU6IFRoZSB0eXBlIG9mIHRoZSB0ZW1wbGF0ZSByZWFjdGlvbi4gSXQgbWF5IGJlICdhc3NvY2lhdGlvbicsICdkaXNzb2NpYXRpb24nLCAncmV2ZXJzaWJsZScgb3IgJ2lycmV2ZXJzaWJsZScuXG4gICAgICogbm9kZUxpc3Q6IFRoZSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdHlwZXMgb2YgbW9sZWN1bGVzIHdoaWNoIHdpbGwgaW52b2x2ZSBpbiB0aGUgcmVhY3Rpb24uXG4gICAgICogY29tcGxleE5hbWU6IFRoZSBuYW1lIG9mIHRoZSBjb21wbGV4IGluIHRoZSByZWFjdGlvbi5cbiAgICAgKiBwcm9jZXNzUG9zaXRpb246IFRoZSBtb2RhbCBwb3NpdGlvbiBvZiB0aGUgcHJvY2VzcyBpbiB0aGUgcmVhY3Rpb24uIFRoZSBkZWZhdWx0IHZhbHVlIGlzIHRoZSBjZW50ZXIgb2YgdGhlIGNhbnZhcy5cbiAgICAgKiB0aWxpbmdQYWRkaW5nVmVydGljYWw6IFRoaXMgb3B0aW9uIHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBjb3NlLWJpbGtlbnQgbGF5b3V0IHdpdGggdGhlIHNhbWUgbmFtZS4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgMTUuXG4gICAgICogdGlsaW5nUGFkZGluZ0hvcml6b250YWw6IFRoaXMgb3B0aW9uIHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBjb3NlLWJpbGtlbnQgbGF5b3V0IHdpdGggdGhlIHNhbWUgbmFtZS4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgMTUuXG4gICAgICogZWRnZUxlbmd0aDogVGhlIGRpc3RhbmNlIGJldHdlZW4gdGhlIHByb2Nlc3MgYW5kIHRoZSBtYWNyb21vbGVjdWxlcyBhdCB0aGUgYm90aCBzaWRlcy5cbiAgICAgKi9cbiAgICBlbGVtZW50VXRpbGl0aWVzLmNyZWF0ZVRlbXBsYXRlUmVhY3Rpb24gPSBmdW5jdGlvbiAodGVtcGxhdGVUeXBlLCBub2RlTGlzdCwgY29tcGxleE5hbWUsIHByb2Nlc3NQb3NpdGlvbiwgdGlsaW5nUGFkZGluZ1ZlcnRpY2FsLCB0aWxpbmdQYWRkaW5nSG9yaXpvbnRhbCwgZWRnZUxlbmd0aCwgbGF5b3V0UGFyYW0pIHtcblxuICAgICAgdmFyIGRlZmF1bHRNYWNyb21vbGVjdWxQcm9wZXJ0aWVzID0gZWxlbWVudFV0aWxpdGllcy5nZXREZWZhdWx0UHJvcGVydGllcyggXCJtYWNyb21vbGVjdWxlXCIgKTtcbiAgICAgIHZhciBkZWZhdWx0U2ltcGxlQ2hlbWljYWxQcm9wZXJ0aWVzID0gZWxlbWVudFV0aWxpdGllcy5nZXREZWZhdWx0UHJvcGVydGllcyggXCJzaW1wbGUgY2hlbWljYWxcIiApO1xuICAgICAgdmFyIGRlZmF1bHRQcm9jZXNzUHJvcGVydGllcyA9IGVsZW1lbnRVdGlsaXRpZXMuZ2V0RGVmYXVsdFByb3BlcnRpZXMoIHRlbXBsYXRlVHlwZSApO1xuICAgICAgdmFyIHByb2Nlc3NXaWR0aCA9IGRlZmF1bHRQcm9jZXNzUHJvcGVydGllcy53aWR0aCB8fCA1MDtcbiAgICAgIHZhciBtYWNyb21vbGVjdWxlV2lkdGggPSBkZWZhdWx0TWFjcm9tb2xlY3VsUHJvcGVydGllcy53aWR0aCB8fCA1MDtcbiAgICAgIHZhciBtYWNyb21vbGVjdWxlSGVpZ2h0ID0gZGVmYXVsdE1hY3JvbW9sZWN1bFByb3BlcnRpZXMuaGVpZ2h0IHx8IDUwO1xuICAgICAgdmFyIHNpbXBsZUNoZW1pY2FsV2lkdGggPSBkZWZhdWx0U2ltcGxlQ2hlbWljYWxQcm9wZXJ0aWVzLndpZHRoIHx8IDM1O1xuICAgICAgdmFyIHNpbXBsZUNoZW1pY2FsSGVpZ2h0ID0gZGVmYXVsdFNpbXBsZUNoZW1pY2FsUHJvcGVydGllcy5oZWlnaHQgfHwgMzU7XG4gICAgICB2YXIgcHJvY2Vzc1Bvc2l0aW9uID0gcHJvY2Vzc1Bvc2l0aW9uIHx8IGVsZW1lbnRVdGlsaXRpZXMuY29udmVydFRvTW9kZWxQb3NpdGlvbih7eDogY3kud2lkdGgoKSAvIDIsIHk6IGN5LmhlaWdodCgpIC8gMn0pO1xuICAgICAgdmFyIG5vZGVMaXN0ID0gbm9kZUxpc3Q7XG4gICAgICB2YXIgY29tcGxleE5hbWUgPSBjb21wbGV4TmFtZTtcbiAgICAgIHZhciBudW1PZk1vbGVjdWxlcyA9IG5vZGVMaXN0Lmxlbmd0aDtcbiAgICAgIHZhciB0aWxpbmdQYWRkaW5nVmVydGljYWwgPSB0aWxpbmdQYWRkaW5nVmVydGljYWwgfHwgMTU7XG4gICAgICB2YXIgdGlsaW5nUGFkZGluZ0hvcml6b250YWwgPSB0aWxpbmdQYWRkaW5nSG9yaXpvbnRhbCB8fCAxNTtcbiAgICAgIHZhciBlZGdlTGVuZ3RoID0gZWRnZUxlbmd0aCB8fCA2MDtcblxuICAgICAgY3kuc3RhcnRCYXRjaCgpO1xuXG4gICAgICBcbiAgICAgIGlmICghZWxlbWVudFV0aWxpdGllcy5nZXRNYXBUeXBlKCkpIHtcbiAgICAgICAgZWxlbWVudFV0aWxpdGllcy5zZXRNYXBUeXBlKFwiUERcIik7XG4gICAgICB9XG5cbiAgICAgIHZhciB4UG9zaXRpb25PZkZyZWVNYWNyb21vbGVjdWxlcztcbiAgICAgIHZhciB4UG9zaXRpb25PZklucHV0TWFjcm9tb2xlY3VsZXM7XG4gICAgICBpZiAodGVtcGxhdGVUeXBlID09PSAnYXNzb2NpYXRpb24nKSB7XG4gICAgICAgIHhQb3NpdGlvbk9mRnJlZU1hY3JvbW9sZWN1bGVzID0gcHJvY2Vzc1Bvc2l0aW9uLnggLSBlZGdlTGVuZ3RoIC0gcHJvY2Vzc1dpZHRoIC8gMiAtIG1hY3JvbW9sZWN1bGVXaWR0aCAvIDI7XG4gICAgICAgXG4gICAgICB9XG4gICAgICBlbHNlIGlmKHRlbXBsYXRlVHlwZSA9PT0gJ2Rpc3NvY2lhdGlvbicpe1xuICAgICAgICB4UG9zaXRpb25PZkZyZWVNYWNyb21vbGVjdWxlcyA9IHByb2Nlc3NQb3NpdGlvbi54ICsgZWRnZUxlbmd0aCArIHByb2Nlc3NXaWR0aCAvIDIgKyBtYWNyb21vbGVjdWxlV2lkdGggLyAyO1xuICAgICAgIFxuICAgICAgfVxuICAgICAgZWxzZXtcbiAgICAgICAgXG4gICAgICAgIHhQb3NpdGlvbk9mRnJlZU1hY3JvbW9sZWN1bGVzID0gcHJvY2Vzc1Bvc2l0aW9uLnggLSBlZGdlTGVuZ3RoIC0gcHJvY2Vzc1dpZHRoIC8gMiAtIG1hY3JvbW9sZWN1bGVXaWR0aCAvIDI7XG4gICAgICAgIHhQb3NpdGlvbk9mSW5wdXRNYWNyb21vbGVjdWxlcyA9IHByb2Nlc3NQb3NpdGlvbi54ICsgZWRnZUxlbmd0aCArIHByb2Nlc3NXaWR0aCAvIDIgKyBtYWNyb21vbGVjdWxlV2lkdGggLyAyO1xuICAgICAgfVxuXG4gICAgICAvL0NyZWF0ZSB0aGUgcHJvY2VzcyBpbiB0ZW1wbGF0ZSB0eXBlXG4gICAgICB2YXIgcHJvY2VzcztcbiAgICAgIGlmICh0ZW1wbGF0ZVR5cGUgPT09ICdyZXZlcnNpYmxlJyB8fCB0ZW1wbGF0ZVR5cGUgPT09ICdpcnJldmVyc2libGUnKSB7XG4gICAgICAgIHByb2Nlc3MgPSBlbGVtZW50VXRpbGl0aWVzLmFkZE5vZGUocHJvY2Vzc1Bvc2l0aW9uLngsIHByb2Nlc3NQb3NpdGlvbi55LCB7Y2xhc3MgOiAncHJvY2VzcycsIGxhbmd1YWdlIDogJ1BEJ30pO1xuICAgICAgICBlbGVtZW50VXRpbGl0aWVzLnNldFBvcnRzT3JkZXJpbmcocHJvY2VzcywgJ0wtdG8tUicpO1xuICAgICAgfVxuICAgICAgZWxzZXtcbiAgICAgICAgcHJvY2VzcyA9IGVsZW1lbnRVdGlsaXRpZXMuYWRkTm9kZShwcm9jZXNzUG9zaXRpb24ueCwgcHJvY2Vzc1Bvc2l0aW9uLnksIHtjbGFzcyA6IHRlbXBsYXRlVHlwZSwgbGFuZ3VhZ2UgOiAnUEQnfSk7XG4gICAgICAgIGVsZW1lbnRVdGlsaXRpZXMuc2V0UG9ydHNPcmRlcmluZyhwcm9jZXNzLCAnTC10by1SJyk7XG4gICAgICB9XG4gICAgICBwcm9jZXNzLmRhdGEoJ2p1c3RBZGRlZCcsIHRydWUpO1xuXG4gICAgICAvL0RlZmluZSB0aGUgc3RhcnRpbmcgeSBwb3NpdGlvblxuICAgICAgdmFyIHlQb3NpdGlvbiA9IHByb2Nlc3NQb3NpdGlvbi55IC0gKChudW1PZk1vbGVjdWxlcyAtIDEpIC8gMikgKiAobWFjcm9tb2xlY3VsZUhlaWdodCArIHRpbGluZ1BhZGRpbmdWZXJ0aWNhbCk7XG5cbiAgICAgIC8vQ3JlYXRlIHRoZSBmcmVlIG1vbGVjdWxlc1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1PZk1vbGVjdWxlczsgaSsrKSB7XG4gICAgICAgIC8vIG5vZGUgYWRkaXRpb24gb3BlcmF0aW9uIGlzIGRldGVybWluZWQgYnkgbW9sZWN1bGUgdHlwZVxuICAgICAgICBpZihub2RlTGlzdFtpXS50eXBlID09IFwiU2ltcGxlIENoZW1pY2FsXCIpe1xuICAgICAgICAgIHZhciBuZXdOb2RlID0gZWxlbWVudFV0aWxpdGllcy5hZGROb2RlKHhQb3NpdGlvbk9mRnJlZU1hY3JvbW9sZWN1bGVzLCB5UG9zaXRpb24sIHtjbGFzcyA6ICdzaW1wbGUgY2hlbWljYWwnLCBsYW5ndWFnZSA6ICdQRCd9KTtcbiAgICAgICAgICAvL3VwZGF0ZSB0aGUgeSBwb3NpdGlvblxuICAgICAgICAgIHlQb3NpdGlvbiArPSBzaW1wbGVDaGVtaWNhbEhlaWdodCArIHRpbGluZ1BhZGRpbmdWZXJ0aWNhbDtcbiAgICAgICAgfVxuICAgICAgICBlbHNle1xuICAgICAgICAgIHZhciBuZXdOb2RlID0gZWxlbWVudFV0aWxpdGllcy5hZGROb2RlKHhQb3NpdGlvbk9mRnJlZU1hY3JvbW9sZWN1bGVzLCB5UG9zaXRpb24sIHtjbGFzcyA6ICdtYWNyb21vbGVjdWxlJywgbGFuZ3VhZ2UgOiAnUEQnfSk7XG4gICAgICAgICAgLy91cGRhdGUgdGhlIHkgcG9zaXRpb25cbiAgICAgICAgICB5UG9zaXRpb24gKz0gbWFjcm9tb2xlY3VsZUhlaWdodCArIHRpbGluZ1BhZGRpbmdWZXJ0aWNhbDtcbiAgICAgICAgfVxuICAgICAgICBuZXdOb2RlLmRhdGEoJ2p1c3RBZGRlZCcsIHRydWUpO1xuICAgICAgICBuZXdOb2RlLmRhdGEoJ2xhYmVsJywgbm9kZUxpc3RbaV0ubmFtZSk7XG5cbiAgICAgICAgLy9jcmVhdGUgdGhlIGVkZ2UgY29ubmVjdGVkIHRvIHRoZSBuZXcgbW9sZWN1bGVcbiAgICAgICAgdmFyIG5ld0VkZ2U7XG4gICAgICAgIGlmICh0ZW1wbGF0ZVR5cGUgPT09ICdhc3NvY2lhdGlvbicpIHtcbiAgICAgICAgICBuZXdFZGdlID0gZWxlbWVudFV0aWxpdGllcy5hZGRFZGdlKG5ld05vZGUuaWQoKSwgcHJvY2Vzcy5pZCgpLCB7Y2xhc3MgOiAnY29uc3VtcHRpb24nLCBsYW5ndWFnZSA6ICdQRCd9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmKHRlbXBsYXRlVHlwZSA9PT0gJ2Rpc3NvY2lhdGlvbicpe1xuICAgICAgICAgIG5ld0VkZ2UgPSBlbGVtZW50VXRpbGl0aWVzLmFkZEVkZ2UocHJvY2Vzcy5pZCgpLCBuZXdOb2RlLmlkKCksIHtjbGFzcyA6ICdwcm9kdWN0aW9uJywgbGFuZ3VhZ2UgOiAnUEQnfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZXtcbiAgICAgICAgICAvL0dyb3VwIHJpZ2h0IG9yIHRvcCBlbGVtZW50cyBpbiBncm91cCBpZCAxXG4gICAgICAgICAgaWYgKHRlbXBsYXRlVHlwZSA9PT0gXCJpcnJldmVyc2libGVcIikge1xuICAgICAgICAgICAgbmV3RWRnZSA9IGVsZW1lbnRVdGlsaXRpZXMuYWRkRWRnZShuZXdOb2RlLmlkKCksIHByb2Nlc3MuaWQoKSwge2NsYXNzOiBcImNvbnN1bXB0aW9uXCIsIGxhbmd1YWdlOiAnUEQnfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgbmV3RWRnZSA9IGVsZW1lbnRVdGlsaXRpZXMuYWRkRWRnZShwcm9jZXNzLmlkKCksIG5ld05vZGUuaWQoKSwge2NsYXNzIDogXCJwcm9kdWN0aW9uXCIsIGxhbmd1YWdlIDogJ1BEJ30sIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCAxKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBuZXdFZGdlLmRhdGEoJ2p1c3RBZGRlZCcsIHRydWUpO1xuICAgICAgfVxuXG4gICAgICBpZih0ZW1wbGF0ZVR5cGUgPT09ICdhc3NvY2lhdGlvbicgfHwgdGVtcGxhdGVUeXBlID09ICdkaXNzb2NpYXRpb24nKXtcbiAgICAgICAgLy9DcmVhdGUgdGhlIGNvbXBsZXggaW5jbHVkaW5nIG1hY3JvbW9sZWN1bGVzIGluc2lkZSBvZiBpdFxuICAgICAgICAvL1RlbXByb3JhcmlseSBhZGQgaXQgdG8gdGhlIHByb2Nlc3MgcG9zaXRpb24gd2Ugd2lsbCBtb3ZlIGl0IGFjY29yZGluZyB0byB0aGUgbGFzdCBzaXplIG9mIGl0XG4gICAgICAgIHZhciBjb21wbGV4ID0gZWxlbWVudFV0aWxpdGllcy5hZGROb2RlKHByb2Nlc3NQb3NpdGlvbi54LCBwcm9jZXNzUG9zaXRpb24ueSwge2NsYXNzIDogJ2NvbXBsZXgnLCBsYW5ndWFnZSA6ICdQRCd9KTtcbiAgICAgICAgY29tcGxleC5kYXRhKCdqdXN0QWRkZWQnLCB0cnVlKTtcbiAgICAgICAgY29tcGxleC5kYXRhKCdqdXN0QWRkZWRMYXlvdXROb2RlJywgdHJ1ZSk7XG5cbiAgICAgICAgLy9JZiBhIG5hbWUgaXMgc3BlY2lmaWVkIGZvciB0aGUgY29tcGxleCBzZXQgaXRzIGxhYmVsIGFjY29yZGluZ2x5XG4gICAgICAgIGlmIChjb21wbGV4TmFtZSkge1xuICAgICAgICAgIGNvbXBsZXguZGF0YSgnbGFiZWwnLCBjb21wbGV4TmFtZSk7XG4gICAgICAgIH1cblxuICAgICAgICAvL2NyZWF0ZSB0aGUgZWRnZSBjb25ubmVjdGVkIHRvIHRoZSBjb21wbGV4XG4gICAgICAgIHZhciBlZGdlT2ZDb21wbGV4O1xuXG4gICAgICAgIGlmICh0ZW1wbGF0ZVR5cGUgPT09ICdhc3NvY2lhdGlvbicpIHtcbiAgICAgICAgICBlZGdlT2ZDb21wbGV4ID0gZWxlbWVudFV0aWxpdGllcy5hZGRFZGdlKHByb2Nlc3MuaWQoKSwgY29tcGxleC5pZCgpLCB7Y2xhc3MgOiAncHJvZHVjdGlvbicsIGxhbmd1YWdlIDogJ1BEJ30pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIGVkZ2VPZkNvbXBsZXggPSBlbGVtZW50VXRpbGl0aWVzLmFkZEVkZ2UoY29tcGxleC5pZCgpLCBwcm9jZXNzLmlkKCksIHtjbGFzcyA6ICdjb25zdW1wdGlvbicsIGxhbmd1YWdlIDogJ1BEJ30pO1xuICAgICAgICB9XG5cbiAgICAgICAgZWRnZU9mQ29tcGxleC5kYXRhKCdqdXN0QWRkZWQnLCB0cnVlKTtcblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG51bU9mTW9sZWN1bGVzOyBpKyspIHtcblxuICAgICAgICAgIC8vIEFkZCBhIG1vbGVjdWxlKGRlcGVuZGVudCBvbiBpdCdzIHR5cGUpIG5vdCBoYXZpbmcgYSBwcmV2aW91c2x5IGRlZmluZWQgaWQgYW5kIGhhdmluZyB0aGUgY29tcGxleCBjcmVhdGVkIGluIHRoaXMgcmVhY3Rpb24gYXMgcGFyZW50XG4gICAgICAgICAgaWYobm9kZUxpc3RbaV0udHlwZSA9PSAnU2ltcGxlIENoZW1pY2FsJyl7XG4gICAgICAgICAgICB2YXIgbmV3Tm9kZSA9IGVsZW1lbnRVdGlsaXRpZXMuYWRkTm9kZShjb21wbGV4LnBvc2l0aW9uKCd4JyksIGNvbXBsZXgucG9zaXRpb24oJ3knKSwge2NsYXNzIDogJ3NpbXBsZSBjaGVtaWNhbCcsIGxhbmd1YWdlIDogJ1BEJ30sIHVuZGVmaW5lZCwgY29tcGxleC5pZCgpKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZXtcbiAgICAgICAgICAgIHZhciBuZXdOb2RlID0gZWxlbWVudFV0aWxpdGllcy5hZGROb2RlKGNvbXBsZXgucG9zaXRpb24oJ3gnKSwgY29tcGxleC5wb3NpdGlvbigneScpLCB7Y2xhc3MgOiAnbWFjcm9tb2xlY3VsZScsIGxhbmd1YWdlIDogJ1BEJ30sIHVuZGVmaW5lZCwgY29tcGxleC5pZCgpKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBuZXdOb2RlLmRhdGEoJ2p1c3RBZGRlZCcsIHRydWUpO1xuICAgICAgICAgIG5ld05vZGUuZGF0YSgnbGFiZWwnLCBub2RlTGlzdFtpXS5uYW1lKTtcbiAgICAgICAgICBuZXdOb2RlLmRhdGEoJ2p1c3RBZGRlZExheW91dE5vZGUnLCB0cnVlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZWxzZXtcblxuICAgICAgICAvL0NyZWF0ZSB0aGUgaW5wdXQgbWFjcm9tb2xlY3VsZXNcbiAgICAgICAgdmFyIG51bU9mSW5wdXRNYWNyb21vbGVjdWxlcyA9IGNvbXBsZXhOYW1lLmxlbmd0aDtcbiAgICAgICAgeVBvc2l0aW9uID0gcHJvY2Vzc1Bvc2l0aW9uLnkgLSAoKG51bU9mSW5wdXRNYWNyb21vbGVjdWxlcyAtIDEpIC8gMikgKiAobWFjcm9tb2xlY3VsZUhlaWdodCArIHRpbGluZ1BhZGRpbmdWZXJ0aWNhbCk7XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1PZklucHV0TWFjcm9tb2xlY3VsZXM7IGkrKykge1xuXG4gICAgICAgICAgaWYoY29tcGxleE5hbWVbaV0udHlwZSA9PSAnU2ltcGxlIENoZW1pY2FsJyl7XG4gICAgICAgICAgICB2YXIgbmV3Tm9kZSA9IGVsZW1lbnRVdGlsaXRpZXMuYWRkTm9kZSh4UG9zaXRpb25PZklucHV0TWFjcm9tb2xlY3VsZXMsIHlQb3NpdGlvbiwge2NsYXNzIDogJ3NpbXBsZSBjaGVtaWNhbCcsIGxhbmd1YWdlIDogJ1BEJ30pO1xuICAgICAgICAgICAgeVBvc2l0aW9uICs9IHNpbXBsZUNoZW1pY2FsSGVpZ2h0ICsgdGlsaW5nUGFkZGluZ1ZlcnRpY2FsO1xuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNle1xuICAgICAgICAgICAgdmFyIG5ld05vZGUgPSBlbGVtZW50VXRpbGl0aWVzLmFkZE5vZGUoeFBvc2l0aW9uT2ZJbnB1dE1hY3JvbW9sZWN1bGVzLCB5UG9zaXRpb24sIHtjbGFzcyA6ICdtYWNyb21vbGVjdWxlJywgbGFuZ3VhZ2UgOiAnUEQnfSk7XG4gICAgICAgICAgICB5UG9zaXRpb24gKz0gbWFjcm9tb2xlY3VsZUhlaWdodCArIHRpbGluZ1BhZGRpbmdWZXJ0aWNhbDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBuZXdOb2RlLmRhdGEoJ2p1c3RBZGRlZCcsIHRydWUpO1xuICAgICAgICAgIG5ld05vZGUuZGF0YSgnbGFiZWwnLCBjb21wbGV4TmFtZVtpXS5uYW1lKTtcblxuICAgICAgICAgIC8vY3JlYXRlIHRoZSBlZGdlIGNvbm5lY3RlZCB0byB0aGUgbmV3IG1hY3JvbW9sZWN1bGVcbiAgICAgICAgICB2YXIgbmV3RWRnZTtcblxuICAgICAgICAgIC8vR3JvdXAgdGhlIGxlZnQgb3IgYm90dG9tIGVsZW1lbnRzIGluIGdyb3VwIGlkIDAgaWYgcmV2ZXJzaWJsZVxuICAgICAgICAgIGlmICh0ZW1wbGF0ZVR5cGUgPT09IFwiaXJyZXZlcnNpYmxlXCIpIHtcbiAgICAgICAgICAgIG5ld0VkZ2UgPSBlbGVtZW50VXRpbGl0aWVzLmFkZEVkZ2UocHJvY2Vzcy5pZCgpLCBuZXdOb2RlLmlkKCksIHtjbGFzczogXCJwcm9kdWN0aW9uXCIsIGxhbmd1YWdlOiAnUEQnfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgbmV3RWRnZSA9IGVsZW1lbnRVdGlsaXRpZXMuYWRkRWRnZShwcm9jZXNzLmlkKCksIG5ld05vZGUuaWQoKSwge2NsYXNzIDogXCJwcm9kdWN0aW9uXCIsIGxhbmd1YWdlIDogJ1BEJ30sIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCAwKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgbmV3RWRnZS5kYXRhKCdqdXN0QWRkZWQnLCB0cnVlKTtcblxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGN5LmVuZEJhdGNoKCk7XG5cbiAgICAgIHZhciBsYXlvdXROb2RlcyA9IGN5Lm5vZGVzKCdbanVzdEFkZGVkTGF5b3V0Tm9kZV0nKTtcbiAgICAgIGxheW91dE5vZGVzLnJlbW92ZURhdGEoJ2p1c3RBZGRlZExheW91dE5vZGUnKTtcbiAgICAgIHZhciBsYXlvdXQgPSBsYXlvdXROb2Rlcy5sYXlvdXQoe1xuICAgICAgICBuYW1lOiBsYXlvdXRQYXJhbS5uYW1lLFxuICAgICAgICByYW5kb21pemU6IGZhbHNlLFxuICAgICAgICBmaXQ6IGZhbHNlLFxuICAgICAgICBhbmltYXRlOiBmYWxzZSxcbiAgICAgICAgdGlsaW5nUGFkZGluZ1ZlcnRpY2FsOiB0aWxpbmdQYWRkaW5nVmVydGljYWwsXG4gICAgICAgIHRpbGluZ1BhZGRpbmdIb3Jpem9udGFsOiB0aWxpbmdQYWRkaW5nSG9yaXpvbnRhbCxcbiAgICAgICAgc3RvcDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIC8vSWYgaXQgaXMgYSByZXZlcnNpYmxlIHJlYWN0aW9uIG5vIG5lZWQgdG8gcmUtcG9zaXRpb24gY29tcGxleGVzXG4gICAgICAgICAgaWYodGVtcGxhdGVUeXBlID09PSAncmV2ZXJzaWJsZScpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgLy9yZS1wb3NpdGlvbiB0aGUgbm9kZXMgaW5zaWRlIHRoZSBjb21wbGV4XG4gICAgICAgICAgdmFyIHN1cHBvc2VkWFBvc2l0aW9uO1xuICAgICAgICAgIHZhciBzdXBwb3NlZFlQb3NpdGlvbiA9IHByb2Nlc3NQb3NpdGlvbi55O1xuXG4gICAgICAgICAgaWYgKHRlbXBsYXRlVHlwZSA9PT0gJ2Fzc29jaWF0aW9uJykge1xuICAgICAgICAgICAgc3VwcG9zZWRYUG9zaXRpb24gPSBwcm9jZXNzUG9zaXRpb24ueCArIGVkZ2VMZW5ndGggKyBwcm9jZXNzV2lkdGggLyAyICsgY29tcGxleC5vdXRlcldpZHRoKCkgLyAyO1xuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHN1cHBvc2VkWFBvc2l0aW9uID0gcHJvY2Vzc1Bvc2l0aW9uLnggLSBlZGdlTGVuZ3RoIC0gcHJvY2Vzc1dpZHRoIC8gMiAtIGNvbXBsZXgub3V0ZXJXaWR0aCgpIC8gMjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB2YXIgcG9zaXRpb25EaWZmWCA9IChzdXBwb3NlZFhQb3NpdGlvbiAtIGNvbXBsZXgucG9zaXRpb24oJ3gnKSkgLyAyO1xuICAgICAgICAgIHZhciBwb3NpdGlvbkRpZmZZID0gKHN1cHBvc2VkWVBvc2l0aW9uIC0gY29tcGxleC5wb3NpdGlvbigneScpKSAvIDI7XG4gICAgICAgICAgZWxlbWVudFV0aWxpdGllcy5tb3ZlTm9kZXMoe3g6IHBvc2l0aW9uRGlmZlgsIHk6IHBvc2l0aW9uRGlmZll9LCBjb21wbGV4KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIC8vIERvIHRoaXMgY2hlY2sgZm9yIGN5dG9zY2FwZS5qcyBiYWNrd2FyZCBjb21wYXRpYmlsaXR5XG4gICAgICBpZiAobGF5b3V0ICYmIGxheW91dC5ydW4gJiYgdGVtcGxhdGVUeXBlICE9PSAncmV2ZXJzaWJsZScgJiYgdGVtcGxhdGVUeXBlICE9PSAnaXJyZXZlcnNpYmxlJykge1xuICAgICAgICBsYXlvdXQucnVuKCk7XG4gICAgICB9XG5cbiAgICAgIC8vZmlsdGVyIHRoZSBqdXN0IGFkZGVkIGVsZW1lbXRzIHRvIHJldHVybiB0aGVtIGFuZCByZW1vdmUganVzdCBhZGRlZCBtYXJrXG4gICAgICB2YXIgZWxlcyA9IGN5LmVsZW1lbnRzKCdbanVzdEFkZGVkXScpO1xuICAgICAgZWxlcy5yZW1vdmVEYXRhKCdqdXN0QWRkZWQnKTtcblxuICAgICAgY3kuZWxlbWVudHMoKS51bnNlbGVjdCgpO1xuICAgICAgZWxlcy5zZWxlY3QoKTtcblxuICAgICAgcmV0dXJuIGVsZXM7IC8vIFJldHVybiB0aGUganVzdCBhZGRlZCBlbGVtZW50c1xuICAgIH07XG5cbiAgICAvKlxuICAgICAqIE1vdmUgdGhlIG5vZGVzIHRvIGEgbmV3IHBhcmVudCBhbmQgY2hhbmdlIHRoZWlyIHBvc2l0aW9uIGlmIHBvc3NEaWZmIHBhcmFtcyBhcmUgc2V0LlxuICAgICAqL1xuICAgIGVsZW1lbnRVdGlsaXRpZXMuY2hhbmdlUGFyZW50ID0gZnVuY3Rpb24obm9kZXMsIG5ld1BhcmVudCwgcG9zRGlmZlgsIHBvc0RpZmZZKSB7XG4gICAgICB2YXIgbmV3UGFyZW50SWQgPSBuZXdQYXJlbnQgPT0gdW5kZWZpbmVkIHx8IHR5cGVvZiBuZXdQYXJlbnQgPT09ICdzdHJpbmcnID8gbmV3UGFyZW50IDogbmV3UGFyZW50LmlkKCk7XG4gICAgICB2YXIgbW92ZWRFbGVzID0gbm9kZXMubW92ZSh7XCJwYXJlbnRcIjogbmV3UGFyZW50SWR9KTtcbiAgICAgIGlmKHR5cGVvZiBwb3NEaWZmWCAhPSAndW5kZWZpbmVkJyB8fCB0eXBlb2YgcG9zRGlmZlkgIT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgZWxlbWVudFV0aWxpdGllcy5tb3ZlTm9kZXMoe3g6IHBvc0RpZmZYLCB5OiBwb3NEaWZmWX0sIG5vZGVzKTtcbiAgICAgIH1cbiAgICAgIGVsZW1lbnRVdGlsaXRpZXMubWFpbnRhaW5Qb2ludGVyKG1vdmVkRWxlcyk7XG4gICAgICByZXR1cm4gbW92ZWRFbGVzO1xuICAgIH07XG5cbiAgICBlbGVtZW50VXRpbGl0aWVzLnVwZGF0ZUluZm9ib3hTdHlsZSA9IGZ1bmN0aW9uKCBub2RlLCBpbmRleCwgbmV3UHJvcHMgKSB7XG4gICAgICB2YXIgaW5mb2JveE9iaiA9IG5vZGUuZGF0YSgnc3RhdGVzYW5kaW5mb3MnKVtpbmRleF07XG4gICAgICAkLmV4dGVuZCggaW5mb2JveE9iai5zdHlsZSwgbmV3UHJvcHMgKTtcbiAgICAgIGN5LnN0eWxlKCkudXBkYXRlKCk7XG4gICAgfTtcblxuICAgIGVsZW1lbnRVdGlsaXRpZXMudXBkYXRlSW5mb2JveE9iaiA9IGZ1bmN0aW9uKCBub2RlLCBpbmRleCwgbmV3UHJvcHMgKSB7XG4gICAgICB2YXIgaW5mb2JveE9iaiA9IG5vZGUuZGF0YSgnc3RhdGVzYW5kaW5mb3MnKVtpbmRleF07XG4gICAgICAkLmV4dGVuZCggaW5mb2JveE9iaiwgbmV3UHJvcHMgKTtcbiAgICB9O1xuXG4gICAgLy8gUmVzaXplIGdpdmVuIG5vZGVzIGlmIHVzZUFzcGVjdFJhdGlvIGlzIHRydXRoeSBvbmUgb2Ygd2lkdGggb3IgaGVpZ2h0IHNob3VsZCBub3QgYmUgc2V0LlxuICAgIGVsZW1lbnRVdGlsaXRpZXMucmVzaXplTm9kZXMgPSBmdW5jdGlvbiAobm9kZXMsIHdpZHRoLCBoZWlnaHQsIHVzZUFzcGVjdFJhdGlvLCBwcmVzZXJ2ZVJlbGF0aXZlUG9zKSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGVzLmxlbmd0aDsgaSsrKSB7XG5cbiAgICAgICAgdmFyIG5vZGUgPSBub2Rlc1tpXTtcbiAgICAgICAgdmFyIHJhdGlvID0gdW5kZWZpbmVkO1xuICAgICAgICB2YXIgZWxlTXVzdEJlU3F1YXJlID0gZWxlbWVudFV0aWxpdGllcy5tdXN0QmVTcXVhcmUobm9kZS5kYXRhKCdjbGFzcycpKTtcblxuICAgICAgICBpZiAocHJlc2VydmVSZWxhdGl2ZVBvcyA9PT0gdHJ1ZSkge1xuICAgICAgICAgIHZhciBvbGRXaWR0aCA9IG5vZGUuZGF0YShcImJib3hcIikudztcbiAgICAgICAgICB2YXIgb2xkSGVpZ2h0ID0gbm9kZS5kYXRhKFwiYmJveFwiKS5oO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gTm90ZSB0aGF0IGJvdGggd2lkdGggYW5kIGhlaWdodCBzaG91bGQgbm90IGJlIHNldCBpZiB1c2VBc3BlY3RSYXRpbyBpcyB0cnV0aHlcbiAgICAgICAgaWYoIW5vZGUuaXNQYXJlbnQoKSl7XG4gICAgICAgICAgaWYgKHdpZHRoKSB7XG4gICAgICAgICAgICBpZiAodXNlQXNwZWN0UmF0aW8gfHwgZWxlTXVzdEJlU3F1YXJlKSB7XG4gICAgICAgICAgICAgIHJhdGlvID0gd2lkdGggLyBub2RlLndpZHRoKCk7XG4gICAgICAgICAgICB9XG4gIFxuICAgICAgICAgICAgbm9kZS5kYXRhKFwiYmJveFwiKS53ID0gd2lkdGg7XG4gICAgICAgICAgfVxuICBcbiAgICAgICAgICBpZiAoaGVpZ2h0KSB7XG4gICAgICAgICAgICBpZiAodXNlQXNwZWN0UmF0aW8gfHwgZWxlTXVzdEJlU3F1YXJlKSB7XG4gICAgICAgICAgICAgIHJhdGlvID0gaGVpZ2h0IC8gbm9kZS5oZWlnaHQoKTtcbiAgICAgICAgICAgIH1cbiAgXG4gICAgICAgICAgICBub2RlLmRhdGEoXCJiYm94XCIpLmggPSBoZWlnaHQ7XG4gICAgICAgICAgfVxuICBcbiAgICAgICAgICBpZiAocmF0aW8gJiYgIWhlaWdodCkge1xuICAgICAgICAgICAgbm9kZS5kYXRhKFwiYmJveFwiKS5oID0gbm9kZS5oZWlnaHQoKSAqIHJhdGlvO1xuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIGlmIChyYXRpbyAmJiAhd2lkdGgpIHtcbiAgICAgICAgICAgIG5vZGUuZGF0YShcImJib3hcIikudyA9IG5vZGUud2lkdGgoKSAqIHJhdGlvO1xuICAgICAgICAgIH1cbiAgICAgICAgfWVsc2V7XG4gICAgICAgICAgbm9kZS5kYXRhKFwibWluSGVpZ2h0XCIgLCBcIlwiKyBoZWlnaHQpO1xuICAgICAgICAgIG5vZGUuZGF0YShcIm1pbldpZHRoXCIgLCBcIlwiKyB3aWR0aCk7XG4gICAgICAgICAgbm9kZS5kYXRhKFwibWluV2lkdGhCaWFzTGVmdFwiLCBcIjUwJVwiKTtcbiAgICAgICAgICBub2RlLmRhdGEoXCJtaW5XaWR0aEJpYXNSaWdodFwiLCBcIjUwJVwiKTtcbiAgICAgICAgICBub2RlLmRhdGEoXCJtaW5IZWlnaHRCaWFzVG9wXCIsIFwiNTAlXCIgKTtcbiAgICAgICAgICBub2RlLmRhdGEoXCJtaW5IZWlnaHRCaWFzQm90dG9tXCIsIFwiNTAlXCIpO1xuICAgICAgICB9XG4gICAgICAgIFxuXG4gICAgIC8qICAgIGlmIChwcmVzZXJ2ZVJlbGF0aXZlUG9zID09PSB0cnVlKSB7XG4gICAgICAgICAgdmFyIHN0YXRlc2FuZGluZm9zID0gbm9kZS5kYXRhKCdzdGF0ZXNhbmRpbmZvcycpO1xuICAgICAgICAgIHZhciB0b3BCb3R0b20gPSBzdGF0ZXNhbmRpbmZvcy5maWx0ZXIoYm94ID0+IChib3guYW5jaG9yU2lkZSA9PT0gXCJ0b3BcIiB8fCBib3guYW5jaG9yU2lkZSA9PT0gXCJib3R0b21cIikpO1xuICAgICAgICAgIHZhciByaWdodExlZnQgPSBzdGF0ZXNhbmRpbmZvcy5maWx0ZXIoYm94ID0+IChib3guYW5jaG9yU2lkZSA9PT0gXCJyaWdodFwiIHx8IGJveC5hbmNob3JTaWRlID09PSBcImxlZnRcIikpO1xuXG4gICAgICAgICAgdG9wQm90dG9tLmZvckVhY2goZnVuY3Rpb24oYm94KXtcbiAgICAgICAgICAgIGlmIChib3guYmJveC54IDwgMCkge1xuICAgICAgICAgICAgICBib3guYmJveC54ID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGJveC5iYm94LnggPiBvbGRXaWR0aCkge1xuICAgICAgICAgICAgICBib3guYmJveC54ID0gb2xkV2lkdGg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBib3guYmJveC54ID0gbm9kZS5kYXRhKFwiYmJveFwiKS53ICogYm94LmJib3gueCAvIG9sZFdpZHRoO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgcmlnaHRMZWZ0LmZvckVhY2goZnVuY3Rpb24oYm94KXtcbiAgICAgICAgICAgIGlmIChib3guYmJveC55IDwgMCkge1xuICAgICAgICAgICAgICBib3guYmJveC55ID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGJveC5iYm94LnkgPiBvbGRIZWlnaHQpIHtcbiAgICAgICAgICAgICAgYm94LmJib3gueSA9IG9sZEhlaWdodDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJveC5iYm94LnkgPSBub2RlLmRhdGEoXCJiYm94XCIpLmggKiBib3guYmJveC55IC8gb2xkSGVpZ2h0O1xuICAgICAgICAgIH0pO1xuICAgICAgICB9ICovXG4gICAgICB9XG4gICAgfTtcblxuICAgIGVsZW1lbnRVdGlsaXRpZXMuY2FsY3VsYXRlTWluV2lkdGggPSBmdW5jdGlvbihub2RlKSB7XG5cbiAgICAgICAgdmFyIGRlZmF1bHRXaWR0aCA9IHRoaXMuZ2V0RGVmYXVsdFByb3BlcnRpZXMobm9kZS5kYXRhKCdjbGFzcycpKS53aWR0aDtcblxuICAgICAgICAvLyBMYWJlbCB3aWR0aCBjYWxjdWxhdGlvblxuICAgICAgICB2YXIgc3R5bGUgPSBub2RlLnN0eWxlKCk7XG5cbiAgICAgICAgdmFyIGZvbnRGYW1pbGl5ID0gc3R5bGVbJ2ZvbnQtZmFtaWx5J107XG4gICAgICAgIHZhciBmb250U2l6ZSA9IHN0eWxlWydmb250LXNpemUnXTtcbiAgICAgICAgdmFyIGxhYmVsVGV4dCA9IHN0eWxlWydsYWJlbCddO1xuXG4gICAgICAgIGlmIChsYWJlbFRleHQgPT09IFwiXCIgJiYgbm9kZS5kYXRhKCdsYWJlbCcpICYmIG5vZGUuZGF0YSgnbGFiZWwnKSAhPT0gXCJcIikge1xuICAgICAgICAgIGxhYmVsVGV4dCA9IG5vZGUuZGF0YSgnbGFiZWwnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBsYWJlbFdpZHRoID0gZWxlbWVudFV0aWxpdGllcy5nZXRXaWR0aEJ5Q29udGVudCggbGFiZWxUZXh0LCBmb250RmFtaWxpeSwgZm9udFNpemUgKTtcblxuICAgICAgICB2YXIgc3RhdGVzYW5kaW5mb3MgPSBub2RlLmRhdGEoJ3N0YXRlc2FuZGluZm9zJyk7XG4gICAgICAgIC8vVG9wIGFuZCBib3R0b20gaW5mb0JveGVzXG4gICAgICAgIC8vdmFyIHRvcEluZm9Cb3hlcyA9IHN0YXRlc2FuZGluZm9zLmZpbHRlcihib3ggPT4gKGJveC5hbmNob3JTaWRlID09PSBcInRvcFwiIHx8ICgoYm94LmFuY2hvclNpZGUgPT09IFwicmlnaHRcIiB8fCBib3guYW5jaG9yU2lkZSA9PT0gXCJsZWZ0XCIpICYmIChib3guYmJveC55IDw9IDEyKSkpKTtcbiAgICAgICAgLy92YXIgYm90dG9tSW5mb0JveGVzID0gc3RhdGVzYW5kaW5mb3MuZmlsdGVyKGJveCA9PiAoYm94LmFuY2hvclNpZGUgPT09IFwiYm90dG9tXCIgfHwgKChib3guYW5jaG9yU2lkZSA9PT0gXCJyaWdodFwiIHx8IGJveC5hbmNob3JTaWRlID09PSBcImxlZnRcIikgJiYgKGJveC5iYm94LnkgPj0gbm9kZS5kYXRhKCdiYm94JykuaCAtIDEyKSkpKTtcbiAgICAgICAgdmFyIHVuaXRHYXAgPSA1O1xuICAgICAgICB2YXIgdG9wSWRlYWxXaWR0aCA9IHVuaXRHYXA7XG4gICAgICAgIHZhciBib3R0b21JZGVhbFdpZHRoID0gdW5pdEdhcDsgICAgICAgIFxuICAgICAgICB2YXIgcmlnaHRNYXhXaWR0aCA9IDA7XG4gICAgICAgIHZhciBsZWZ0TWF4V2lkdGggPTA7XG4gICAgICAgIHN0YXRlc2FuZGluZm9zLmZvckVhY2goZnVuY3Rpb24oYm94KXtcbiAgICAgICAgICBpZihib3guYW5jaG9yU2lkZSA9PT0gXCJ0b3BcIil7XG4gICAgICAgICAgICB0b3BJZGVhbFdpZHRoICs9IGJveC5iYm94LncgKyB1bml0R2FwO1xuXG4gICAgICAgICAgfWVsc2UgaWYoYm94LmFuY2hvclNpZGUgPT09IFwiYm90dG9tXCIpe1xuICAgICAgICAgICAgYm90dG9tSWRlYWxXaWR0aCArPSBib3guYmJveC53ICsgdW5pdEdhcDtcblxuICAgICAgICAgIH1lbHNlIGlmKGJveC5hbmNob3JTaWRlID09PSBcInJpZ2h0XCIpXG4gICAgICAgICAgeyAgICAgICAgICAgXG4gICAgICAgICAgICByaWdodE1heFdpZHRoID0gKGJveC5iYm94LncgPiByaWdodE1heFdpZHRoKSA/IGJveC5iYm94LncgOiByaWdodE1heFdpZHRoO1xuICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBsZWZ0TWF4V2lkdGggPSAoYm94LmJib3gudyA+IGxlZnRNYXhXaWR0aCkgPyBib3guYmJveC53IDogbGVmdE1heFdpZHRoO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7ICAgICAgXG5cbiAgICAgICAgdmFyIG1pZGRsZVdpZHRoID0gbGFiZWxXaWR0aCArIDIgKiBNYXRoLm1heChyaWdodE1heFdpZHRoLzIsIGxlZnRNYXhXaWR0aC8yKTtcblxuICAgICAgICB2YXIgY29tcG91bmRXaWR0aCA9IDA7XG4gICAgICAgIGlmKG5vZGUuaXNQYXJlbnQoKSl7XG4gICAgICAgICAgY29tcG91bmRXaWR0aCA9IG5vZGUuY2hpbGRyZW4oKS5ib3VuZGluZ0JveCgpLnc7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIE1hdGgubWF4KG1pZGRsZVdpZHRoLCBkZWZhdWx0V2lkdGgvMiwgdG9wSWRlYWxXaWR0aCwgYm90dG9tSWRlYWxXaWR0aCwgY29tcG91bmRXaWR0aCk7XG4gICAgfVxuXG4gICAgZWxlbWVudFV0aWxpdGllcy5jYWxjdWxhdGVNaW5IZWlnaHQgPSBmdW5jdGlvbihub2RlKSB7XG4gICAgICAgIHZhciBzdGF0ZXNhbmRpbmZvcyA9IG5vZGUuZGF0YSgnc3RhdGVzYW5kaW5mb3MnKTtcbiAgICAgICAgdmFyIG1hcmdpbiA9IDc7XG4gICAgICAgIHZhciB1bml0R2FwID0gNTtcbiAgICAgICAgdmFyIGRlZmF1bHRIZWlnaHQgPSB0aGlzLmdldERlZmF1bHRQcm9wZXJ0aWVzKG5vZGUuZGF0YSgnY2xhc3MnKSkuaGVpZ2h0O1xuICAgICAgICB2YXIgbGVmdEluZm9Cb3hlcyA9IHN0YXRlc2FuZGluZm9zLmZpbHRlcihib3ggPT4gYm94LmFuY2hvclNpZGUgPT09IFwibGVmdFwiKTsgICAgICAgIFxuICAgICAgICB2YXIgbGVmdEhlaWdodCA9IHVuaXRHYXA7IFxuICAgICAgICBsZWZ0SW5mb0JveGVzLmZvckVhY2goZnVuY3Rpb24oYm94KXtcbiAgICAgICAgICAgIGxlZnRIZWlnaHQgKz0gYm94LmJib3guaCArIHVuaXRHYXA7XG4gICAgICAgICAgIFxuICAgICAgICB9KTsgICAgICBcbiAgICAgICAgdmFyIHJpZ2h0SW5mb0JveGVzID0gc3RhdGVzYW5kaW5mb3MuZmlsdGVyKGJveCA9PiBib3guYW5jaG9yU2lkZSA9PT0gXCJyaWdodFwiKTtcbiAgICAgICAgdmFyIHJpZ2h0SGVpZ2h0ID0gdW5pdEdhcDsgICAgICAgIFxuICAgICAgICByaWdodEluZm9Cb3hlcy5mb3JFYWNoKGZ1bmN0aW9uKGJveCl7XG4gICAgICAgICAgICByaWdodEhlaWdodCArPSBib3guYmJveC5oICsgdW5pdEdhcDsgICAgICAgICAgIFxuICAgICAgICB9KTsgICAgICAgXG4gICAgICAgIHZhciBzdHlsZSA9IG5vZGUuc3R5bGUoKTtcbiAgICAgICAgdmFyIGxhYmVsVGV4dCA9ICgoc3R5bGVbJ2xhYmVsJ10pLnNwbGl0KFwiXFxuXCIpKS5maWx0ZXIoIHRleHQgPT4gdGV4dCAhPT0gJycpO1xuICAgICAgICB2YXIgZm9udFNpemUgPSBwYXJzZUZsb2F0KHN0eWxlWydmb250LXNpemUnXS5zdWJzdHJpbmcoMCwgc3R5bGVbJ2ZvbnQtc2l6ZSddLmxlbmd0aCAtIDIpKTtcbiAgICAgICAgdmFyIHRvdGFsSGVpZ2h0ID0gbGFiZWxUZXh0Lmxlbmd0aCAqIGZvbnRTaXplICsgMiAqIG1hcmdpbjtcblxuICAgICAgICBcblxuICAgICAgICB2YXIgY29tcG91bmRIZWlnaHQgPSAwO1xuICAgICAgICBpZihub2RlLmlzUGFyZW50KCkpe1xuICAgICAgICAgIGNvbXBvdW5kSGVpZ2h0ID0gbm9kZS5jaGlsZHJlbigpLmJvdW5kaW5nQm94KCkuaDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gTWF0aC5tYXgodG90YWxIZWlnaHQsIGRlZmF1bHRIZWlnaHQvMiwgbGVmdEhlaWdodCwgcmlnaHRIZWlnaHQsIGNvbXBvdW5kSGVpZ2h0KTtcbiAgICB9XG5cbiAgICBlbGVtZW50VXRpbGl0aWVzLmlzUmVzaXplZFRvQ29udGVudCA9IGZ1bmN0aW9uIChub2RlKSB7XG4gICAgICBpZighbm9kZSB8fCAhbm9kZS5pc05vZGUoKSB8fCAhbm9kZS5kYXRhKCdiYm94Jykpe1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIC8vdmFyIHcgPSBub2RlLmRhdGEoJ2Jib3gnKS53O1xuICAgICAgLy92YXIgaCA9IG5vZGUuZGF0YSgnYmJveCcpLmg7XG4gICAgICB2YXIgdyA9IG5vZGUud2lkdGgoKTtcbiAgICAgIHZhciBoID0gbm9kZS5oZWlnaHQoKTtcblxuICAgICAgdmFyIG1pblcgPSBlbGVtZW50VXRpbGl0aWVzLmNhbGN1bGF0ZU1pbldpZHRoKG5vZGUpO1xuICAgICAgdmFyIG1pbkggPSBlbGVtZW50VXRpbGl0aWVzLmNhbGN1bGF0ZU1pbkhlaWdodChub2RlKTtcblxuICAgICAgaWYodyA9PT0gbWluVyAmJiBoID09PSBtaW5IKVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIGVsc2VcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIFNlY3Rpb24gRW5kXG4gICAgLy8gQWRkIHJlbW92ZSB1dGlsaXRpZXNcblxuICAgIC8vIFJlbG9jYXRlcyBzdGF0ZSBhbmQgaW5mbyBib3hlcy4gVGhpcyBmdW5jdGlvbiBpcyBleHBlY3RlZCB0byBiZSBjYWxsZWQgYWZ0ZXIgYWRkL3JlbW92ZSBzdGF0ZSBhbmQgaW5mbyBib3hlc1xuICAgIGVsZW1lbnRVdGlsaXRpZXMucmVsb2NhdGVTdGF0ZUFuZEluZm9zID0gZnVuY3Rpb24gKGVsZSkge1xuICAgICAgdmFyIHN0YXRlQW5kSW5mb3MgPSAoZWxlLmlzTm9kZSAmJiBlbGUuaXNOb2RlKCkpID8gZWxlLmRhdGEoJ3N0YXRlc2FuZGluZm9zJykgOiBlbGU7XG4gICAgICB2YXIgbGVuZ3RoID0gc3RhdGVBbmRJbmZvcy5sZW5ndGg7XG4gICAgICBpZiAobGVuZ3RoID09IDApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgZWxzZSBpZiAobGVuZ3RoID09IDEpIHtcbiAgICAgICAgc3RhdGVBbmRJbmZvc1swXS5iYm94LnggPSAwO1xuICAgICAgICBzdGF0ZUFuZEluZm9zWzBdLmJib3gueSA9IC01MDtcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKGxlbmd0aCA9PSAyKSB7XG4gICAgICAgIHN0YXRlQW5kSW5mb3NbMF0uYmJveC54ID0gMDtcbiAgICAgICAgc3RhdGVBbmRJbmZvc1swXS5iYm94LnkgPSAtNTA7XG5cbiAgICAgICAgc3RhdGVBbmRJbmZvc1sxXS5iYm94LnggPSAwO1xuICAgICAgICBzdGF0ZUFuZEluZm9zWzFdLmJib3gueSA9IDUwO1xuICAgICAgfVxuICAgICAgZWxzZSBpZiAobGVuZ3RoID09IDMpIHtcbiAgICAgICAgc3RhdGVBbmRJbmZvc1swXS5iYm94LnggPSAtMjU7XG4gICAgICAgIHN0YXRlQW5kSW5mb3NbMF0uYmJveC55ID0gLTUwO1xuXG4gICAgICAgIHN0YXRlQW5kSW5mb3NbMV0uYmJveC54ID0gMjU7XG4gICAgICAgIHN0YXRlQW5kSW5mb3NbMV0uYmJveC55ID0gLTUwO1xuXG4gICAgICAgIHN0YXRlQW5kSW5mb3NbMl0uYmJveC54ID0gMDtcbiAgICAgICAgc3RhdGVBbmRJbmZvc1syXS5iYm94LnkgPSA1MDtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICBzdGF0ZUFuZEluZm9zWzBdLmJib3gueCA9IC0yNTtcbiAgICAgICAgc3RhdGVBbmRJbmZvc1swXS5iYm94LnkgPSAtNTA7XG5cbiAgICAgICAgc3RhdGVBbmRJbmZvc1sxXS5iYm94LnggPSAyNTtcbiAgICAgICAgc3RhdGVBbmRJbmZvc1sxXS5iYm94LnkgPSAtNTA7XG5cbiAgICAgICAgc3RhdGVBbmRJbmZvc1syXS5iYm94LnggPSAtMjU7XG4gICAgICAgIHN0YXRlQW5kSW5mb3NbMl0uYmJveC55ID0gNTA7XG5cbiAgICAgICAgc3RhdGVBbmRJbmZvc1szXS5iYm94LnggPSAyNTtcbiAgICAgICAgc3RhdGVBbmRJbmZvc1szXS5iYm94LnkgPSA1MDtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgLy8gQ2hhbmdlIHN0YXRlIHZhbHVlIG9yIHVuaXQgb2YgaW5mb3JtYXRpb24gYm94IG9mIGdpdmVuIG5vZGVzIHdpdGggZ2l2ZW4gaW5kZXguXG4gICAgLy8gVHlwZSBwYXJhbWV0ZXIgaW5kaWNhdGVzIHdoZXRoZXIgdG8gY2hhbmdlIHZhbHVlIG9yIHZhcmlhYmxlLCBpdCBpcyB2YWxpZCBpZiB0aGUgYm94IGF0IHRoZSBnaXZlbiBpbmRleCBpcyBhIHN0YXRlIHZhcmlhYmxlLlxuICAgIC8vIFZhbHVlIHBhcmFtZXRlciBpcyB0aGUgbmV3IHZhbHVlIHRvIHNldC5cbiAgICAvLyBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBvbGQgdmFsdWUgb2YgdGhlIGNoYW5nZWQgZGF0YSAoV2UgYXNzdW1lIHRoYXQgdGhlIG9sZCB2YWx1ZSBvZiB0aGUgY2hhbmdlZCBkYXRhIHdhcyB0aGUgc2FtZSBmb3IgYWxsIG5vZGVzKS5cbiAgICAvLyBFYWNoIGNoYXJhY3RlciBhc3N1bWVkIHRvIG9jY3VweSA4IHVuaXRcbiAgICAvLyBFYWNoIGluZm9ib3ggY2FuIGhhdmUgYXQgbW9zdCAzMiB1bml0cyBvZiB3aWR0aFxuICAgIGVsZW1lbnRVdGlsaXRpZXMuY2hhbmdlU3RhdGVPckluZm9Cb3ggPSBmdW5jdGlvbiAobm9kZXMsIGluZGV4LCB2YWx1ZSwgdHlwZSkge1xuICAgICAgdmFyIHJlc3VsdDtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIG5vZGUgPSBub2Rlc1tpXTtcbiAgICAgICAgdmFyIHNiZ25jbGFzcyA9IG5vZGUuZGF0YSgnY2xhc3MnKTtcbiAgICAgICAgdmFyIHN0YXRlQW5kSW5mb3MgPSBub2RlLmRhdGEoJ3N0YXRlc2FuZGluZm9zJyk7XG4gICAgICAgIHZhciBib3ggPSBzdGF0ZUFuZEluZm9zW2luZGV4XTtcbiAgICAgICAgdmFyIG9sZExlbmd0aCA9IGJveC5iYm94Lnc7XG4gICAgICAgIHZhciBuZXdMZW5ndGggPSAwO1xuXG4gICAgICAgIHZhciBjb250ZW50ID0gJyc7XG4gICAgICAgIGlmIChib3guY2xhenogPT0gXCJzdGF0ZSB2YXJpYWJsZVwiKSB7XG4gICAgICAgICAgaWYgKCFyZXN1bHQpIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IGJveC5zdGF0ZVt0eXBlXTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBib3guc3RhdGVbdHlwZV0gPSB2YWx1ZTtcbiAgICAgICAgICBpZiAoYm94LnN0YXRlW1widmFsdWVcIl0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY29udGVudCArPSBib3guc3RhdGVbXCJ2YWx1ZVwiXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGJveC5zdGF0ZVtcInZhcmlhYmxlXCJdICE9PSB1bmRlZmluZWQgJiYgYm94LnN0YXRlW1widmFyaWFibGVcIl0ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY29udGVudCArPSBib3guc3RhdGVbXCJ2YXJpYWJsZVwiXSArIFwiQFwiO1xuICAgICAgICAgIH1cblxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGJveC5jbGF6eiA9PSBcInVuaXQgb2YgaW5mb3JtYXRpb25cIikge1xuICAgICAgICAgIGlmICghcmVzdWx0KSB7XG4gICAgICAgICAgICByZXN1bHQgPSBib3gubGFiZWwudGV4dDtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29udGVudCArPSB2YWx1ZTtcbiAgICAgICAgICBib3gubGFiZWwudGV4dCA9IHZhbHVlO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIG1pbiA9ICggc2JnbmNsYXNzID09PSAnU0lGIG1hY3JvbW9sZWN1bGUnIHx8IHNiZ25jbGFzcyA9PT0gJ1NJRiBzaW1wbGUgY2hlbWljYWwnICkgPyAxNSA6IDEyO1xuICAgICAgICB2YXIgZm9udEZhbWlseSA9IGJveC5zdHlsZVsgJ2ZvbnQtZmFtaWx5JyBdO1xuICAgICAgICB2YXIgZm9udFNpemUgPSBib3guc3R5bGVbICdmb250LXNpemUnIF07XG4gICAgICAgIHZhciBib3JkZXJXaWR0aCA9IGJveC5zdHlsZVsgJ2JvcmRlci13aWR0aCcgXTtcbiAgICAgICAgdmFyIG9wdHMgPSB7XG4gICAgICAgICAgbWluLFxuICAgICAgICAgIG1heDogNDgsXG4gICAgICAgICAgbWFyZ2luOiBib3JkZXJXaWR0aCAvIDIgKyAwLjVcbiAgICAgICAgfTtcbiAgICAgICAgdmFyIHByZXZpb3VzV2lkdGggPSBib3guYmJveC53O1xuICAgICAgICBib3guYmJveC53ID0gZWxlbWVudFV0aWxpdGllcy5nZXRXaWR0aEJ5Q29udGVudCggY29udGVudCwgZm9udEZhbWlseSwgZm9udFNpemUsIG9wdHMgKTtcblxuICAgICAgICBpZihib3guYW5jaG9yU2lkZSA9PSBcInRvcFwiIHx8IGJveC5hbmNob3JTaWRlID09IFwiYm90dG9tXCIpe1xuICAgICAgICAgIHZhciB1bml0TGF5b3V0ID0gbm9kZS5kYXRhKClbXCJhdXh1bml0bGF5b3V0c1wiXVtib3guYW5jaG9yU2lkZV07XG4gICAgICAgICAgaWYodW5pdExheW91dC51bml0c1t1bml0TGF5b3V0LnVuaXRzLmxlbmd0aC0xXS5pZCA9PSBib3guaWQpe1xuICAgICAgICAgICAgIFxuICAgICAgICAgICAgdmFyIGJvcmRlcldpZHRoID0gbm9kZS5kYXRhKClbJ2JvcmRlci13aWR0aCddO1xuICAgICAgICAgICAgdmFyIHNoaWZ0QW1vdW50ID0gKCgoYm94LmJib3gudyAtIHByZXZpb3VzV2lkdGgpIC8gMikgKiAxMDAgKS8gKG5vZGUub3V0ZXJXaWR0aCgpIC0gYm9yZGVyV2lkdGgpO1xuICAgICAgICAgICBcbiAgICAgICAgICAgIGlmKHNoaWZ0QW1vdW50ID49IDApe1xuICAgICAgICAgICAgXG4gICAgICAgICAgICAgIGlmKGJveC5iYm94LnggKyBzaGlmdEFtb3VudCA8PSAxMDApe1xuICAgICAgICAgICAgICAgIGJveC5iYm94LnggPSBib3guYmJveC54ICsgc2hpZnRBbW91bnQ7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgLyogIGVsc2V7XG4gICAgICAgICAgICAgIHZhciBwcmV2aW91c0luZm9CYm94ID0ge3ggOiAwLCB3OjB9O1xuICAgICAgICAgICAgICBpZih1bml0TGF5b3V0LnVuaXRzLmxlbmd0aCA+IDEpe1xuICAgICAgICAgICAgICAgIHByZXZpb3VzSW5mb0Jib3g9IHVuaXRMYXlvdXQudW5pdHNbdW5pdExheW91dC51bml0cy5sZW5ndGgtMl0uYmJveDsgICAgICBcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIFxuICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgc2JnbnZpekluc3RhbmNlLmNsYXNzZXMuQXV4VW5pdExheW91dC5zZXRJZGVhbEdhcChub2RlLCBib3guYW5jaG9yU2lkZSk7XG4gICAgICAgICAgICAgIHZhciBpZGVhbEdhcCA9IHNiZ252aXpJbnN0YW5jZS5jbGFzc2VzLkF1eFVuaXRMYXlvdXQuZ2V0Q3VycmVudEdhcChib3guYW5jaG9yU2lkZSk7XG4gICAgICAgICAgICAgIHZhciBuZXdQb3NpdGlvbiA9IHByZXZpb3VzSW5mb0Jib3gueCArIChwcmV2aW91c0luZm9CYm94LncvMiArIGlkZWFsR2FwICsgYm94LmJib3gudy8yKSoxMDAgLyAobm9kZS5vdXRlcldpZHRoKCkgLSBib3JkZXJXaWR0aCk7XG4gICAgICAgICAgICAgIGJveC5iYm94LnggPSBuZXdQb3NpdGlvbjtcbiAgICAgICAgICAgICAgXG4gICAgICAgICAgICB9ICovXG4gICAgICAgICAgIFxuICAgICAgICAgICBcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIFxuICAgICAgICAvKiBpZiAoYm94LmFuY2hvclNpZGUgPT09IFwidG9wXCIgfHwgYm94LmFuY2hvclNpZGUgPT09IFwiYm90dG9tXCIpIHtcbiAgICAgICAgICBib3guYmJveC54ICs9IChib3guYmJveC53IC0gb2xkTGVuZ3RoKSAvIDI7XG4gICAgICAgICAgdmFyIHVuaXRzID0gKG5vZGUuZGF0YSgnYXV4dW5pdGxheW91dHMnKVtib3guYW5jaG9yU2lkZV0pLnVuaXRzO1xuICAgICAgICAgIHZhciBzaGlmdEluZGV4ID0gMDtcbiAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHVuaXRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZih1bml0c1tpXSA9PT0gYm94KXtcbiAgICAgICAgICAgICAgc2hpZnRJbmRleCA9IGk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBmb3IgKHZhciBqID0gc2hpZnRJbmRleCsxOyBqIDwgdW5pdHMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgICAgdW5pdHNbal0uYmJveC54ICs9IChib3guYmJveC53IC0gb2xkTGVuZ3RoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gKi9cblxuICAgICAgfVxuXG4gICAgICAvL1RPRE8gZmluZCBhIHdheSB0byBlbGltYXRlIHRoaXMgcmVkdW5kYW5jeSB0byB1cGRhdGUgaW5mby1ib3ggcG9zaXRpb25zXG4gICAgICBub2RlLmRhdGEoJ2JvcmRlci13aWR0aCcsIG5vZGUuZGF0YSgnYm9yZGVyLXdpZHRoJykpO1xuXG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH07XG5cbiAgICAvLyBBZGQgYSBuZXcgc3RhdGUgb3IgaW5mbyBib3ggdG8gZ2l2ZW4gbm9kZXMuXG4gICAgLy8gVGhlIGJveCBpcyByZXByZXNlbnRlZCBieSB0aGUgcGFyYW1ldGVyIG9iai5cbiAgICAvLyBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUganVzdCBhZGRlZCBib3guXG4gICAgZWxlbWVudFV0aWxpdGllcy5hZGRTdGF0ZU9ySW5mb0JveCA9IGZ1bmN0aW9uIChub2Rlcywgb2JqKSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBub2RlID0gbm9kZXNbaV07XG4gICAgICAgIHZhciBsb2NhdGlvbk9iajtcblxuICAgICAgICB2YXIgZGVmYXVsdFByb3BzID0gZWxlbWVudFV0aWxpdGllcy5nZXREZWZhdWx0UHJvcGVydGllcyggbm9kZS5kYXRhKCdjbGFzcycpICk7XG4gICAgICAgIHZhciBpbmZvYm94UHJvcHMgPSBkZWZhdWx0UHJvcHNbIG9iai5jbGF6eiBdO1xuICAgICAgICB2YXIgYmJveCA9IG9iai5iYm94IHx8IHsgdzogaW5mb2JveFByb3BzLndpZHRoLCBoOiBpbmZvYm94UHJvcHMuaGVpZ2h0IH07ICAgICAgICBcbiAgICAgICAgdmFyIHN0eWxlID0gZWxlbWVudFV0aWxpdGllcy5nZXREZWZhdWx0SW5mb2JveFN0eWxlKCBub2RlLmRhdGEoJ2NsYXNzJyksIG9iai5jbGF6eiApO1xuICAgICAgICBpZihvYmouc3R5bGUpe1xuICAgICAgICAgICQuZXh0ZW5kKCBzdHlsZSwgb2JqLnN0eWxlICk7XG4gICAgICAgIH1cbiAgICAgICBcbiAgICAgICAgaWYob2JqLmNsYXp6ID09IFwidW5pdCBvZiBpbmZvcm1hdGlvblwiKSB7XG4gICAgICAgICAgbG9jYXRpb25PYmogPSBzYmdudml6SW5zdGFuY2UuY2xhc3Nlcy5Vbml0T2ZJbmZvcm1hdGlvbi5jcmVhdGUobm9kZSwgY3ksIG9iai5sYWJlbC50ZXh0LCBiYm94LCBvYmoubG9jYXRpb24sIG9iai5wb3NpdGlvbiwgc3R5bGUsIG9iai5pbmRleCwgb2JqLmlkKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChvYmouY2xhenogPT0gXCJzdGF0ZSB2YXJpYWJsZVwiKSB7XG4gICAgICAgICAgbG9jYXRpb25PYmogPSBzYmdudml6SW5zdGFuY2UuY2xhc3Nlcy5TdGF0ZVZhcmlhYmxlLmNyZWF0ZShub2RlLCBjeSwgb2JqLnN0YXRlLnZhbHVlLCBvYmouc3RhdGUudmFyaWFibGUsIGJib3gsIG9iai5sb2NhdGlvbiwgb2JqLnBvc2l0aW9uLCBzdHlsZSwgb2JqLmluZGV4LCBvYmouaWQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbG9jYXRpb25PYmo7XG4gICAgfTtcblxuICAgIC8vIFJlbW92ZSB0aGUgc3RhdGUgb3IgaW5mbyBib3hlcyBvZiB0aGUgZ2l2ZW4gbm9kZXMgYXQgZ2l2ZW4gaW5kZXguXG4gICAgLy8gUmV0dXJucyB0aGUgcmVtb3ZlZCBib3guXG4gICAgZWxlbWVudFV0aWxpdGllcy5yZW1vdmVTdGF0ZU9ySW5mb0JveCA9IGZ1bmN0aW9uIChub2RlcywgbG9jYXRpb25PYmopIHtcbiAgICAgIHZhciBvYmo7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBub2RlID0gbm9kZXNbaV07XG4gICAgICAgIHZhciBzdGF0ZUFuZEluZm9zID0gbm9kZS5kYXRhKCdzdGF0ZXNhbmRpbmZvcycpO1xuICAgICAgICB2YXIgdW5pdCA9IHN0YXRlQW5kSW5mb3NbbG9jYXRpb25PYmouaW5kZXhdO1xuXG4gICAgICAgIHZhciB1bml0Q2xhc3MgPSBzYmdudml6SW5zdGFuY2UuY2xhc3Nlcy5nZXRBdXhVbml0Q2xhc3ModW5pdCk7XG5cbiAgICAgICAgb2JqID0gdW5pdENsYXNzLnJlbW92ZSh1bml0LCBjeSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBvYmo7XG4gICAgfTtcblxuXG4gICAgLy9UaWxlcyBpbmZvcm1hdGlvbnMgYm94ZXMgZm9yIGdpdmVuIGFuY2hvclNpZGVzXG4gICAgZWxlbWVudFV0aWxpdGllcy5maXRVbml0cyA9IGZ1bmN0aW9uIChub2RlLCBsb2NhdGlvbnMpIHtcbiAgICAgIHZhciBvYmogPSBbXTtcbiAgICAgIG5vZGUuZGF0YSgnc3RhdGVzYW5kaW5mb3MnKS5mb3JFYWNoKCBmdW5jdGlvbiAoZWxlKSB7XG4gICAgICAgIG9iai5wdXNoKHtcbiAgICAgICAgICB4OiBlbGUuYmJveC54LFxuICAgICAgICAgIHk6IGVsZS5iYm94LnksXG4gICAgICAgICAgYW5jaG9yU2lkZTogZWxlLmFuY2hvclNpZGVcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICAgIHNiZ252aXpJbnN0YW5jZS5jbGFzc2VzLkF1eFVuaXRMYXlvdXQuZml0VW5pdHMobm9kZSwgY3ksIGxvY2F0aW9ucyk7XG4gICAgICByZXR1cm4gb2JqO1xuICAgIH07XG5cbiAgICAvL0NoZWNrIHdoaWNoIGFuY2hvcnNpZGVzIGZpdHNcbiAgICBlbGVtZW50VXRpbGl0aWVzLmNoZWNrRml0ID0gZnVuY3Rpb24gKG5vZGUsIGxvY2F0aW9uKSB7IC8vaWYgbm8gbG9jYXRpb24gZ2l2ZW4sIGl0IGNoZWNrcyBhbGwgcG9zc2libGUgbG9jYXRpb25zXG4gICAgICByZXR1cm4gc2JnbnZpekluc3RhbmNlLmNsYXNzZXMuQXV4VW5pdExheW91dC5jaGVja0ZpdChub2RlLCBjeSwgbG9jYXRpb24pO1xuICAgIH07XG5cbiAgICAvL01vZGlmeSBhcnJheSBvZiBhdXggbGF5b3V0IHVuaXRzXG4gICAgZWxlbWVudFV0aWxpdGllcy5tb2RpZnlVbml0cyA9IGZ1bmN0aW9uIChub2RlLCB1bml0LCBhbmNob3JTaWRlKSB7XG4gICAgICBzYmdudml6SW5zdGFuY2UuY2xhc3Nlcy5BdXhVbml0TGF5b3V0Lm1vZGlmeVVuaXRzKG5vZGUsIHVuaXQsIGFuY2hvclNpZGUsIGN5KTtcbiAgICB9O1xuXG4gICAgLy8gU2V0IG11bHRpbWVyIHN0YXR1cyBvZiB0aGUgZ2l2ZW4gbm9kZXMgdG8gdGhlIGdpdmVuIHN0YXR1cy5cbiAgICBlbGVtZW50VXRpbGl0aWVzLnNldE11bHRpbWVyU3RhdHVzID0gZnVuY3Rpb24gKG5vZGVzLCBzdGF0dXMpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIG5vZGUgPSBub2Rlc1tpXTtcbiAgICAgICAgdmFyIHNiZ25jbGFzcyA9IG5vZGUuZGF0YSgnY2xhc3MnKTtcbiAgICAgICAgdmFyIGlzTXVsdGltZXIgPSBub2RlLmRhdGEoJ2NsYXNzJykuZW5kc1dpdGgoJyBtdWx0aW1lcicpO1xuXG4gICAgICAgIGlmIChzdGF0dXMpIHsgLy8gTWFrZSBtdWx0aW1lciBzdGF0dXMgdHJ1ZVxuICAgICAgICAgIGlmICghaXNNdWx0aW1lcikge1xuICAgICAgICAgICAgbm9kZS5kYXRhKCdjbGFzcycsIHNiZ25jbGFzcyArICcgbXVsdGltZXInKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7IC8vIE1ha2UgbXVsdGltZXIgc3RhdHVzIGZhbHNlXG4gICAgICAgICAgaWYgKGlzTXVsdGltZXIpIHtcbiAgICAgICAgICAgIG5vZGUuZGF0YSgnY2xhc3MnLCBzYmduY2xhc3MucmVwbGFjZSgnIG11bHRpbWVyJywgJycpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuXG4gICAgLy8gQ2hhbmdlIGZvbnQgcHJvcGVydGllcyBvZiB0aGUgZ2l2ZW4gZWxlbWVudHMgd2l0aCBnaXZlbiBmb250IGRhdGFcbiAgICBlbGVtZW50VXRpbGl0aWVzLmNoYW5nZUZvbnRQcm9wZXJ0aWVzID0gZnVuY3Rpb24gKGVsZXMsIGRhdGEpIHtcbiAgICAgIGZvciAodmFyIHByb3AgaW4gZGF0YSkge1xuICAgICAgICBlbGVzLmRhdGEocHJvcCwgZGF0YVtwcm9wXSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIC8vIFRoaXMgZnVuY3Rpb24gZ2V0cyBhbiBlZGdlLCBhbmQgZW5kcyBvZiB0aGF0IGVkZ2UgKE9wdGlvbmFsbHkgaXQgbWF5IHRha2UganVzdCB0aGUgY2xhc3NlcyBvZiB0aGUgZWRnZSBhcyB3ZWxsKSBhcyBwYXJhbWV0ZXJzLlxuICAgIC8vIEl0IG1heSByZXR1cm4gJ3ZhbGlkJyAodGhhdCBlbmRzIGlzIHZhbGlkIGZvciB0aGF0IGVkZ2UpLCAncmV2ZXJzZScgKHRoYXQgZW5kcyBpcyBub3QgdmFsaWQgZm9yIHRoYXQgZWRnZSBidXQgdGhleSB3b3VsZCBiZSB2YWxpZFxuICAgIC8vIGlmIHlvdSByZXZlcnNlIHRoZSBzb3VyY2UgYW5kIHRhcmdldCksICdpbnZhbGlkJyAodGhhdCBlbmRzIGFyZSB0b3RhbGx5IGludmFsaWQgZm9yIHRoYXQgZWRnZSkuXG4gICAgZWxlbWVudFV0aWxpdGllcy52YWxpZGF0ZUFycm93RW5kcyA9IGZ1bmN0aW9uIChlZGdlLCBzb3VyY2UsIHRhcmdldCwgaXNSZXBsYWNlbWVudCkge1xuICAgICAgLy8gaWYgbWFwIHR5cGUgaXMgVW5rbm93biAtLSBubyBydWxlcyBhcHBsaWVkXG4gICAgICBpZiAoZWxlbWVudFV0aWxpdGllcy5nZXRNYXBUeXBlKCkgPT0gXCJIeWJyaWRBbnlcIiB8fCBlbGVtZW50VXRpbGl0aWVzLmdldE1hcFR5cGUoKSA9PSBcIkh5YnJpZFNiZ25cIiB8fCAhZWxlbWVudFV0aWxpdGllcy5nZXRNYXBUeXBlKCkpXG4gICAgICAgIHJldHVybiBcInZhbGlkXCI7XG5cbiAgICAgIHZhciBlZGdlY2xhc3MgPSB0eXBlb2YgZWRnZSA9PT0gJ3N0cmluZycgPyBlZGdlIDogZWRnZS5kYXRhKCdjbGFzcycpO1xuICAgICAgdmFyIHNvdXJjZWNsYXNzID0gc291cmNlLmRhdGEoJ2NsYXNzJyk7XG4gICAgICB2YXIgdGFyZ2V0Y2xhc3MgPSB0YXJnZXQuZGF0YSgnY2xhc3MnKTtcbiAgICAgIHZhciBtYXBUeXBlID0gZWxlbWVudFV0aWxpdGllcy5nZXRNYXBUeXBlKCk7XG4gICAgICB2YXIgZWRnZUNvbnN0cmFpbnRzID0gZWxlbWVudFV0aWxpdGllc1ttYXBUeXBlXS5jb25uZWN0aXZpdHlDb25zdHJhaW50c1tlZGdlY2xhc3NdO1xuXG4gICAgICBpZiAobWFwVHlwZSA9PSBcIkFGXCIpe1xuICAgICAgICBpZiAoc291cmNlY2xhc3Muc3RhcnRzV2l0aChcIkJBXCIpKSAvLyB3ZSBoYXZlIHNlcGFyYXRlIGNsYXNzZXMgZm9yIGVhY2ggYmlvbG9naWNhbCBhY3Rpdml0eVxuICAgICAgICAgIHNvdXJjZWNsYXNzID0gXCJiaW9sb2dpY2FsIGFjdGl2aXR5XCI7IC8vIGJ1dCBzYW1lIHJ1bGUgYXBwbGllcyB0byBhbGwgb2YgdGhlbVxuXG4gICAgICAgIGlmICh0YXJnZXRjbGFzcy5zdGFydHNXaXRoKFwiQkFcIikpIC8vIHdlIGhhdmUgc2VwYXJhdGUgY2xhc3NlcyBmb3IgZWFjaCBiaW9sb2dpY2FsIGFjdGl2aXR5XG4gICAgICAgICAgdGFyZ2V0Y2xhc3MgPSBcImJpb2xvZ2ljYWwgYWN0aXZpdHlcIjsgLy8gYnV0IHNhbWUgcnVsZSBhcHBsaWVzIHRvIGFsbCBvZiB0aGVtXG4gICAgICB9XG4gICAgICBlbHNlIGlmIChtYXBUeXBlID09IFwiUERcIil7XG4gICAgICAgIHNvdXJjZWNsYXNzID0gc291cmNlY2xhc3MucmVwbGFjZSgvXFxzKm11bHRpbWVyJC8sICcnKTtcbiAgICAgICAgdGFyZ2V0Y2xhc3MgPSB0YXJnZXRjbGFzcy5yZXBsYWNlKC9cXHMqbXVsdGltZXIkLywgJycpO1xuICAgICAgfVxuXG4gICAgICAvLyBnaXZlbiBhIG5vZGUsIGFjdGluZyBhcyBzb3VyY2Ugb3IgdGFyZ2V0LCByZXR1cm5zIGJvb2xlYW4gd2V0aGVyIG9yIG5vdCBpdCBoYXMgdG9vIG1hbnkgZWRnZXMgYWxyZWFkeVxuICAgICAgZnVuY3Rpb24gaGFzVG9vTWFueUVkZ2VzKG5vZGUsIHNvdXJjZU9yVGFyZ2V0KSB7XG4gICAgICAgIHZhciBub2RlY2xhc3MgPSBub2RlLmRhdGEoJ2NsYXNzJyk7XG4gICAgICAgIG5vZGVjbGFzcyA9IG5vZGVjbGFzcy5yZXBsYWNlKC9cXHMqbXVsdGltZXIkLywgJycpO1xuICAgICAgICBpZiAobm9kZWNsYXNzLnN0YXJ0c1dpdGgoXCJCQVwiKSlcbiAgICAgICAgICBub2RlY2xhc3MgPSBcImJpb2xvZ2ljYWwgYWN0aXZpdHlcIjtcblxuICAgICAgICAvKlxuICAgICAgICAgIE9uIHRoZSBsb2dpYyBiZWxvdzpcblxuICAgICAgICAgIEN1cnJlbnQgZWRnZSBjb3VudCAoaW5jb21pbmcgb3Igb3V0Z29pbmcpIG9mIG5vZGVzIHNob3VsZCBiZSBzdHJpY3RseSBsZXNzIFxuICAgICAgICAgIHRoYW4gdGhlIG1heGltdW0gYWxsb3dlZCBpZiB3ZSBhcmUgYWRkaW5nIGFuIGVkZ2UgdG8gdGhlIG5vZGUuIFRoaXMgd2F5XG4gICAgICAgICAgaXQgd2lsbCBuZXZlciBleGNlZWQgdGhlIG1heCBjb3VudC5cbiAgICAgICAgICBcbiAgICAgICAgICBFZGdlcyBjYW4gYmUgYWRkZWQgaW4gdHdvIGRpZmZlcmVudCB3YXlzLiBFaXRoZXIgdGhleSBhcmUgYWRkZWQgZGlyZWN0bHkgb3JcbiAgICAgICAgICB0aGV5IGFyZSBhZGRlZCBieSBiZWluZyByZXBsYWNlZCBmcm9tIGFub3RoZXIgbm9kZSwgaS5lIGRpc2Nvbm5lY3RlZCBmcm9tXG4gICAgICAgICAgb25lIGFuZCBjb25uZWN0ZWQgdG8gYW5vdGhlci5cblxuICAgICAgICAgIFdlIGNhbiBkZXRlY3QgaWYgdGhlIGVkZ2UgYmVpbmcgYWRkZWQgaXMgYWRkZWQgZnJvbSBhIHJlcGxhY2VtZW50IGJ5IGNoZWNraW5nXG4gICAgICAgICAgd2hldGhlciB0aGUgc291cmNlIHN0YXllZCB0aGUgc2FtZSB3aGVuIGNoZWNraW5nIGVkZ2UgY291bnRzIG9mIHRoZSBzb3VyY2Ugbm9kZSxcbiAgICAgICAgICBhbmQgd2hldGhlciB0aGUgdGFyZ2V0IHN0YXllZCB0aGUgc2FtZSB3aGVuIGNoZWNraW5nIGVkZ2UgY291bnRzIG9mIHRoZVxuICAgICAgICAgIHRhcmdldCBub2RlLlxuXG4gICAgICAgICAgQ3VycmVudCBlZGdlIGNvdW50IG9mIG5vZGVzIGNhbiBiZSBhbGxvd2VkIHRvIGJlIGVxdWFsIHRvIHRoZSBtYXhpbXVtIGluIFxuICAgICAgICAgIGNhc2VzIHdoZXJlIGEgcmVwbGFjZW1lbnQgaXMgbWFkZS4gQnV0IHdlIHNob3VsZCBiZSBjYXJlZnVsIHRoYXQgdGhpc1xuICAgICAgICAgIHJlcGxhY2VtZW50IG9wZXJhdGlvbiBpcyBub3QgYWxzbyBhbiBhZGRpdGlvbiBvcGVyYXRpb24gYXMgZGVzY3JpYmVkIGFib3ZlLlxuICAgICAgICAqL1xuXG4gICAgICAgIHZhciB0b3RhbFRvb01hbnkgPSB0cnVlO1xuICAgICAgICB2YXIgZWRnZVRvb01hbnkgPSB0cnVlO1xuICAgICAgICBpZiAoc291cmNlT3JUYXJnZXQgPT0gXCJzb3VyY2VcIikge1xuICAgICAgICAgICAgdmFyIHNhbWVFZGdlQ291bnRPdXQgPSBub2RlLm91dGdvZXJzKCdlZGdlW2NsYXNzPVwiJytlZGdlY2xhc3MrJ1wiXScpLnNpemUoKTtcbiAgICAgICAgICAgIHZhciB0b3RhbEVkZ2VDb3VudE91dCA9IG5vZGUub3V0Z29lcnMoJ2VkZ2UnKS5zaXplKCk7XG4gICAgICAgICAgICB2YXIgbWF4VG90YWwgPSBlZGdlQ29uc3RyYWludHNbbm9kZWNsYXNzXS5hc1NvdXJjZS5tYXhUb3RhbDsgXG4gICAgICAgICAgICB2YXIgbWF4RWRnZSA9IGVkZ2VDb25zdHJhaW50c1tub2RlY2xhc3NdLmFzU291cmNlLm1heEVkZ2U7XG5cbiAgICAgICAgICAgIHZhciBjb21wYXJlU3RyaWN0ID0gIShpc1JlcGxhY2VtZW50ICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGVkZ2Uuc291cmNlKCkgPT09IHNvdXJjZSkpO1xuXG4gICAgICAgICAgICB2YXIgd2l0aGluTGltaXRzID0gIW1heFRvdGFsIHx8IFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbXBhcmVTdHJpY3QgJiYgKHRvdGFsRWRnZUNvdW50T3V0IDwgbWF4VG90YWwpKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCFjb21wYXJlU3RyaWN0ICYmICh0b3RhbEVkZ2VDb3VudE91dCA8PSBtYXhUb3RhbCkpO1xuXG4gICAgICAgICAgICBpZiAod2l0aGluTGltaXRzKSB7XG4gICAgICAgICAgICAgICAgdG90YWxUb29NYW55ID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyB0aGVuIGNoZWNrIGxpbWl0cyBmb3IgdGhpcyBzcGVjaWZpYyBlZGdlIGNsYXNzXG5cbiAgICAgICAgICAgIHdpdGhpbkxpbWl0cyA9ICFtYXhFZGdlIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbXBhcmVTdHJpY3QgJiYgKHNhbWVFZGdlQ291bnRPdXQgPCBtYXhFZGdlKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICghY29tcGFyZVN0cmljdCAmJiAoc2FtZUVkZ2VDb3VudE91dCA8PSBtYXhFZGdlKSkpOyBcblxuICAgICAgICAgICAgaWYgKHdpdGhpbkxpbWl0cykge1xuICAgICAgICAgICAgICAgIGVkZ2VUb29NYW55ID0gZmFsc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGlmIG9ubHkgb25lIG9mIHRoZSBsaW1pdHMgaXMgcmVhY2hlZCB0aGVuIGVkZ2UgaXMgaW52YWxpZFxuICAgICAgICAgICAgcmV0dXJuIHRvdGFsVG9vTWFueSB8fCBlZGdlVG9vTWFueTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHsgLy8gbm9kZSBpcyB1c2VkIGFzIHRhcmdldFxuICAgICAgICAgICAgdmFyIHNhbWVFZGdlQ291bnRJbiA9IG5vZGUuaW5jb21lcnMoJ2VkZ2VbY2xhc3M9XCInK2VkZ2VjbGFzcysnXCJdJykuc2l6ZSgpO1xuICAgICAgICAgICAgdmFyIHRvdGFsRWRnZUNvdW50SW4gPSBub2RlLmluY29tZXJzKCdlZGdlJykuc2l6ZSgpO1xuICAgICAgICAgICAgdmFyIG1heFRvdGFsID0gZWRnZUNvbnN0cmFpbnRzW25vZGVjbGFzc10uYXNUYXJnZXQubWF4VG90YWw7IFxuICAgICAgICAgICAgdmFyIG1heEVkZ2UgPSBlZGdlQ29uc3RyYWludHNbbm9kZWNsYXNzXS5hc1RhcmdldC5tYXhFZGdlO1xuXG4gICAgICAgICAgICB2YXIgY29tcGFyZVN0cmljdCA9ICEoaXNSZXBsYWNlbWVudCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZWRnZS50YXJnZXQoKSA9PT0gdGFyZ2V0KSk7XG5cbiAgICAgICAgICAgIHZhciB3aXRoaW5MaW1pdHMgPSAhbWF4VG90YWwgfHwgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29tcGFyZVN0cmljdCAmJiAodG90YWxFZGdlQ291bnRJbiA8IG1heFRvdGFsKSkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICghY29tcGFyZVN0cmljdCAmJiAodG90YWxFZGdlQ291bnRJbiA8PSBtYXhUb3RhbCkpO1xuXG4gICAgICAgICAgICBpZiAod2l0aGluTGltaXRzKSB7XG4gICAgICAgICAgICAgICAgdG90YWxUb29NYW55ID0gZmFsc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHdpdGhpbkxpbWl0cyA9ICFtYXhFZGdlIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgIChjb21wYXJlU3RyaWN0ICYmIChzYW1lRWRnZUNvdW50SW4gPCBtYXhFZGdlKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAoIWNvbXBhcmVTdHJpY3QgJiYgKHNhbWVFZGdlQ291bnRJbiA8PSBtYXhFZGdlKSkpOyBcblxuICAgICAgICAgICAgaWYgKHdpdGhpbkxpbWl0cykge1xuICAgICAgICAgICAgICAgIGVkZ2VUb29NYW55ID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdG90YWxUb29NYW55IHx8IGVkZ2VUb29NYW55O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGZ1bmN0aW9uIGlzSW5Db21wbGV4KG5vZGUpIHtcbiAgICAgICAgdmFyIHBhcmVudENsYXNzID0gbm9kZS5wYXJlbnQoKS5kYXRhKCdjbGFzcycpO1xuICAgICAgICByZXR1cm4gcGFyZW50Q2xhc3MgJiYgcGFyZW50Q2xhc3Muc3RhcnRzV2l0aCgnY29tcGxleCcpO1xuICAgICAgfVxuXG4gICAgICBpZiAoaXNJbkNvbXBsZXgoc291cmNlKSB8fCBpc0luQ29tcGxleCh0YXJnZXQpKSB7IC8vIHN1YnVuaXRzIG9mIGEgY29tcGxleCBhcmUgbm8gbG9uZ2VyIEVQTnMsIG5vIGNvbm5lY3Rpb24gYWxsb3dlZFxuICAgICAgICByZXR1cm4gJ2ludmFsaWQnO1xuICAgICAgfVxuXG4gICAgICAvLyBjaGVjayBuYXR1cmUgb2YgY29ubmVjdGlvblxuICAgICAgaWYgKGVkZ2VDb25zdHJhaW50c1tzb3VyY2VjbGFzc10uYXNTb3VyY2UuaXNBbGxvd2VkICYmIGVkZ2VDb25zdHJhaW50c1t0YXJnZXRjbGFzc10uYXNUYXJnZXQuaXNBbGxvd2VkKSB7XG4gICAgICAgIC8vIGNoZWNrIGFtb3VudCBvZiBjb25uZWN0aW9uc1xuICAgICAgICBpZiAoIWhhc1Rvb01hbnlFZGdlcyhzb3VyY2UsIFwic291cmNlXCIpICYmICFoYXNUb29NYW55RWRnZXModGFyZ2V0LCBcInRhcmdldFwiKSApIHtcbiAgICAgICAgICByZXR1cm4gJ3ZhbGlkJztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gdHJ5IHRvIHJldmVyc2VcbiAgICAgIGlmIChlZGdlQ29uc3RyYWludHNbdGFyZ2V0Y2xhc3NdLmFzU291cmNlLmlzQWxsb3dlZCAmJiBlZGdlQ29uc3RyYWludHNbc291cmNlY2xhc3NdLmFzVGFyZ2V0LmlzQWxsb3dlZCkge1xuICAgICAgICBpZiAoIWhhc1Rvb01hbnlFZGdlcyh0YXJnZXQsIFwic291cmNlXCIpICYmICFoYXNUb29NYW55RWRnZXMoc291cmNlLCBcInRhcmdldFwiKSApIHtcbiAgICAgICAgICByZXR1cm4gJ3JldmVyc2UnO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gJ2ludmFsaWQnO1xuICAgIH07XG5cbiAgICBlbGVtZW50VXRpbGl0aWVzLmRlbGV0ZUFuZFBlcmZvcm1MYXlvdXQgPSBmdW5jdGlvbihlbGVzLCBsYXlvdXRwYXJhbSkge1xuICAgICAgdmFyIHJlc3VsdCA9IGVsZXMucmVtb3ZlKCk7XG4gICAgICBpZiAodHlwZW9mIGxheW91dHBhcmFtID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGxheW91dHBhcmFtKCk7IC8vIElmIGxheW91dHBhcmFtIGlzIGEgZnVuY3Rpb24gZXhlY3V0ZSBpdFxuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgICAgdmFyIGxheW91dCA9IGN5LmxheW91dChsYXlvdXRwYXJhbSk7IC8vIElmIGxheW91dHBhcmFtIGlzIGxheW91dCBvcHRpb25zIGNhbGwgbGF5b3V0IHdpdGggdGhhdCBvcHRpb25zLlxuXG4gICAgICAgICAgLy8gRG8gdGhpcyBjaGVjayBmb3IgY3l0b3NjYXBlLmpzIGJhY2t3YXJkIGNvbXBhdGliaWxpdHlcbiAgICAgICAgICBpZiAobGF5b3V0ICYmIGxheW91dC5ydW4pIHtcbiAgICAgICAgICAgICAgbGF5b3V0LnJ1bigpO1xuICAgICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuXG4gICAgLypcbiAgICAgKiBIaWRlIGdpdmVuIGVsZXMgYW5kIHBlcmZvcm0gZ2l2ZW4gbGF5b3V0IGFmdGVyd2FyZC4gTGF5b3V0IHBhcmFtZXRlciBtYXkgYmUgbGF5b3V0IG9wdGlvbnNcbiAgICAgKiBvciBhIGZ1bmN0aW9uIHRvIGNhbGwuXG4gICAgICovXG4gICAgZWxlbWVudFV0aWxpdGllcy5oaWRlQW5kUGVyZm9ybUxheW91dCA9IGZ1bmN0aW9uKGVsZXMsIGxheW91dHBhcmFtKSB7XG4gICAgICAgIHZhciByZXN1bHQgPSBjeS52aWV3VXRpbGl0aWVzKCkuaGlkZShlbGVzKTsgLy8gSGlkZSBnaXZlbiBlbGVzXG4gICAgICAgIGlmICh0eXBlb2YgbGF5b3V0cGFyYW0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGxheW91dHBhcmFtKCk7IC8vIElmIGxheW91dHBhcmFtIGlzIGEgZnVuY3Rpb24gZXhlY3V0ZSBpdFxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdmFyIGxheW91dCA9IGN5LmxheW91dChsYXlvdXRwYXJhbSk7IC8vIElmIGxheW91dHBhcmFtIGlzIGxheW91dCBvcHRpb25zIGNhbGwgbGF5b3V0IHdpdGggdGhhdCBvcHRpb25zLlxuXG4gICAgICAgICAgICAvLyBEbyB0aGlzIGNoZWNrIGZvciBjeXRvc2NhcGUuanMgYmFja3dhcmQgY29tcGF0aWJpbGl0eVxuICAgICAgICAgICAgaWYgKGxheW91dCAmJiBsYXlvdXQucnVuKSB7XG4gICAgICAgICAgICAgICAgbGF5b3V0LnJ1bigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuXG4gICAgLypcbiAgICAgKiBVbmhpZGUgZ2l2ZW4gZWxlcyBhbmQgcGVyZm9ybSBnaXZlbiBsYXlvdXQgYWZ0ZXJ3YXJkLiBMYXlvdXQgcGFyYW1ldGVyIG1heSBiZSBsYXlvdXQgb3B0aW9uc1xuICAgICAqIG9yIGEgZnVuY3Rpb24gdG8gY2FsbC5cbiAgICAgKi9cbiAgICBlbGVtZW50VXRpbGl0aWVzLnNob3dBbmRQZXJmb3JtTGF5b3V0ID0gZnVuY3Rpb24oZWxlcywgbGF5b3V0cGFyYW0pIHtcbiAgICAgIHZhciByZXN1bHQgPSBjeS52aWV3VXRpbGl0aWVzKCkuc2hvdyhlbGVzKTsgLy8gU2hvdyBnaXZlbiBlbGVzXG4gICAgICBpZiAodHlwZW9mIGxheW91dHBhcmFtID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGxheW91dHBhcmFtKCk7IC8vIElmIGxheW91dHBhcmFtIGlzIGEgZnVuY3Rpb24gZXhlY3V0ZSBpdFxuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIHZhciBsYXlvdXQgPSBjeS5sYXlvdXQobGF5b3V0cGFyYW0pOyAvLyBJZiBsYXlvdXRwYXJhbSBpcyBsYXlvdXQgb3B0aW9ucyBjYWxsIGxheW91dCB3aXRoIHRoYXQgb3B0aW9ucy5cblxuICAgICAgICAvLyBEbyB0aGlzIGNoZWNrIGZvciBjeXRvc2NhcGUuanMgYmFja3dhcmQgY29tcGF0aWJpbGl0eVxuICAgICAgICBpZiAobGF5b3V0ICYmIGxheW91dC5ydW4pIHtcbiAgICAgICAgICBsYXlvdXQucnVuKCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuXG4gICAgLypcbiAgICAgKiBDaGFuZ2Ugc3R5bGUvY3NzIG9mIGdpdmVuIGVsZXMgYnkgc2V0dGluZyBnZXR0aW5nIHByb3BlcnR5IG5hbWUgdG8gdGhlIGdpdmVuIHZhbHVlL3ZhbHVlcyAoTm90ZSB0aGF0IHZhbHVlTWFwIHBhcmFtZXRlciBtYXkgYmVcbiAgICAgKiBhIHNpbmdsZSBzdHJpbmcgb3IgYW4gaWQgdG8gdmFsdWUgbWFwKS5cbiAgICAgKi9cbiAgICBlbGVtZW50VXRpbGl0aWVzLmNoYW5nZUNzcyA9IGZ1bmN0aW9uKGVsZXMsIG5hbWUsIHZhbHVlTWFwKSB7XG4gICAgICBpZiAoIHR5cGVvZiB2YWx1ZU1hcCA9PT0gJ29iamVjdCcgKSB7XG4gICAgICAgIGN5LnN0YXJ0QmF0Y2goKTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgdmFyIGVsZSA9IGN5LmdldEVsZW1lbnRCeUlkKGVsZXNbaV0uaWQoKSk7XG4gICAgICAgICAgZWxlLmNzcyhuYW1lLCB2YWx1ZU1hcFtlbGUuaWQoKV0pOyAvLyB2YWx1ZU1hcCBpcyBhbiBpZCB0byB2YWx1ZSBtYXAgdXNlIGl0IGluIHRoaXMgd2F5XG4gICAgICAgIH1cbiAgICAgICAgY3kuZW5kQmF0Y2goKTtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICBlbGVzLmNzcyhuYW1lLCB2YWx1ZU1hcCk7IC8vIHZhbHVlTWFwIGlzIGp1c3QgYSBzdHJpbmcgc2V0IGNzcygnbmFtZScpIGZvciBhbGwgZWxlcyB0byB0aGlzIHZhbHVlXG4gICAgICB9XG4gICAgfTtcblxuICAgIC8qXG4gICAgICogQ2hhbmdlIGRhdGEgb2YgZ2l2ZW4gZWxlcyBieSBzZXR0aW5nIGdldHRpbmcgcHJvcGVydHkgbmFtZSB0byB0aGUgZ2l2ZW4gdmFsdWUvdmFsdWVzIChOb3RlIHRoYXQgdmFsdWVNYXAgcGFyYW1ldGVyIG1heSBiZVxuICAgICAqIGEgc2luZ2xlIHN0cmluZyBvciBhbiBpZCB0byB2YWx1ZSBtYXApLlxuICAgICAqL1xuICAgIGVsZW1lbnRVdGlsaXRpZXMuY2hhbmdlRGF0YSA9IGZ1bmN0aW9uKGVsZXMsIG5hbWUsIHZhbHVlTWFwKSB7XG4gICAgICBpZiAoIHR5cGVvZiB2YWx1ZU1hcCA9PT0gJ29iamVjdCcgKSB7XG4gICAgICAgIGN5LnN0YXJ0QmF0Y2goKTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgdmFyIGVsZSA9IGN5LmdldEVsZW1lbnRCeUlkKGVsZXNbaV0uaWQoKSk7XG4gICAgICAgICAgZWxlLmRhdGEobmFtZSwgdmFsdWVNYXBbZWxlLmlkKCldKTsgLy8gdmFsdWVNYXAgaXMgYW4gaWQgdG8gdmFsdWUgbWFwIHVzZSBpdCBpbiB0aGlzIHdheVxuICAgICAgICB9XG4gICAgICAgIGN5LmVuZEJhdGNoKCk7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgZWxlcy5kYXRhKG5hbWUsIHZhbHVlTWFwKTsgLy8gdmFsdWVNYXAgaXMganVzdCBhIHN0cmluZyBzZXQgY3NzKCduYW1lJykgZm9yIGFsbCBlbGVzIHRvIHRoaXMgdmFsdWVcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgZWxlbWVudFV0aWxpdGllcy51cGRhdGVTZXRGaWVsZCA9IGZ1bmN0aW9uKGVsZSwgZmllbGROYW1lLCB0b0RlbGV0ZSwgdG9BZGQsIGNhbGxiYWNrKSB7XG4gICAgICB2YXIgc2V0ID0gZWxlLmRhdGEoIGZpZWxkTmFtZSApO1xuICAgICAgaWYgKCAhc2V0ICkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB2YXIgdXBkYXRlcyA9IHt9O1xuXG4gICAgICBpZiAoIHRvRGVsZXRlICE9IG51bGwgJiYgc2V0WyB0b0RlbGV0ZSBdICkge1xuICAgICAgICBkZWxldGUgc2V0WyB0b0RlbGV0ZSBdO1xuICAgICAgICB1cGRhdGVzLmRlbGV0ZWQgPSB0b0RlbGV0ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKCB0b0FkZCAhPSBudWxsICkge1xuICAgICAgICBzZXRbIHRvQWRkIF0gPSB0cnVlO1xuICAgICAgICB1cGRhdGVzLmFkZGVkID0gdG9BZGQ7XG4gICAgICB9XG5cbiAgICAgIGlmICggY2FsbGJhY2sgJiYgKCB1cGRhdGVzWyAnZGVsZXRlZCcgXSAhPSBudWxsIHx8IHVwZGF0ZXNbICdhZGRlZCcgXSAhPSBudWxsICkgKSB7XG4gICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB1cGRhdGVzO1xuICAgIH07XG5cbiAgICAvKlxuICAgICAqIFJldHVybiB0aGUgc2V0IG9mIGFsbCBub2RlcyBwcmVzZW50IHVuZGVyIHRoZSBnaXZlbiBwb3NpdGlvblxuICAgICAqIHJlbmRlcmVkUG9zIG11c3QgYmUgYSBwb2ludCBkZWZpbmVkIHJlbGF0aXZlbHkgdG8gY3l0b3NjYXBlIGNvbnRhaW5lclxuICAgICAqIChsaWtlIHJlbmRlcmVkUG9zaXRpb24gZmllbGQgb2YgYSBub2RlKVxuICAgICAqL1xuICAgIGVsZW1lbnRVdGlsaXRpZXMuZ2V0Tm9kZXNBdCA9IGZ1bmN0aW9uKHJlbmRlcmVkUG9zKSB7XG4gICAgICB2YXIgbm9kZXMgPSBjeS5ub2RlcygpO1xuICAgICAgdmFyIHggPSByZW5kZXJlZFBvcy54O1xuICAgICAgdmFyIHkgPSByZW5kZXJlZFBvcy55O1xuICAgICAgdmFyIHJlc3VsdE5vZGVzID0gW107XG4gICAgICBmb3IodmFyIGkgPSAwOyBpIDwgbm9kZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIG5vZGUgPSBub2Rlc1tpXTtcbiAgICAgICAgdmFyIHJlbmRlcmVkQmJveCA9IG5vZGUucmVuZGVyZWRCb3VuZGluZ0JveCh7XG4gICAgICAgICAgaW5jbHVkZU5vZGVzOiB0cnVlLFxuICAgICAgICAgIGluY2x1ZGVFZGdlczogZmFsc2UsXG4gICAgICAgICAgaW5jbHVkZUxhYmVsczogZmFsc2UsXG4gICAgICAgICAgaW5jbHVkZVNoYWRvd3M6IGZhbHNlXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoeCA+PSByZW5kZXJlZEJib3gueDEgJiYgeCA8PSByZW5kZXJlZEJib3gueDIpIHtcbiAgICAgICAgICBpZiAoeSA+PSByZW5kZXJlZEJib3gueTEgJiYgeSA8PSByZW5kZXJlZEJib3gueTIpIHtcbiAgICAgICAgICAgIHJlc3VsdE5vZGVzLnB1c2gobm9kZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0Tm9kZXM7XG4gICAgfTtcblxuICAgIGVsZW1lbnRVdGlsaXRpZXMuZGVtdWx0aW1lcml6ZUNsYXNzID0gZnVuY3Rpb24oc2JnbmNsYXNzKSB7XG4gICAgICByZXR1cm4gc2JnbmNsYXNzLnJlcGxhY2UoXCIgbXVsdGltZXJcIiwgXCJcIik7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSBtYXBUeXBlIC0gdHlwZSBvZiB0aGUgY3VycmVudCBtYXAgKFBELCBBRiBvciBVbmtub3duKVxuICAgICAqL1xuICAgIGVsZW1lbnRVdGlsaXRpZXMuc2V0TWFwVHlwZSA9IGZ1bmN0aW9uKG1hcFR5cGUpe1xuICAgICAgZWxlbWVudFV0aWxpdGllcy5tYXBUeXBlID0gbWFwVHlwZTtcbiAgICAgIHJldHVybiBtYXBUeXBlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIHJldHVybiAtIG1hcCB0eXBlXG4gICAgICovXG4gICAgZWxlbWVudFV0aWxpdGllcy5nZXRNYXBUeXBlID0gZnVuY3Rpb24oKXtcbiAgICAgICAgcmV0dXJuIGVsZW1lbnRVdGlsaXRpZXMubWFwVHlwZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmVzZXRzIG1hcCB0eXBlXG4gICAgICovXG4gICAgZWxlbWVudFV0aWxpdGllcy5yZXNldE1hcFR5cGUgPSBmdW5jdGlvbigpe1xuICAgICAgICBlbGVtZW50VXRpbGl0aWVzLm1hcFR5cGUgPSB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogS2VlcCBjb25zaXN0ZW5jeSBvZiBsaW5rcyB0byBzZWxmIGluc2lkZSB0aGUgZGF0YSgpIHN0cnVjdHVyZS5cbiAgICAgKiBUaGlzIGlzIG5lZWRlZCB3aGVuZXZlciBhIG5vZGUgY2hhbmdlcyBwYXJlbnRzLCBmb3IgZXhhbXBsZSxcbiAgICAgKiBhcyBpdCBpcyBkZXN0cm95ZWQgYW5kIHJlY3JlYXRlZC4gQnV0IHRoZSBkYXRhKCkgc3RheXMgaWRlbnRpY2FsLlxuICAgICAqIFRoaXMgY3JlYXRlcyBpbmNvbnNpc3RlbmNpZXMgZm9yIHRoZSBwb2ludGVycyBzdG9yZWQgaW4gZGF0YSgpLFxuICAgICAqIGFzIHRoZXkgbm93IHBvaW50IHRvIGEgZGVsZXRlZCBub2RlLlxuICAgICAqL1xuICAgIGVsZW1lbnRVdGlsaXRpZXMubWFpbnRhaW5Qb2ludGVyID0gZnVuY3Rpb24gKGVsZXMpIHtcbiAgICAgIGVsZXMubm9kZXMoKS5mb3JFYWNoKGZ1bmN0aW9uKGVsZSl7XG4gICAgICAgIC8vIHJlc3RvcmUgYmFja2dyb3VuZCBpbWFnZXNcbiAgICAgICAgZWxlLmVtaXQoJ2RhdGEnKTtcblxuICAgICAgICAvLyBza2lwIG5vZGVzIHdpdGhvdXQgYW55IGF1eGlsaWFyeSB1bml0c1xuICAgICAgICBpZighZWxlLmRhdGEoJ3N0YXRlc2FuZGluZm9zJykgfHwgZWxlLmRhdGEoJ3N0YXRlc2FuZGluZm9zJykubGVuZ3RoID09IDApIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgZm9yKHZhciBzaWRlIGluIGVsZS5kYXRhKCdhdXh1bml0bGF5b3V0cycpKSB7XG4gICAgICAgICAgZWxlLmRhdGEoJ2F1eHVuaXRsYXlvdXRzJylbc2lkZV0ucGFyZW50Tm9kZSA9IGVsZS5pZCgpO1xuICAgICAgICB9XG4gICAgICAgIGZvcih2YXIgaT0wOyBpIDwgZWxlLmRhdGEoJ3N0YXRlc2FuZGluZm9zJykubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBlbGUuZGF0YSgnc3RhdGVzYW5kaW5mb3MnKVtpXS5wYXJlbnQgPSBlbGUuaWQoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgZWxlbWVudFV0aWxpdGllcy5hbnlIYXNCYWNrZ3JvdW5kSW1hZ2UgPSBmdW5jdGlvbiAoZWxlcykge1xuICAgICAgdmFyIG9iaiA9IGVsZW1lbnRVdGlsaXRpZXMuZ2V0QmFja2dyb3VuZEltYWdlT2JqcyhlbGVzKTtcbiAgICAgIGlmKG9iaiA9PT0gdW5kZWZpbmVkKVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICBlbHNle1xuICAgICAgICBmb3IodmFyIGtleSBpbiBvYmope1xuICAgICAgICAgIHZhciB2YWx1ZSA9IG9ialtrZXldO1xuICAgICAgICAgIGlmKHZhbHVlICYmICEkLmlzRW1wdHlPYmplY3QodmFsdWUpKVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGVsZW1lbnRVdGlsaXRpZXMuaGFzQmFja2dyb3VuZEltYWdlID0gZnVuY3Rpb24gKGVsZSkge1xuICAgICAgaWYgKCFlbGUuaXNOb2RlKCkgfHwgIWVsZS5kYXRhKCdiYWNrZ3JvdW5kLWltYWdlJykpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgdmFyIGJnO1xuICAgICAgXG4gICAgICBpZih0eXBlb2YgZWxlLmRhdGEoJ2JhY2tncm91bmQtaW1hZ2UnKSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICBiZyA9IGVsZS5kYXRhKCdiYWNrZ3JvdW5kLWltYWdlJykuc3BsaXQoXCIgXCIpO1xuICAgICAgfVxuICAgICAgZWxzZSBpZihBcnJheS5pc0FycmF5KG9ialsnYmFja2dyb3VuZC1pbWFnZSddKSkge1xuICAgICAgICBiZyA9IGVsZS5kYXRhKCdiYWNrZ3JvdW5kLWltYWdlJyk7XG4gICAgICB9XG5cbiAgICAgIGlmICghYmcpIHJldHVybiBmYWxzZTtcblxuICAgICAgdmFyIGNsb25lSW1nID0gJ2RhdGE6aW1hZ2Uvc3ZnK3htbDt1dGY4LCUzQ3N2ZyUyMHdpZHRoJTNEJTIyMTAwJTIyJTIwaGVpZ2h0JTNEJTIyMTAwJTIyJTIwdmlld0JveCUzRCUyMjAlMjAwJTIwMTAwJTIwMTAwJTIyJTIwc3R5bGUlM0QlMjJmaWxsJTNBbm9uZSUzQnN0cm9rZSUzQWJsYWNrJTNCc3Ryb2tlLXdpZHRoJTNBMCUzQiUyMiUyMHhtbG5zJTNEJTIyaHR0cCUzQS8vd3d3LnczLm9yZy8yMDAwL3N2ZyUyMiUyMCUzRSUzQ3JlY3QlMjB4JTNEJTIyMCUyMiUyMHklM0QlMjIwJTIyJTIwd2lkdGglM0QlMjIxMDAlMjIlMjBoZWlnaHQlM0QlMjIxMDAlMjIlMjBzdHlsZSUzRCUyMmZpbGwlM0ElMjM4MzgzODMlMjIvJTNFJTIwJTNDL3N2ZyUzRSc7XG4gICAgICAvLyBJZiBjbG9uZUltZyBpcyBub3QgdGhlIG9ubHkgaW1hZ2Ugb3IgdGhlcmUgYXJlIG11bHRpcGxlIGltYWdlcyB0aGVyZSBpcyBhIGJhY2tncm91bmQgaW1hZ2VcbiAgICAgIHZhciBvbmx5SGFzQ2xvbmVNYXJrZXJBc0JnSW1hZ2UgPSAoYmcubGVuZ3RoID09PSAxKSAmJiAoYmcuaW5kZXhPZihjbG9uZUltZykgPT09IDApO1xuXG4gICAgICBpZihiZy5sZW5ndGggPiAxIHx8ICEob25seUhhc0Nsb25lTWFya2VyQXNCZ0ltYWdlKSlcbiAgICAgICAgcmV0dXJuIHRydWU7XG5cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBlbGVtZW50VXRpbGl0aWVzLmdldEJhY2tncm91bmRJbWFnZVVSTCA9IGZ1bmN0aW9uIChlbGVzKSB7XG4gICAgICBpZighZWxlcyB8fCBlbGVzLmxlbmd0aCA8IDEpXG4gICAgICAgIHJldHVybjtcblxuICAgICAgdmFyIGNvbW1vblVSTCA9IFwiXCI7XG4gICAgICBmb3IodmFyIGkgPSAwOyBpIDwgZWxlcy5sZW5ndGg7IGkrKyl7XG4gICAgICAgIHZhciBlbGUgPSBlbGVzW2ldO1xuXG4gICAgICAgIGlmKCFlbGUuaXNOb2RlKCkgfHwgIWVsZW1lbnRVdGlsaXRpZXMuaGFzQmFja2dyb3VuZEltYWdlKGVsZSkpXG4gICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgIHZhciB1cmwgPSBlbGUuZGF0YSgnYmFja2dyb3VuZC1pbWFnZScpLnNwbGl0KFwiIFwiKS5wb3AoKTtcbiAgICAgICAgaWYoIXVybCB8fCB1cmwuaW5kZXhPZignaHR0cCcpICE9PSAwIHx8IChjb21tb25VUkwgIT09IFwiXCIgJiYgY29tbW9uVVJMICE9PSB1cmwpKVxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgZWxzZSBpZihjb21tb25VUkwgPT09IFwiXCIpXG4gICAgICAgICAgY29tbW9uVVJMID0gdXJsO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29tbW9uVVJMO1xuICAgIH1cblxuICAgIGVsZW1lbnRVdGlsaXRpZXMuZ2V0QmFja2dyb3VuZEltYWdlT2JqcyA9IGZ1bmN0aW9uIChlbGVzKSB7XG4gICAgICBpZighZWxlcyB8fCBlbGVzLmxlbmd0aCA8IDEpXG4gICAgICAgIHJldHVybjtcblxuICAgICAgdmFyIGxpc3QgPSB7fTtcbiAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCBlbGVzLmxlbmd0aDsgaSsrKXtcbiAgICAgICAgdmFyIGVsZSA9IGVsZXNbaV07XG4gICAgICAgIHZhciBvYmogPSBnZXRCZ09iaihlbGUpO1xuICAgICAgICBpZihPYmplY3Qua2V5cyhvYmopLmxlbmd0aCA8IDEpXG4gICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgIGxpc3RbZWxlLmRhdGEoJ2lkJyldID0gb2JqO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGxpc3Q7XG5cbiAgICAgIGZ1bmN0aW9uIGdldEJnT2JqIChlbGUpIHtcbiAgICAgICAgaWYoZWxlLmlzTm9kZSgpICYmIGVsZW1lbnRVdGlsaXRpZXMuaGFzQmFja2dyb3VuZEltYWdlKGVsZSkpe1xuICAgICAgICAgIHZhciBrZXlzID0gWydiYWNrZ3JvdW5kLWltYWdlJywgJ2JhY2tncm91bmQtZml0JywgJ2JhY2tncm91bmQtaW1hZ2Utb3BhY2l0eScsXG4gICAgICAgICAgJ2JhY2tncm91bmQtcG9zaXRpb24teCcsICdiYWNrZ3JvdW5kLXBvc2l0aW9uLXknLCAnYmFja2dyb3VuZC1oZWlnaHQnLCAnYmFja2dyb3VuZC13aWR0aCddO1xuXG4gICAgICAgICAgdmFyIG9iaiA9IHt9O1xuICAgICAgICAgIGtleXMuZm9yRWFjaChmdW5jdGlvbihrZXkpIHtcbiAgICAgICAgICAgIHZhciB2YWx1ZTtcbiAgICAgICAgICAgIGlmIChlbGUuZGF0YShrZXkpICYmICh0eXBlb2YgZWxlLmRhdGEoa2V5KSA9PT0gXCJzdHJpbmdcIikpIHtcbiAgICAgICAgICAgICAgdmFsdWUgPSBlbGUuZGF0YShrZXkpLnNwbGl0KFwiIFwiKVswXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICB2YWx1ZSA9IGVsZS5kYXRhKGtleSk7XG4gICAgICAgICAgICB9ICAgICAgICAgICBcbiAgICAgICAgICAgIG9ialtrZXldID0gdmFsdWU7XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICByZXR1cm4gb2JqO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYoZWxlLmlzTm9kZSgpKVxuICAgICAgICAgIHJldHVybiB7fTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBlbGVtZW50VXRpbGl0aWVzLmdldEJhY2tncm91bmRGaXRPcHRpb25zID0gZnVuY3Rpb24gKGVsZXMpIHtcbiAgICAgIGlmKCFlbGVzIHx8IGVsZXMubGVuZ3RoIDwgMSlcbiAgICAgICAgcmV0dXJuO1xuXG4gICAgICB2YXIgY29tbW9uRml0ID0gXCJcIjtcbiAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCBlbGVzLmxlbmd0aDsgaSsrKXtcbiAgICAgICAgdmFyIG5vZGUgPSBlbGVzW2ldO1xuICAgICAgICBpZighbm9kZS5pc05vZGUoKSlcbiAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgdmFyIGZpdCA9IGdldEZpdE9wdGlvbihub2RlKTtcbiAgICAgICAgaWYoIWZpdCB8fCAoY29tbW9uRml0ICE9PSBcIlwiICYmIGZpdCAhPT0gY29tbW9uRml0KSlcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIGVsc2UgaWYoY29tbW9uRml0ID09PSBcIlwiKVxuICAgICAgICAgIGNvbW1vbkZpdCA9IGZpdDtcbiAgICAgIH1cblxuICAgICAgdmFyIG9wdGlvbnMgPSAnPG9wdGlvbiB2YWx1ZT1cIm5vbmVcIj5Ob25lPC9vcHRpb24+J1xuICAgICAgICAgICAgICAgICAgKyAnPG9wdGlvbiB2YWx1ZT1cImZpdFwiPkZpdDwvb3B0aW9uPidcbiAgICAgICAgICAgICAgICAgICsgJzxvcHRpb24gdmFsdWU9XCJjb3ZlclwiPkNvdmVyPC9vcHRpb24+J1xuICAgICAgICAgICAgICAgICAgKyAnPG9wdGlvbiB2YWx1ZT1cImNvbnRhaW5cIj5Db250YWluPC9vcHRpb24+JztcbiAgICAgIHZhciBzZWFyY2hLZXkgPSAndmFsdWU9XCInICsgY29tbW9uRml0ICsgJ1wiJztcbiAgICAgIHZhciBpbmRleCA9IG9wdGlvbnMuaW5kZXhPZihzZWFyY2hLZXkpICsgc2VhcmNoS2V5Lmxlbmd0aDtcbiAgICAgIHJldHVybiBvcHRpb25zLnN1YnN0cigwLCBpbmRleCkgKyAnIHNlbGVjdGVkJyArIG9wdGlvbnMuc3Vic3RyKGluZGV4KTtcblxuICAgICAgZnVuY3Rpb24gZ2V0Rml0T3B0aW9uKG5vZGUpIHtcbiAgICAgICAgaWYoIWVsZW1lbnRVdGlsaXRpZXMuaGFzQmFja2dyb3VuZEltYWdlKG5vZGUpKVxuICAgICAgICAgIHJldHVybjtcblxuICAgICAgICB2YXIgZiA9IG5vZGUuZGF0YSgnYmFja2dyb3VuZC1maXQnKTtcbiAgICAgICAgdmFyIGggPSBub2RlLmRhdGEoJ2JhY2tncm91bmQtaGVpZ2h0Jyk7XG5cbiAgICAgICAgaWYoIWYgfHwgIWgpXG4gICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgIGYgPSBmLnNwbGl0KFwiIFwiKTtcbiAgICAgICAgaCA9IGguc3BsaXQoXCIgXCIpO1xuICAgICAgICBpZihmW2YubGVuZ3RoLTFdID09PSBcIm5vbmVcIilcbiAgICAgICAgICByZXR1cm4gKGhbaC5sZW5ndGgtMV0gPT09IFwiYXV0b1wiID8gXCJub25lXCIgOiBcImZpdFwiKTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgIHJldHVybiBmW2YubGVuZ3RoLTFdO1xuICAgICAgfVxuICAgIH1cblxuICAgIGVsZW1lbnRVdGlsaXRpZXMudXBkYXRlQmFja2dyb3VuZEltYWdlID0gZnVuY3Rpb24gKG5vZGVzLCBiZ09iaikge1xuICAgICAgaWYoIW5vZGVzIHx8IG5vZGVzLmxlbmd0aCA9PSAwIHx8ICFiZ09iailcbiAgICAgICAgcmV0dXJuO1xuXG4gICAgICBmb3IodmFyIGkgPSAwOyBpIDwgbm9kZXMubGVuZ3RoOyBpKyspe1xuICAgICAgICB2YXIgbm9kZSA9IG5vZGVzW2ldO1xuICAgICAgICB2YXIgb2JqID0gYmdPYmpbbm9kZS5kYXRhKCdpZCcpXTtcbiAgICAgICAgaWYoIW9iaiB8fCAkLmlzRW1wdHlPYmplY3Qob2JqKSlcbiAgICAgICAgICBjb250aW51ZTtcblxuICAgICAgICB2YXIgaW1ncyA9IG5vZGUuZGF0YSgnYmFja2dyb3VuZC1pbWFnZScpID8gbm9kZS5kYXRhKCdiYWNrZ3JvdW5kLWltYWdlJykuc3BsaXQoXCIgXCIpIDogW107XG4gICAgICAgIHZhciB4UG9zID0gbm9kZS5kYXRhKCdiYWNrZ3JvdW5kLXBvc2l0aW9uLXgnKSA/IG5vZGUuZGF0YSgnYmFja2dyb3VuZC1wb3NpdGlvbi14Jykuc3BsaXQoXCIgXCIpIDogW107XG4gICAgICAgIHZhciB5UG9zID0gbm9kZS5kYXRhKCdiYWNrZ3JvdW5kLXBvc2l0aW9uLXknKSA/IG5vZGUuZGF0YSgnYmFja2dyb3VuZC1wb3NpdGlvbi15Jykuc3BsaXQoXCIgXCIpIDogW107XG4gICAgICAgIHZhciB3aWR0aHMgPSBub2RlLmRhdGEoJ2JhY2tncm91bmQtd2lkdGgnKSA/IG5vZGUuZGF0YSgnYmFja2dyb3VuZC13aWR0aCcpLnNwbGl0KFwiIFwiKSA6IFtdO1xuICAgICAgICB2YXIgaGVpZ2h0cyA9IG5vZGUuZGF0YSgnYmFja2dyb3VuZC1oZWlnaHQnKSA/IG5vZGUuZGF0YSgnYmFja2dyb3VuZC1oZWlnaHQnKS5zcGxpdChcIiBcIikgOiBbXTtcbiAgICAgICAgdmFyIGZpdHMgPSBub2RlLmRhdGEoJ2JhY2tncm91bmQtZml0JykgPyBub2RlLmRhdGEoJ2JhY2tncm91bmQtZml0Jykuc3BsaXQoXCIgXCIpIDogW107XG4gICAgICAgIHZhciBvcGFjaXRpZXMgPSBub2RlLmRhdGEoJ2JhY2tncm91bmQtaW1hZ2Utb3BhY2l0eScpID8gKFwiXCIgKyBub2RlLmRhdGEoJ2JhY2tncm91bmQtaW1hZ2Utb3BhY2l0eScpKS5zcGxpdChcIiBcIikgOiBbXTtcblxuICAgICAgICB2YXIgaW5kZXggPSAtMTtcbiAgICAgICAgaWYodHlwZW9mIG9ialsnYmFja2dyb3VuZC1pbWFnZSddID09PSBcInN0cmluZ1wiKVxuICAgICAgICAgIGluZGV4ID0gaW1ncy5pbmRleE9mKG9ialsnYmFja2dyb3VuZC1pbWFnZSddKTtcbiAgICAgICAgZWxzZSBpZihBcnJheS5pc0FycmF5KG9ialsnYmFja2dyb3VuZC1pbWFnZSddKSlcbiAgICAgICAgICBpbmRleCA9IGltZ3MuaW5kZXhPZihvYmpbJ2JhY2tncm91bmQtaW1hZ2UnXVswXSk7XG5cbiAgICAgICAgaWYoaW5kZXggPCAwKVxuICAgICAgICAgIGNvbnRpbnVlO1xuXG4gICAgICAgIGlmKG9ialsnYmFja2dyb3VuZC1pbWFnZSddICYmIGltZ3MubGVuZ3RoID4gaW5kZXgpe1xuICAgICAgICAgIHZhciB0bXAgPSBpbWdzW2luZGV4XTtcbiAgICAgICAgICBpbWdzW2luZGV4XSA9IG9ialsnYmFja2dyb3VuZC1pbWFnZSddO1xuICAgICAgICAgIG9ialsnYmFja2dyb3VuZC1pbWFnZSddID0gdG1wO1xuICAgICAgICB9XG4gICAgICAgIGlmKG9ialsnYmFja2dyb3VuZC1maXQnXSAmJiBmaXRzLmxlbmd0aCA+IGluZGV4KXtcbiAgICAgICAgICB2YXIgdG1wID0gZml0c1tpbmRleF07XG4gICAgICAgICAgZml0c1tpbmRleF0gPSBvYmpbJ2JhY2tncm91bmQtZml0J107XG4gICAgICAgICAgb2JqWydiYWNrZ3JvdW5kLWZpdCddID0gdG1wO1xuICAgICAgICB9XG4gICAgICAgIGlmKG9ialsnYmFja2dyb3VuZC13aWR0aCddICYmIHdpZHRocy5sZW5ndGggPiBpbmRleCl7XG4gICAgICAgICAgdmFyIHRtcCA9IHdpZHRoc1tpbmRleF07XG4gICAgICAgICAgd2lkdGhzW2luZGV4XSA9IG9ialsnYmFja2dyb3VuZC13aWR0aCddO1xuICAgICAgICAgIG9ialsnYmFja2dyb3VuZC13aWR0aCddID0gdG1wO1xuICAgICAgICB9XG4gICAgICAgIGlmKG9ialsnYmFja2dyb3VuZC1oZWlnaHQnXSAmJiBoZWlnaHRzLmxlbmd0aCA+IGluZGV4KXtcbiAgICAgICAgICB2YXIgdG1wID0gaGVpZ2h0c1tpbmRleF07XG4gICAgICAgICAgaGVpZ2h0c1tpbmRleF0gPSBvYmpbJ2JhY2tncm91bmQtaGVpZ2h0J107XG4gICAgICAgICAgb2JqWydiYWNrZ3JvdW5kLWhlaWdodCddID0gdG1wO1xuICAgICAgICB9XG4gICAgICAgIGlmKG9ialsnYmFja2dyb3VuZC1wb3NpdGlvbi14J10gJiYgeFBvcy5sZW5ndGggPiBpbmRleCl7XG4gICAgICAgICAgdmFyIHRtcCA9IHhQb3NbaW5kZXhdO1xuICAgICAgICAgIHhQb3NbaW5kZXhdID0gb2JqWydiYWNrZ3JvdW5kLXBvc2l0aW9uLXgnXTtcbiAgICAgICAgICBvYmpbJ2JhY2tncm91bmQtcG9zaXRpb24teCddID0gdG1wO1xuICAgICAgICB9XG4gICAgICAgIGlmKG9ialsnYmFja2dyb3VuZC1wb3NpdGlvbi15J10gJiYgeVBvcy5sZW5ndGggPiBpbmRleCl7XG4gICAgICAgICAgdmFyIHRtcCA9IHlQb3NbaW5kZXhdO1xuICAgICAgICAgIHlQb3NbaW5kZXhdID0gb2JqWydiYWNrZ3JvdW5kLXBvc2l0aW9uLXknXTtcbiAgICAgICAgICBvYmpbJ2JhY2tncm91bmQtcG9zaXRpb24teSddID0gdG1wO1xuICAgICAgICB9XG4gICAgICAgIGlmKG9ialsnYmFja2dyb3VuZC1pbWFnZS1vcGFjaXR5J10gJiYgb3BhY2l0aWVzLmxlbmd0aCA+IGluZGV4KXtcbiAgICAgICAgICB2YXIgdG1wID0gb3BhY2l0aWVzW2luZGV4XTtcbiAgICAgICAgICBvcGFjaXRpZXNbaW5kZXhdID0gb2JqWydiYWNrZ3JvdW5kLWltYWdlLW9wYWNpdHknXTtcbiAgICAgICAgICBvYmpbJ2JhY2tncm91bmQtaW1hZ2Utb3BhY2l0eSddID0gdG1wO1xuICAgICAgICB9XG5cbiAgICAgICAgbm9kZS5kYXRhKCdiYWNrZ3JvdW5kLWltYWdlJywgaW1ncy5qb2luKFwiIFwiKSk7XG4gICAgICAgIG5vZGUuZGF0YSgnYmFja2dyb3VuZC1wb3NpdGlvbi14JywgeFBvcy5qb2luKFwiIFwiKSk7XG4gICAgICAgIG5vZGUuZGF0YSgnYmFja2dyb3VuZC1wb3NpdGlvbi15JywgeVBvcy5qb2luKFwiIFwiKSk7XG4gICAgICAgIG5vZGUuZGF0YSgnYmFja2dyb3VuZC13aWR0aCcsIHdpZHRocy5qb2luKFwiIFwiKSk7XG4gICAgICAgIG5vZGUuZGF0YSgnYmFja2dyb3VuZC1oZWlnaHQnLCBoZWlnaHRzLmpvaW4oXCIgXCIpKTtcbiAgICAgICAgbm9kZS5kYXRhKCdiYWNrZ3JvdW5kLWZpdCcsIGZpdHMuam9pbihcIiBcIikpO1xuICAgICAgICBub2RlLmRhdGEoJ2JhY2tncm91bmQtaW1hZ2Utb3BhY2l0eScsIG9wYWNpdGllcy5qb2luKFwiIFwiKSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBiZ09iajtcbiAgICB9XG5cbiAgICBlbGVtZW50VXRpbGl0aWVzLmNoYW5nZUJhY2tncm91bmRJbWFnZSA9IGZ1bmN0aW9uIChub2Rlcywgb2xkSW1nLCBuZXdJbWcsIGZpcnN0VGltZSwgdXBkYXRlSW5mbywgcHJvbXB0SW52YWxpZEltYWdlLCB2YWxpZGF0ZVVSTCkge1xuICAgICAgaWYoIW5vZGVzIHx8IG5vZGVzLmxlbmd0aCA9PSAwIHx8ICFvbGRJbWcgfHwgIW5ld0ltZylcbiAgICAgICAgcmV0dXJuO1xuXG4gICAgICBlbGVtZW50VXRpbGl0aWVzLnJlbW92ZUJhY2tncm91bmRJbWFnZShub2Rlcywgb2xkSW1nKTtcbiAgICAgIGZvcih2YXIga2V5IGluIG5ld0ltZyl7XG4gICAgICAgIG5ld0ltZ1trZXldWydmaXJzdFRpbWUnXSA9IGZpcnN0VGltZTtcbiAgICAgIH1cbiAgICAgIGVsZW1lbnRVdGlsaXRpZXMuYWRkQmFja2dyb3VuZEltYWdlKG5vZGVzLCBuZXdJbWcsIHVwZGF0ZUluZm8sIHByb21wdEludmFsaWRJbWFnZSwgdmFsaWRhdGVVUkwpO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBub2Rlczogbm9kZXMsXG4gICAgICAgIG9sZEltZzogbmV3SW1nLFxuICAgICAgICBuZXdJbWc6IG9sZEltZyxcbiAgICAgICAgZmlyc3RUaW1lOiBmYWxzZSxcbiAgICAgICAgcHJvbXB0SW52YWxpZEltYWdlOiBwcm9tcHRJbnZhbGlkSW1hZ2UsXG4gICAgICAgIHZhbGlkYXRlVVJMOiB2YWxpZGF0ZVVSTFxuICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBBZGQgYSBiYWNrZ3JvdW5kIGltYWdlIHRvIGdpdmVuIG5vZGVzLlxuICAgIGVsZW1lbnRVdGlsaXRpZXMuYWRkQmFja2dyb3VuZEltYWdlID0gZnVuY3Rpb24gKG5vZGVzLCBiZ09iaiwgdXBkYXRlSW5mbywgcHJvbXB0SW52YWxpZEltYWdlLCB2YWxpZGF0ZVVSTCkge1xuICAgICAgaWYoIW5vZGVzIHx8IG5vZGVzLmxlbmd0aCA9PSAwIHx8ICFiZ09iailcbiAgICAgICAgcmV0dXJuO1xuXG4gICAgICBmb3IodmFyIGkgPSAwOyBpIDwgbm9kZXMubGVuZ3RoOyBpKyspe1xuICAgICAgICB2YXIgbm9kZSA9IG5vZGVzW2ldO1xuICAgICAgICB2YXIgb2JqID0gYmdPYmpbbm9kZS5kYXRhKCdpZCcpXTtcbiAgICAgICAgaWYoIW9iaiB8fCAkLmlzRW1wdHlPYmplY3Qob2JqKSlcbiAgICAgICAgICBjb250aW51ZTtcblxuICAgICAgICAvLyBMb2FkIHRoZSBpbWFnZSBmcm9tIGxvY2FsLCBlbHNlIGp1c3QgcHV0IHRoZSBVUkxcbiAgICAgICAgaWYob2JqWydmcm9tRmlsZSddKVxuICAgICAgICBsb2FkQmFja2dyb3VuZFRoZW5BcHBseShub2RlLCBvYmopO1xuICAgICAgICAvLyBWYWxpZGl0eSBvZiBnaXZlbiBVUkwgc2hvdWxkIGJlIGNoZWNrZWQgYmVmb3JlIGFwcGx5aW5nIGl0XG4gICAgICAgIGVsc2UgaWYob2JqWydmaXJzdFRpbWUnXSl7XG4gICAgICAgICAgaWYodHlwZW9mIHZhbGlkYXRlVVJMID09PSAnZnVuY3Rpb24nKVxuICAgICAgICAgICAgdmFsaWRhdGVVUkwobm9kZSwgb2JqLCBhcHBseUJhY2tncm91bmQsIHByb21wdEludmFsaWRJbWFnZSk7XG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgY2hlY2tHaXZlblVSTChub2RlLCBvYmopO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAgICBhcHBseUJhY2tncm91bmQobm9kZSwgb2JqKTtcbiAgICAgIH1cblxuICAgICAgZnVuY3Rpb24gbG9hZEJhY2tncm91bmRUaGVuQXBwbHkobm9kZSwgYmdPYmopIHtcbiAgICAgICAgdmFyIHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XG4gICAgICAgIHZhciBpbWdGaWxlID0gYmdPYmpbJ2JhY2tncm91bmQtaW1hZ2UnXTtcblxuICAgICAgICAvLyBDaGVjayB3aGV0aGVyIGdpdmVuIGZpbGUgaXMgYW4gaW1hZ2UgZmlsZVxuICAgICAgICBpZihpbWdGaWxlLnR5cGUuaW5kZXhPZihcImltYWdlXCIpICE9PSAwKXtcbiAgICAgICAgICBpZihwcm9tcHRJbnZhbGlkSW1hZ2UpXG4gICAgICAgICAgICBwcm9tcHRJbnZhbGlkSW1hZ2UoXCJJbnZhbGlkIGltYWdlIGZpbGUgaXMgZ2l2ZW4hXCIpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlYWRlci5yZWFkQXNEYXRhVVJMKGltZ0ZpbGUpO1xuXG4gICAgICAgIHJlYWRlci5vbmxvYWQgPSBmdW5jdGlvbiAoZSkge1xuICAgICAgICAgIHZhciBpbWcgPSByZWFkZXIucmVzdWx0O1xuICAgICAgICAgIGlmKGltZyl7XG4gICAgICAgICAgICBiZ09ialsnYmFja2dyb3VuZC1pbWFnZSddID0gaW1nO1xuICAgICAgICAgICAgYmdPYmpbJ2Zyb21GaWxlJ10gPSBmYWxzZTtcbiAgICAgICAgICAgIGFwcGx5QmFja2dyb3VuZChub2RlLCBiZ09iaik7XG4gICAgICAgICAgfVxuICAgICAgICAgIGVsc2V7XG4gICAgICAgICAgICBpZihwcm9tcHRJbnZhbGlkSW1hZ2UpXG4gICAgICAgICAgICAgIHByb21wdEludmFsaWRJbWFnZShcIkdpdmVuIGZpbGUgY291bGQgbm90IGJlIHJlYWQhXCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgZnVuY3Rpb24gY2hlY2tHaXZlblVSTChub2RlLCBiZ09iail7XG4gICAgICAgIHZhciB1cmwgPSBiZ09ialsnYmFja2dyb3VuZC1pbWFnZSddO1xuICAgICAgICB2YXIgZXh0ZW5zaW9uID0gKHVybC5zcGxpdCgvWz8jXS8pWzBdKS5zcGxpdChcIi5cIikucG9wKCk7XG4gICAgICAgIHZhciB2YWxpZEV4dGVuc2lvbnMgPSBbXCJwbmdcIiwgXCJzdmdcIiwgXCJqcGdcIiwgXCJqcGVnXCJdO1xuXG4gICAgICAgIGlmKCF2YWxpZEV4dGVuc2lvbnMuaW5jbHVkZXMoZXh0ZW5zaW9uKSl7XG4gICAgICAgICAgaWYodHlwZW9mIHByb21wdEludmFsaWRJbWFnZSA9PT0gJ2Z1bmN0aW9uJylcbiAgICAgICAgICAgIHByb21wdEludmFsaWRJbWFnZShcIkludmFsaWQgVVJMIGlzIGdpdmVuIVwiKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAkLmFqYXgoe1xuICAgICAgICAgIHVybDogdXJsLFxuICAgICAgICAgIHR5cGU6ICdHRVQnLFxuICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uKHJlc3VsdCwgc3RhdHVzLCB4aHIpe1xuICAgICAgICAgICAgYXBwbHlCYWNrZ3JvdW5kKG5vZGUsIGJnT2JqKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIGVycm9yOiBmdW5jdGlvbih4aHIsIHN0YXR1cywgZXJyb3Ipe1xuICAgICAgICAgICAgaWYocHJvbXB0SW52YWxpZEltYWdlKVxuICAgICAgICAgICAgICBwcm9tcHRJbnZhbGlkSW1hZ2UoXCJJbnZhbGlkIFVSTCBpcyBnaXZlbiFcIik7XG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGZ1bmN0aW9uIGFwcGx5QmFja2dyb3VuZChub2RlLCBiZ09iaikge1xuXG4gICAgICAgIGlmKGVsZW1lbnRVdGlsaXRpZXMuaGFzQmFja2dyb3VuZEltYWdlKG5vZGUpKVxuICAgICAgICAgIHJldHVybjtcblxuICAgICAgICB2YXIgaW1ncyA9IG5vZGUuZGF0YSgnYmFja2dyb3VuZC1pbWFnZScpID8gbm9kZS5kYXRhKCdiYWNrZ3JvdW5kLWltYWdlJykuc3BsaXQoXCIgXCIpIDogW107XG4gICAgICAgIHZhciB4UG9zID0gbm9kZS5kYXRhKCdiYWNrZ3JvdW5kLXBvc2l0aW9uLXgnKSA/IG5vZGUuZGF0YSgnYmFja2dyb3VuZC1wb3NpdGlvbi14Jykuc3BsaXQoXCIgXCIpIDogW107XG4gICAgICAgIHZhciB5UG9zID0gbm9kZS5kYXRhKCdiYWNrZ3JvdW5kLXBvc2l0aW9uLXknKSA/IG5vZGUuZGF0YSgnYmFja2dyb3VuZC1wb3NpdGlvbi15Jykuc3BsaXQoXCIgXCIpIDogW107XG4gICAgICAgIHZhciB3aWR0aHMgPSBub2RlLmRhdGEoJ2JhY2tncm91bmQtd2lkdGgnKSA/IG5vZGUuZGF0YSgnYmFja2dyb3VuZC13aWR0aCcpLnNwbGl0KFwiIFwiKSA6IFtdO1xuICAgICAgICB2YXIgaGVpZ2h0cyA9IG5vZGUuZGF0YSgnYmFja2dyb3VuZC1oZWlnaHQnKSA/IG5vZGUuZGF0YSgnYmFja2dyb3VuZC1oZWlnaHQnKS5zcGxpdChcIiBcIikgOiBbXTtcbiAgICAgICAgdmFyIGZpdHMgPSBub2RlLmRhdGEoJ2JhY2tncm91bmQtZml0JykgPyBub2RlLmRhdGEoJ2JhY2tncm91bmQtZml0Jykuc3BsaXQoXCIgXCIpIDogW107XG4gICAgICAgIHZhciBvcGFjaXRpZXMgPSBub2RlLmRhdGEoJ2JhY2tncm91bmQtaW1hZ2Utb3BhY2l0eScpID8gKFwiXCIgKyBub2RlLmRhdGEoJ2JhY2tncm91bmQtaW1hZ2Utb3BhY2l0eScpKS5zcGxpdChcIiBcIikgOiBbXTtcblxuICAgICAgICB2YXIgaW5kZXhUb0luc2VydCA9IGltZ3MubGVuZ3RoO1xuXG4gICAgICAgIC8vIGluc2VydCB0byBsZW5ndGgtMVxuICAgICAgICBpZihlbGVtZW50VXRpbGl0aWVzLmhhc0Nsb25lTWFya2VyKGltZ3MpKXtcbiAgICAgICAgICBpbmRleFRvSW5zZXJ0LS07XG4gICAgICAgIH1cblxuICAgICAgICBpbWdzLnNwbGljZShpbmRleFRvSW5zZXJ0LCAwLCBiZ09ialsnYmFja2dyb3VuZC1pbWFnZSddKTtcbiAgICAgICAgZml0cy5zcGxpY2UoaW5kZXhUb0luc2VydCwgMCwgYmdPYmpbJ2JhY2tncm91bmQtZml0J10pO1xuICAgICAgICBvcGFjaXRpZXMuc3BsaWNlKGluZGV4VG9JbnNlcnQsIDAsIGJnT2JqWydiYWNrZ3JvdW5kLWltYWdlLW9wYWNpdHknXSk7XG4gICAgICAgIHhQb3Muc3BsaWNlKGluZGV4VG9JbnNlcnQsIDAsIGJnT2JqWydiYWNrZ3JvdW5kLXBvc2l0aW9uLXgnXSk7XG4gICAgICAgIHlQb3Muc3BsaWNlKGluZGV4VG9JbnNlcnQsIDAsIGJnT2JqWydiYWNrZ3JvdW5kLXBvc2l0aW9uLXknXSk7XG4gICAgICAgIHdpZHRocy5zcGxpY2UoaW5kZXhUb0luc2VydCwgMCwgYmdPYmpbJ2JhY2tncm91bmQtd2lkdGgnXSk7XG4gICAgICAgIGhlaWdodHMuc3BsaWNlKGluZGV4VG9JbnNlcnQsIDAsIGJnT2JqWydiYWNrZ3JvdW5kLWhlaWdodCddKTtcblxuICAgICAgICBub2RlLmRhdGEoJ2JhY2tncm91bmQtaW1hZ2UnLCBpbWdzLmpvaW4oXCIgXCIpKTtcbiAgICAgICAgbm9kZS5kYXRhKCdiYWNrZ3JvdW5kLXBvc2l0aW9uLXgnLCB4UG9zLmpvaW4oXCIgXCIpKTtcbiAgICAgICAgbm9kZS5kYXRhKCdiYWNrZ3JvdW5kLXBvc2l0aW9uLXknLCB5UG9zLmpvaW4oXCIgXCIpKTtcbiAgICAgICAgbm9kZS5kYXRhKCdiYWNrZ3JvdW5kLXdpZHRoJywgd2lkdGhzLmpvaW4oXCIgXCIpKTtcbiAgICAgICAgbm9kZS5kYXRhKCdiYWNrZ3JvdW5kLWhlaWdodCcsIGhlaWdodHMuam9pbihcIiBcIikpO1xuICAgICAgICBub2RlLmRhdGEoJ2JhY2tncm91bmQtZml0JywgZml0cy5qb2luKFwiIFwiKSk7XG4gICAgICAgIG5vZGUuZGF0YSgnYmFja2dyb3VuZC1pbWFnZS1vcGFjaXR5Jywgb3BhY2l0aWVzLmpvaW4oXCIgXCIpKTtcbiAgICAgICAgYmdPYmpbJ2ZpcnN0VGltZSddID0gZmFsc2U7XG5cbiAgICAgICAgaWYodXBkYXRlSW5mbylcbiAgICAgICAgICB1cGRhdGVJbmZvKCk7XG5cbiAgICAgIH1cbiAgICB9O1xuXG4gICAgZWxlbWVudFV0aWxpdGllcy5oYXNDbG9uZU1hcmtlciA9IGZ1bmN0aW9uIChpbWdzKSB7XG4gICAgICB2YXIgY2xvbmVJbWcgPSAnZGF0YTppbWFnZS9zdmcreG1sO3V0ZjgsJTNDc3ZnJTIwd2lkdGglM0QlMjIxMDAlMjIlMjBoZWlnaHQlM0QlMjIxMDAlMjIlMjB2aWV3Qm94JTNEJTIyMCUyMDAlMjAxMDAlMjAxMDAlMjIlMjBzdHlsZSUzRCUyMmZpbGwlM0Fub25lJTNCc3Ryb2tlJTNBYmxhY2slM0JzdHJva2Utd2lkdGglM0EwJTNCJTIyJTIweG1sbnMlM0QlMjJodHRwJTNBLy93d3cudzMub3JnLzIwMDAvc3ZnJTIyJTIwJTNFJTNDcmVjdCUyMHglM0QlMjIwJTIyJTIweSUzRCUyMjAlMjIlMjB3aWR0aCUzRCUyMjEwMCUyMiUyMGhlaWdodCUzRCUyMjEwMCUyMiUyMHN0eWxlJTNEJTIyZmlsbCUzQSUyMzgzODM4MyUyMi8lM0UlMjAlM0Mvc3ZnJTNFJztcbiAgICAgIHJldHVybiAoaW1ncy5pbmRleE9mKGNsb25lSW1nKSA+IC0xKTtcbiAgICB9O1xuXG4gICAgLy8gUmVtb3ZlIGEgYmFja2dyb3VuZCBpbWFnZSBmcm9tIGdpdmVuIG5vZGVzLlxuICAgIGVsZW1lbnRVdGlsaXRpZXMucmVtb3ZlQmFja2dyb3VuZEltYWdlID0gZnVuY3Rpb24gKG5vZGVzLCBiZ09iaikge1xuICAgICAgaWYoIW5vZGVzIHx8IG5vZGVzLmxlbmd0aCA9PSAwIHx8ICFiZ09iailcbiAgICAgICAgcmV0dXJuO1xuXG4gICAgICBmb3IodmFyIGkgPSAwOyBpIDwgbm9kZXMubGVuZ3RoOyBpKyspe1xuICAgICAgICB2YXIgbm9kZSA9IG5vZGVzW2ldO1xuICAgICAgICB2YXIgb2JqID0gYmdPYmpbbm9kZS5kYXRhKCdpZCcpXTtcbiAgICAgICAgaWYoIW9iailcbiAgICAgICAgICBjb250aW51ZTtcblxuICAgICAgICB2YXIgaW1ncyA9IG5vZGUuZGF0YSgnYmFja2dyb3VuZC1pbWFnZScpID8gbm9kZS5kYXRhKCdiYWNrZ3JvdW5kLWltYWdlJykuc3BsaXQoXCIgXCIpIDogW107XG4gICAgICAgIHZhciB4UG9zID0gbm9kZS5kYXRhKCdiYWNrZ3JvdW5kLXBvc2l0aW9uLXgnKSA/IG5vZGUuZGF0YSgnYmFja2dyb3VuZC1wb3NpdGlvbi14Jykuc3BsaXQoXCIgXCIpIDogW107XG4gICAgICAgIHZhciB5UG9zID0gbm9kZS5kYXRhKCdiYWNrZ3JvdW5kLXBvc2l0aW9uLXknKSA/IG5vZGUuZGF0YSgnYmFja2dyb3VuZC1wb3NpdGlvbi15Jykuc3BsaXQoXCIgXCIpIDogW107XG4gICAgICAgIHZhciB3aWR0aHMgPSBub2RlLmRhdGEoJ2JhY2tncm91bmQtd2lkdGgnKSA/IG5vZGUuZGF0YSgnYmFja2dyb3VuZC13aWR0aCcpLnNwbGl0KFwiIFwiKSA6IFtdO1xuICAgICAgICB2YXIgaGVpZ2h0cyA9IG5vZGUuZGF0YSgnYmFja2dyb3VuZC1oZWlnaHQnKSA/IG5vZGUuZGF0YSgnYmFja2dyb3VuZC1oZWlnaHQnKS5zcGxpdChcIiBcIikgOiBbXTtcbiAgICAgICAgdmFyIGZpdHMgPSBub2RlLmRhdGEoJ2JhY2tncm91bmQtZml0JykgPyBub2RlLmRhdGEoJ2JhY2tncm91bmQtZml0Jykuc3BsaXQoXCIgXCIpIDogW107XG4gICAgICAgIHZhciBvcGFjaXRpZXMgPSBub2RlLmRhdGEoJ2JhY2tncm91bmQtaW1hZ2Utb3BhY2l0eScpID8gKFwiXCIgKyBub2RlLmRhdGEoJ2JhY2tncm91bmQtaW1hZ2Utb3BhY2l0eScpKS5zcGxpdChcIiBcIikgOiBbXTtcblxuICAgICAgICB2YXIgaW5kZXggPSAtMTtcbiAgICAgICAgaWYodHlwZW9mIG9ialsnYmFja2dyb3VuZC1pbWFnZSddID09PSBcInN0cmluZ1wiKVxuICAgICAgICAgIGluZGV4ID0gaW1ncy5pbmRleE9mKG9ialsnYmFja2dyb3VuZC1pbWFnZSddLnNwbGl0KFwiIFwiKVswXSk7XG4gICAgICAgIGVsc2UgaWYoQXJyYXkuaXNBcnJheShvYmpbJ2JhY2tncm91bmQtaW1hZ2UnXSkpXG4gICAgICAgICAgaW5kZXggPSBpbWdzLmluZGV4T2Yob2JqWydiYWNrZ3JvdW5kLWltYWdlJ11bMF0pO1xuXG4gICAgICAgIGlmKGluZGV4ID4gLTEpe1xuICAgICAgICAgIGltZ3Muc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgICBmaXRzLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgICAgb3BhY2l0aWVzLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgICAgeFBvcy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICAgIHlQb3Muc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgICB3aWR0aHMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgICBoZWlnaHRzLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgIH1cblxuICAgICAgICBub2RlLmRhdGEoJ2JhY2tncm91bmQtaW1hZ2UnLCBpbWdzLmpvaW4oXCIgXCIpKTtcbiAgICAgICAgbm9kZS5kYXRhKCdiYWNrZ3JvdW5kLXBvc2l0aW9uLXgnLCB4UG9zLmpvaW4oXCIgXCIpKTtcbiAgICAgICAgbm9kZS5kYXRhKCdiYWNrZ3JvdW5kLXBvc2l0aW9uLXknLCB5UG9zLmpvaW4oXCIgXCIpKTtcbiAgICAgICAgbm9kZS5kYXRhKCdiYWNrZ3JvdW5kLXdpZHRoJywgd2lkdGhzLmpvaW4oXCIgXCIpKTtcbiAgICAgICAgbm9kZS5kYXRhKCdiYWNrZ3JvdW5kLWhlaWdodCcsIGhlaWdodHMuam9pbihcIiBcIikpO1xuICAgICAgICBub2RlLmRhdGEoJ2JhY2tncm91bmQtZml0JywgZml0cy5qb2luKFwiIFwiKSk7XG4gICAgICAgIG5vZGUuZGF0YSgnYmFja2dyb3VuZC1pbWFnZS1vcGFjaXR5Jywgb3BhY2l0aWVzLmpvaW4oXCIgXCIpKTtcbiAgICAgICAgYmdPYmpbJ2ZpcnN0VGltZSddID0gZmFsc2U7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGVsZW1lbnRVdGlsaXRpZXMucmV2ZXJzZUVkZ2UgPSBmdW5jdGlvbihlZGdlKXtcbiAgICAgIHZhciBvbGRTb3VyY2UgPSBlZGdlLnNvdXJjZSgpLmlkKCk7XG4gICAgICB2YXIgb2xkVGFyZ2V0ID0gZWRnZS50YXJnZXQoKS5pZCgpO1xuICAgICAgdmFyIG9sZFBvcnRTb3VyY2UgPSBlZGdlLmRhdGEoXCJwb3J0c291cmNlXCIpO1xuICAgICAgdmFyIG9sZFBvcnRUYXJnZXQgPSBlZGdlLmRhdGEoXCJwb3J0dGFyZ2V0XCIpO1xuICAgICAgdmFyIHNlZ21lbnRQb2ludHMgPSBlZGdlLnNlZ21lbnRQb2ludHMoKTtcbiAgICAgIHZhciBjb250cm9sUG9pbnRzID0gZWRnZS5jb250cm9sUG9pbnRzKCk7XG5cbiAgICAgIGVkZ2UuZGF0YSgpLnNvdXJjZSA9IG9sZFRhcmdldDtcbiAgICAgIGVkZ2UuZGF0YSgpLnRhcmdldCA9IG9sZFNvdXJjZTtcbiAgICAgIGVkZ2UuZGF0YSgpLnBvcnRzb3VyY2UgPSBvbGRQb3J0VGFyZ2V0O1xuICAgICAgZWRnZS5kYXRhKCkucG9ydHRhcmdldCA9IG9sZFBvcnRTb3VyY2U7XG4gICAgICAgZWRnZSA9IGVkZ2UubW92ZSh7XG4gICAgICAgICB0YXJnZXQ6IG9sZFNvdXJjZSxcbiAgICAgICAgIHNvdXJjZSA6IG9sZFRhcmdldCAgICAgICAgXG4gICAgICB9KTtcblxuICAgICAgaWYoQXJyYXkuaXNBcnJheShzZWdtZW50UG9pbnRzKSl7XG4gICAgICAgIHNlZ21lbnRQb2ludHMucmV2ZXJzZSgpO1xuICAgICAgICBlZGdlLmRhdGEoKS5iZW5kUG9pbnRQb3NpdGlvbnMgPSBzZWdtZW50UG9pbnRzO1xuICAgICAgICBpZihBcnJheS5pc0FycmF5KGNvbnRyb2xQb2ludHMpKSB7XG4gICAgICAgICAgY29udHJvbFBvaW50cy5yZXZlcnNlKCk7XG4gICAgICAgICAgZWRnZS5kYXRhKCkuY29udHJvbFBvaW50UG9zaXRpb25zID0gY29udHJvbFBvaW50cztcbiAgICAgICAgfVxuICAgICAgICB2YXIgZWRnZUVkaXRpbmcgPSBjeS5lZGdlRWRpdGluZygnZ2V0Jyk7XG4gICAgICAgIGVkZ2VFZGl0aW5nLmluaXRBbmNob3JQb2ludHMoZWRnZSk7XG4gICAgICB9XG4gICAgXG5cbiAgICAgIHJldHVybiBlZGdlO1xuICAgIH1cblxuICB9XG5cbiAgcmV0dXJuIGVsZW1lbnRVdGlsaXRpZXNFeHRlbmRlcjtcbn07XG4iLCIvKiBcbiAqIFV0aWxpdHkgZmlsZSB0byBnZXQgYW5kIHNldCB0aGUgbGlicmFyaWVzIHRvIHdoaWNoIHNiZ252aXogaXMgZGVwZW5kZW50IGZyb20gYW55IGZpbGUuXG4gKi9cblxudmFyIGxpYlV0aWxpdGllcyA9IGZ1bmN0aW9uKCl7XG59O1xuXG5saWJVdGlsaXRpZXMuc2V0TGlicyA9IGZ1bmN0aW9uKGxpYnMpIHtcbiAgdGhpcy5saWJzID0gbGlicztcbn07XG5cbmxpYlV0aWxpdGllcy5nZXRMaWJzID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLmxpYnM7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGxpYlV0aWxpdGllczsiLCJ2YXIgbGlicyA9IHJlcXVpcmUoJy4vbGliLXV0aWxpdGllcycpLmdldExpYnMoKTtcblxuLypcbiAqIFRoZSBtYWluIHV0aWxpdGllcyB0byBiZSBleHBvc2VkIGRpcmVjdGx5LlxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHtcblxuICB2YXIgZWxlbWVudFV0aWxpdGllcywgb3B0aW9ucywgY3ksIHNiZ252aXpJbnN0YW5jZTtcblxuICBmdW5jdGlvbiBtYWluVXRpbGl0aWVzIChwYXJhbSkge1xuICAgIGVsZW1lbnRVdGlsaXRpZXMgPSBwYXJhbS5lbGVtZW50VXRpbGl0aWVzO1xuICAgIG9wdGlvbnMgPSBwYXJhbS5vcHRpb25VdGlsaXRpZXMuZ2V0T3B0aW9ucygpO1xuICAgIGN5ID0gcGFyYW0uc2JnbnZpekluc3RhbmNlVXRpbGl0aWVzLmdldEN5KCk7XG4gICAgc2JnbnZpekluc3RhbmNlID0gcGFyYW0uc2JnbnZpekluc3RhbmNlVXRpbGl0aWVzLmdldEluc3RhbmNlKCk7XG4gIH07XG5cbiAgLypcbiAgICogQWRkcyBhIG5ldyBub2RlIHdpdGggdGhlIGdpdmVuIGNsYXNzIGFuZCBhdCB0aGUgZ2l2ZW4gY29vcmRpbmF0ZXMuIENvbnNpZGVycyB1bmRvYWJsZSBvcHRpb24uXG4gICAqL1xuICBtYWluVXRpbGl0aWVzLmFkZE5vZGUgPSBmdW5jdGlvbih4LCB5ICwgbm9kZVBhcmFtcywgaWQsIHBhcmVudCwgdmlzaWJpbGl0eSkge1xuICAgIGlmICggZWxlbWVudFV0aWxpdGllcy5pc0dyYXBoVG9wb2xvZ3lMb2NrZWQoKSApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyB1cGRhdGUgbWFwIHR5cGVcbiAgICBpZiAodHlwZW9mIG5vZGVQYXJhbXMgPT0gJ29iamVjdCcpe1xuLyogXG4gICAgICBpZiAoIWVsZW1lbnRVdGlsaXRpZXMuZ2V0TWFwVHlwZSgpKVxuICAgICAgICBlbGVtZW50VXRpbGl0aWVzLnNldE1hcFR5cGUobm9kZVBhcmFtcy5sYW5ndWFnZSk7XG4gICAgICBlbHNlIGlmIChlbGVtZW50VXRpbGl0aWVzLmdldE1hcFR5cGUoKSAhPSBub2RlUGFyYW1zLmxhbmd1YWdlKVxuICAgICAgICBlbGVtZW50VXRpbGl0aWVzLnNldE1hcFR5cGUoXCJVbmtub3duXCIpOyAqL1xuICAgIH1cblxuICAgIGlmICghb3B0aW9ucy51bmRvYWJsZSkge1xuICAgICAgcmV0dXJuIGVsZW1lbnRVdGlsaXRpZXMuYWRkTm9kZSh4LCB5LCBub2RlUGFyYW1zLCBpZCwgcGFyZW50LCB2aXNpYmlsaXR5KTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICB2YXIgcGFyYW0gPSB7XG4gICAgICAgIG5ld05vZGUgOiB7XG4gICAgICAgICAgeDogeCxcbiAgICAgICAgICB5OiB5LFxuICAgICAgICAgIGNsYXNzOiBub2RlUGFyYW1zLFxuICAgICAgICAgIGlkOiBpZCxcbiAgICAgICAgICBwYXJlbnQ6IHBhcmVudCxcbiAgICAgICAgICB2aXNpYmlsaXR5OiB2aXNpYmlsaXR5XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIGN5LnVuZG9SZWRvKCkuZG8oXCJhZGROb2RlXCIsIHBhcmFtKTtcbiAgICB9XG4gIH07XG5cbiAgLypcbiAgICogQWRkcyBhIG5ldyBlZGdlIHdpdGggdGhlIGdpdmVuIGNsYXNzIGFuZCBoYXZpbmcgdGhlIGdpdmVuIHNvdXJjZSBhbmQgdGFyZ2V0IGlkcy4gQ29uc2lkZXJzIHVuZG9hYmxlIG9wdGlvbi5cbiAgICovXG4gIG1haW5VdGlsaXRpZXMuYWRkRWRnZSA9IGZ1bmN0aW9uKHNvdXJjZSwgdGFyZ2V0LCBlZGdlUGFyYW1zLCBpbnZhbGlkRWRnZUNhbGxiYWNrLCBpZCwgdmlzaWJpbGl0eSkge1xuICAgIGlmICggZWxlbWVudFV0aWxpdGllcy5pc0dyYXBoVG9wb2xvZ3lMb2NrZWQoKSApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyB1cGRhdGUgbWFwIHR5cGVcbiAgICBpZiAodHlwZW9mIGVkZ2VQYXJhbXMgPT0gJ29iamVjdCcpe1xuXG4gICAgIC8qICBpZiAoIWVsZW1lbnRVdGlsaXRpZXMuZ2V0TWFwVHlwZSgpKVxuICAgICAgICBlbGVtZW50VXRpbGl0aWVzLnNldE1hcFR5cGUoZWRnZVBhcmFtcy5sYW5ndWFnZSk7XG4gICAgICBlbHNlIGlmIChlbGVtZW50VXRpbGl0aWVzLmdldE1hcFR5cGUoKSAhPSBlZGdlUGFyYW1zLmxhbmd1YWdlKVxuICAgICAgICBlbGVtZW50VXRpbGl0aWVzLnNldE1hcFR5cGUoXCJIeWJyaWRBbnlcIik7ICovXG4gICAgfVxuICAgIC8vIEdldCB0aGUgdmFsaWRhdGlvbiByZXN1bHRcbiAgICB2YXIgZWRnZWNsYXNzID0gZWRnZVBhcmFtcy5jbGFzcyA/IGVkZ2VQYXJhbXMuY2xhc3MgOiBlZGdlUGFyYW1zO1xuICAgIHZhciB2YWxpZGF0aW9uID0gZWxlbWVudFV0aWxpdGllcy52YWxpZGF0ZUFycm93RW5kcyhlZGdlY2xhc3MsIGN5LmdldEVsZW1lbnRCeUlkKHNvdXJjZSksIGN5LmdldEVsZW1lbnRCeUlkKHRhcmdldCkpO1xuXG4gICAgLy8gSWYgdmFsaWRhdGlvbiByZXN1bHQgaXMgJ2ludmFsaWQnIGNhbmNlbCB0aGUgb3BlcmF0aW9uXG4gICAgaWYgKHZhbGlkYXRpb24gPT09ICdpbnZhbGlkJykge1xuICAgICAgaWYodHlwZW9mIGludmFsaWRFZGdlQ2FsbGJhY2sgPT09IFwiZnVuY3Rpb25cIil7XG4gICAgICAgIGludmFsaWRFZGdlQ2FsbGJhY2soKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBJZiB2YWxpZGF0aW9uIHJlc3VsdCBpcyAncmV2ZXJzZScgcmV2ZXJzZSB0aGUgc291cmNlLXRhcmdldCBwYWlyIGJlZm9yZSBjcmVhdGluZyB0aGUgZWRnZVxuICAgIGlmICh2YWxpZGF0aW9uID09PSAncmV2ZXJzZScpIHtcbiAgICAgIHZhciB0ZW1wID0gc291cmNlO1xuICAgICAgc291cmNlID0gdGFyZ2V0O1xuICAgICAgdGFyZ2V0ID0gdGVtcDtcbiAgICB9XG5cbiAgICBpZiAoIW9wdGlvbnMudW5kb2FibGUpIHtcbiAgICAgIHJldHVybiBlbGVtZW50VXRpbGl0aWVzLmFkZEVkZ2Uoc291cmNlLCB0YXJnZXQsIGVkZ2VQYXJhbXMsIGlkLCB2aXNpYmlsaXR5KTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICB2YXIgcGFyYW0gPSB7XG4gICAgICAgIG5ld0VkZ2UgOiB7XG4gICAgICAgICAgc291cmNlOiBzb3VyY2UsXG4gICAgICAgICAgdGFyZ2V0OiB0YXJnZXQsXG4gICAgICAgICAgY2xhc3M6IGVkZ2VQYXJhbXMsXG4gICAgICAgICAgaWQ6IGlkLFxuICAgICAgICAgIHZpc2liaWxpdHk6IHZpc2liaWxpdHlcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgdmFyIHJlc3VsdCA9IGN5LnVuZG9SZWRvKCkuZG8oXCJhZGRFZGdlXCIsIHBhcmFtKTtcbiAgICAgIHJldHVybiByZXN1bHQuZWxlcztcbiAgICB9XG4gIH07XG5cbiAgLypcbiAgICogQWRkcyBhIHByb2Nlc3Mgd2l0aCBjb252ZW5pZW50IGVkZ2VzLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBwbGVhc2Ugc2VlICdodHRwczovL2dpdGh1Yi5jb20vaVZpcy1hdC1CaWxrZW50L25ld3QvaXNzdWVzLzknLlxuICAgKiBDb25zaWRlcnMgdW5kb2FibGUgb3B0aW9uLlxuICAgKi9cbiAgbWFpblV0aWxpdGllcy5hZGRQcm9jZXNzV2l0aENvbnZlbmllbnRFZGdlcyA9IGZ1bmN0aW9uKF9zb3VyY2UsIF90YXJnZXQsIHByb2Nlc3NUeXBlKSB7XG4gICAgaWYgKCBlbGVtZW50VXRpbGl0aWVzLmlzR3JhcGhUb3BvbG9neUxvY2tlZCgpICkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIElmIHNvdXJjZSBhbmQgdGFyZ2V0IElEcyBhcmUgZ2l2ZW4gZ2V0IHRoZSBlbGVtZW50cyBieSBJRHNcbiAgICB2YXIgc291cmNlID0gdHlwZW9mIF9zb3VyY2UgPT09ICdzdHJpbmcnID8gY3kuZ2V0RWxlbWVudEJ5SWQoX3NvdXJjZSkgOiBfc291cmNlO1xuICAgIHZhciB0YXJnZXQgPSB0eXBlb2YgX3RhcmdldCA9PT0gJ3N0cmluZycgPyBjeS5nZXRFbGVtZW50QnlJZChfdGFyZ2V0KSA6IF90YXJnZXQ7XG5cbiAgICAvLyBJZiBzb3VyY2Ugb3IgdGFyZ2V0IGRvZXMgbm90IGhhdmUgYW4gRVBOIGNsYXNzIHRoZSBvcGVyYXRpb24gaXMgbm90IHZhbGlkXG4gICAgaWYgKCFlbGVtZW50VXRpbGl0aWVzLmlzRVBOQ2xhc3Moc291cmNlKSB8fCAhZWxlbWVudFV0aWxpdGllcy5pc0VQTkNsYXNzKHRhcmdldCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIW9wdGlvbnMudW5kb2FibGUpIHtcbiAgICAgIHJldHVybiBlbGVtZW50VXRpbGl0aWVzLmFkZFByb2Nlc3NXaXRoQ29udmVuaWVudEVkZ2VzKF9zb3VyY2UsIF90YXJnZXQsIHByb2Nlc3NUeXBlKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICB2YXIgcGFyYW0gPSB7XG4gICAgICAgIHNvdXJjZTogX3NvdXJjZSxcbiAgICAgICAgdGFyZ2V0OiBfdGFyZ2V0LFxuICAgICAgICBwcm9jZXNzVHlwZTogcHJvY2Vzc1R5cGVcbiAgICAgIH07XG5cbiAgICAgIGN5LnVuZG9SZWRvKCkuZG8oXCJhZGRQcm9jZXNzV2l0aENvbnZlbmllbnRFZGdlc1wiLCBwYXJhbSk7XG4gICAgfVxuICB9O1xuXG4gIC8vIGNvbnZlcnQgY29sbGFwc2VkIGNvbXBvdW5kIG5vZGVzIHRvIHNpbXBsZSBub2Rlc1xuICAvLyBhbmQgdXBkYXRlIHBvcnQgdmFsdWVzIG9mIHBhc3RlZCBub2RlcyBhbmQgZWRnZXNcbiAgdmFyIGNsb25lQ29sbGFwc2VkTm9kZXNBbmRQb3J0cyA9IGZ1bmN0aW9uIChlbGVzQmVmb3JlKXtcbiAgICBpZiAoIGVsZW1lbnRVdGlsaXRpZXMuaXNHcmFwaFRvcG9sb2d5TG9ja2VkKCkgKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY3kuZWxlbWVudHMoKS51bnNlbGVjdCgpO1xuICAgIHZhciBlbGVzQWZ0ZXIgPSBjeS5lbGVtZW50cygpO1xuICAgIHZhciBlbGVzRGlmZiA9IGVsZXNBZnRlci5kaWZmKGVsZXNCZWZvcmUpLmxlZnQ7XG5cbiAgICAvLyBzaGFsbG93IGNvcHkgY29sbGFwc2VkIG5vZGVzIC0gY29sbGFwc2VkIGNvbXBvdW5kcyBiZWNvbWUgc2ltcGxlIG5vZGVzXG4gICAgLy8gZGF0YSByZWxhdGVkIHRvIGNvbGxhcHNlZCBub2RlcyBhcmUgcmVtb3ZlZCBmcm9tIGdlbmVyYXRlZCBjbG9uZXNcbiAgICAvLyByZWxhdGVkIGlzc3VlOiBodHRwczovL2dpdGh1Yi5jb20vaVZpcy1hdC1CaWxrZW50L25ld3QvaXNzdWVzLzE0NVxuICAgIHZhciBjb2xsYXBzZWROb2RlcyA9IGVsZXNEaWZmLmZpbHRlcignbm9kZS5jeS1leHBhbmQtY29sbGFwc2UtY29sbGFwc2VkLW5vZGUnKTtcblxuICAgIGNvbGxhcHNlZE5vZGVzLmNvbm5lY3RlZEVkZ2VzKCkucmVtb3ZlKCk7XG4gICAgY29sbGFwc2VkTm9kZXMucmVtb3ZlQ2xhc3MoJ2N5LWV4cGFuZC1jb2xsYXBzZS1jb2xsYXBzZWQtbm9kZScpO1xuICAgIGNvbGxhcHNlZE5vZGVzLnJlbW92ZURhdGEoJ2NvbGxhcHNlZENoaWxkcmVuJyk7XG4gICAgY29sbGFwc2VkTm9kZXMucmVtb3ZlRGF0YSgncG9zaXRpb24tYmVmb3JlLWNvbGxhcHNlIHNpemUtYmVmb3JlLWNvbGxhcHNlJyk7XG4gICAgY29sbGFwc2VkTm9kZXMucmVtb3ZlRGF0YSgnZXhwYW5kY29sbGFwc2VSZW5kZXJlZEN1ZVNpemUgZXhwYW5kY29sbGFwc2VSZW5kZXJlZFN0YXJ0WCBleHBhbmRjb2xsYXBzZVJlbmRlcmVkU3RhcnRZJyk7XG5cbiAgICAvLyBjbG9uaW5nIHBvcnRzXG4gICAgZWxlc0RpZmYubm9kZXMoKS5mb3JFYWNoKGZ1bmN0aW9uKF9ub2RlKXtcbiAgICAgIGlmKF9ub2RlLmRhdGEoXCJwb3J0c1wiKS5sZW5ndGggPT0gMil7XG4gICAgICAgICAgdmFyIG9sZFBvcnROYW1lMCA9IF9ub2RlLmRhdGEoXCJwb3J0c1wiKVswXS5pZDtcbiAgICAgICAgICB2YXIgb2xkUG9ydE5hbWUxID0gX25vZGUuZGF0YShcInBvcnRzXCIpWzFdLmlkO1xuICAgICAgICAgIF9ub2RlLmRhdGEoXCJwb3J0c1wiKVswXS5pZCA9IF9ub2RlLmlkKCkgKyBcIi4xXCI7XG4gICAgICAgICAgX25vZGUuZGF0YShcInBvcnRzXCIpWzFdLmlkID0gX25vZGUuaWQoKSArIFwiLjJcIjtcblxuICAgICAgICAgIF9ub2RlLm91dGdvZXJzKCkuZWRnZXMoKS5mb3JFYWNoKGZ1bmN0aW9uKF9lZGdlKXtcbiAgICAgICAgICAgIGlmKF9lZGdlLmRhdGEoXCJwb3J0c291cmNlXCIpID09IG9sZFBvcnROYW1lMCl7XG4gICAgICAgICAgICAgIF9lZGdlLmRhdGEoXCJwb3J0c291cmNlXCIsIF9ub2RlLmRhdGEoXCJwb3J0c1wiKVswXS5pZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmKF9lZGdlLmRhdGEoXCJwb3J0c291cmNlXCIpID09IG9sZFBvcnROYW1lMSl7XG4gICAgICAgICAgICAgIF9lZGdlLmRhdGEoXCJwb3J0c291cmNlXCIsIF9ub2RlLmRhdGEoXCJwb3J0c1wiKVsxXS5pZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNle1xuICAgICAgICAgICAgICBfZWRnZS5kYXRhKFwicG9ydHNvdXJjZVwiLCBfbm9kZS5pZCgpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgICBfbm9kZS5pbmNvbWVycygpLmVkZ2VzKCkuZm9yRWFjaChmdW5jdGlvbihfZWRnZSl7XG4gICAgICAgICAgICBpZihfZWRnZS5kYXRhKFwicG9ydHRhcmdldFwiKSA9PSBvbGRQb3J0TmFtZTApe1xuICAgICAgICAgICAgICBfZWRnZS5kYXRhKFwicG9ydHRhcmdldFwiLCBfbm9kZS5kYXRhKFwicG9ydHNcIilbMF0uaWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZihfZWRnZS5kYXRhKFwicG9ydHRhcmdldFwiKSA9PSBvbGRQb3J0TmFtZTEpe1xuICAgICAgICAgICAgICBfZWRnZS5kYXRhKFwicG9ydHRhcmdldFwiLCBfbm9kZS5kYXRhKFwicG9ydHNcIilbMV0uaWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZXtcbiAgICAgICAgICAgICAgX2VkZ2UuZGF0YShcInBvcnR0YXJnZXRcIiwgX25vZGUuaWQoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBlbHNle1xuICAgICAgICBfbm9kZS5vdXRnb2VycygpLmVkZ2VzKCkuZm9yRWFjaChmdW5jdGlvbihfZWRnZSl7XG4gICAgICAgICAgX2VkZ2UuZGF0YShcInBvcnRzb3VyY2VcIiwgX25vZGUuaWQoKSk7XG4gICAgICAgIH0pO1xuICAgICAgICBfbm9kZS5pbmNvbWVycygpLmVkZ2VzKCkuZm9yRWFjaChmdW5jdGlvbihfZWRnZSl7XG4gICAgICAgICAgX2VkZ2UuZGF0YShcInBvcnR0YXJnZXRcIiwgX25vZGUuaWQoKSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGVsZXNEaWZmLnNlbGVjdCgpO1xuICB9XG5cbiAgLypcbiAgICogQ2xvbmUgZ2l2ZW4gZWxlbWVudHMuIENvbnNpZGVycyB1bmRvYWJsZSBvcHRpb24uIFJlcXVpcmVzIGN5dG9zY2FwZS1jbGlwYm9hcmQgZXh0ZW5zaW9uLlxuICAgKi9cbiAgbWFpblV0aWxpdGllcy5jbG9uZUVsZW1lbnRzID0gZnVuY3Rpb24gKGVsZXMsIHBhc3RlQXRNb3VzZUxvYykge1xuICAgIGlmICggZWxlbWVudFV0aWxpdGllcy5pc0dyYXBoVG9wb2xvZ3lMb2NrZWQoKSApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoZWxlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmNvcHlFbGVtZW50cyhlbGVzKTtcblxuICAgIHRoaXMucGFzdGVFbGVtZW50cyhwYXN0ZUF0TW91c2VMb2MpO1xuICB9O1xuXG4gIC8qXG4gICAqIENvcHkgZ2l2ZW4gZWxlbWVudHMgdG8gY2xpcGJvYXJkLiBSZXF1aXJlcyBjeXRvc2NhcGUtY2xpcGJvYXJkIGV4dGVuc2lvbi5cbiAgICovXG4gIG1haW5VdGlsaXRpZXMuY29weUVsZW1lbnRzID0gZnVuY3Rpb24gKGVsZXMpIHtcbiAgICBjeS5jbGlwYm9hcmQoKS5jb3B5KGVsZXMpO1xuICB9O1xuXG4gIC8qXG4gICAqIFBhc3RlIHRoZSBlbGVtZW50cyBjb3BpZWQgdG8gY2xpcGJvYXJkLiBDb25zaWRlcnMgdW5kb2FibGUgb3B0aW9uLiBSZXF1aXJlcyBjeXRvc2NhcGUtY2xpcGJvYXJkIGV4dGVuc2lvbi5cbiAgICovXG4gIG1haW5VdGlsaXRpZXMucGFzdGVFbGVtZW50cyA9IGZ1bmN0aW9uKHBhc3RlQXRNb3VzZUxvYykge1xuICAgIGlmICggZWxlbWVudFV0aWxpdGllcy5pc0dyYXBoVG9wb2xvZ3lMb2NrZWQoKSApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgZWxlc0JlZm9yZSA9IGN5LmVsZW1lbnRzKCk7XG5cbiAgICBpZiAob3B0aW9ucy51bmRvYWJsZSkge1xuICAgICAgY3kudW5kb1JlZG8oKS5kbyhcInBhc3RlXCIse3Bhc3RlQXRNb3VzZUxvYzogcGFzdGVBdE1vdXNlTG9jfSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgY3kuY2xpcGJvYXJkKCkucGFzdGUoKTtcbiAgICB9XG4gICAgY2xvbmVDb2xsYXBzZWROb2Rlc0FuZFBvcnRzKGVsZXNCZWZvcmUpO1xuICAgIGN5Lm5vZGVzKFwiOnNlbGVjdGVkXCIpLmVtaXQoJ2RhdGEnKTtcbiAgfTtcblxuICAvKlxuICAgKiBBbGlnbnMgZ2l2ZW4gbm9kZXMgaW4gZ2l2ZW4gaG9yaXpvbnRhbCBhbmQgdmVydGljYWwgb3JkZXIuXG4gICAqIEhvcml6b250YWwgYW5kIHZlcnRpY2FsIHBhcmFtZXRlcnMgbWF5IGJlICdub25lJyBvciB1bmRlZmluZWQuXG4gICAqIGFsaWduVG8gcGFyYW1ldGVyIGluZGljYXRlcyB0aGUgbGVhZGluZyBub2RlLlxuICAgKiBSZXF1cmlyZXMgY3l0b3NjYXBlLWdyaWQtZ3VpZGUgZXh0ZW5zaW9uIGFuZCBjb25zaWRlcnMgdW5kb2FibGUgb3B0aW9uLlxuICAgKi9cbiAgbWFpblV0aWxpdGllcy5hbGlnbiA9IGZ1bmN0aW9uIChub2RlcywgaG9yaXpvbnRhbCwgdmVydGljYWwsIGFsaWduVG8pIHtcbiAgICBpZiAobm9kZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMudW5kb2FibGUpIHtcbiAgICAgIGN5LnVuZG9SZWRvKCkuZG8oXCJhbGlnblwiLCB7XG4gICAgICAgIG5vZGVzOiBub2RlcyxcbiAgICAgICAgaG9yaXpvbnRhbDogaG9yaXpvbnRhbCxcbiAgICAgICAgdmVydGljYWw6IHZlcnRpY2FsLFxuICAgICAgICBhbGlnblRvOiBhbGlnblRvXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgbm9kZXMuYWxpZ24oaG9yaXpvbnRhbCwgdmVydGljYWwsIGFsaWduVG8pO1xuICAgIH1cblxuICAgIGlmKGN5LmVkZ2VzKFwiOnNlbGVjdGVkXCIpLmxlbmd0aCA9PSAxICkge1xuICAgICAgY3kuZWRnZXMoKS51bnNlbGVjdCgpOyAgICAgIFxuICAgIH1cbiAgICBcbiAgfTtcblxuICAvKlxuICAgKiBDcmVhdGUgY29tcG91bmQgZm9yIGdpdmVuIG5vZGVzLiBjb21wb3VuZFR5cGUgbWF5IGJlICdjb21wbGV4JyBvciAnY29tcGFydG1lbnQnLlxuICAgKiBUaGlzIG1ldGhvZCBjb25zaWRlcnMgdW5kb2FibGUgb3B0aW9uLlxuICAgKi9cbiAgbWFpblV0aWxpdGllcy5jcmVhdGVDb21wb3VuZEZvckdpdmVuTm9kZXMgPSBmdW5jdGlvbiAoX25vZGVzLCBjb21wb3VuZFR5cGUpIHtcbiAgICBpZiAoIGVsZW1lbnRVdGlsaXRpZXMuaXNHcmFwaFRvcG9sb2d5TG9ja2VkKCkgKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIG5vZGVzID0gX25vZGVzO1xuICAgIC8qXG4gICAgICogRWxlbWluYXRlIHRoZSBub2RlcyB3aGljaCBjYW5ub3QgaGF2ZSBhIHBhcmVudCB3aXRoIGdpdmVuIGNvbXBvdW5kIHR5cGVcbiAgICAgKi9cbiAgICBub2RlcyA9IF9ub2Rlcy5maWx0ZXIoZnVuY3Rpb24gKGVsZW1lbnQsIGkpIHtcbiAgICAgIGlmKHR5cGVvZiBlbGVtZW50ID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgIGVsZW1lbnQgPSBpO1xuICAgICAgfVxuXG4gICAgICB2YXIgc2JnbmNsYXNzID0gZWxlbWVudC5kYXRhKFwiY2xhc3NcIik7XG4gICAgICByZXR1cm4gZWxlbWVudFV0aWxpdGllcy5pc1ZhbGlkUGFyZW50KHNiZ25jbGFzcywgY29tcG91bmRUeXBlLCBlbGVtZW50KTtcbiAgICB9KTtcblxuICAgIG5vZGVzID0gZWxlbWVudFV0aWxpdGllcy5nZXRUb3BNb3N0Tm9kZXMobm9kZXMpO1xuXG4gICAgLy8gQWxsIGVsZW1lbnRzIHNob3VsZCBoYXZlIHRoZSBzYW1lIHBhcmVudCBhbmQgdGhlIGNvbW1vbiBwYXJlbnQgc2hvdWxkIG5vdCBiZSBhICdjb21wbGV4J1xuICAgIC8vIGlmIGNvbXBvdW5kVHlwZSBpcyAnY29tcGFydGVudCdcbiAgICAvLyBiZWNhdXNlIHRoZSBvbGQgY29tbW9uIHBhcmVudCB3aWxsIGJlIHRoZSBwYXJlbnQgb2YgdGhlIG5ldyBjb21wYXJ0bWVudCBhZnRlciB0aGlzIG9wZXJhdGlvbiBhbmRcbiAgICAvLyAnY29tcGxleGVzJyBjYW5ub3QgaW5jbHVkZSAnY29tcGFydG1lbnRzJ1xuICAgIGlmIChub2Rlcy5sZW5ndGggPT0gMCB8fCAhZWxlbWVudFV0aWxpdGllcy5hbGxIYXZlVGhlU2FtZVBhcmVudChub2RlcylcbiAgICAgICAgICAgIHx8ICggKGNvbXBvdW5kVHlwZSA9PT0gJ2NvbXBhcnRtZW50JyB8fCBjb21wb3VuZFR5cGUgPT0gJ3N1Ym1hcCcpICYmIG5vZGVzLnBhcmVudCgpLmRhdGEoJ2NsYXNzJylcbiAgICAgICAgICAgICYmIG5vZGVzLnBhcmVudCgpLmRhdGEoJ2NsYXNzJykuc3RhcnRzV2l0aCgnY29tcGxleCcpICkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoY3kudW5kb1JlZG8oKSkge1xuICAgICAgdmFyIHBhcmFtID0ge1xuICAgICAgICBjb21wb3VuZFR5cGU6IGNvbXBvdW5kVHlwZSxcbiAgICAgICAgbm9kZXNUb01ha2VDb21wb3VuZDogbm9kZXNcbiAgICAgIH07XG5cbiAgICAgIGN5LnVuZG9SZWRvKCkuZG8oXCJjcmVhdGVDb21wb3VuZEZvckdpdmVuTm9kZXNcIiwgcGFyYW0pO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGVsZW1lbnRVdGlsaXRpZXMuY3JlYXRlQ29tcG91bmRGb3JHaXZlbk5vZGVzKG5vZGVzLCBjb21wb3VuZFR5cGUpO1xuICAgIH1cbiAgfTtcblxuICAvKlxuICAgKiBNb3ZlIHRoZSBub2RlcyB0byBhIG5ldyBwYXJlbnQgYW5kIGNoYW5nZSB0aGVpciBwb3NpdGlvbiBpZiBwb3NzRGlmZiBwYXJhbXMgYXJlIHNldC5cbiAgICogQ29uc2lkZXJzIHVuZG9hYmxlIG9wdGlvbiBhbmQgY2hlY2tzIGlmIHRoZSBvcGVyYXRpb24gaXMgdmFsaWQuXG4gICAqL1xuICBtYWluVXRpbGl0aWVzLmNoYW5nZVBhcmVudCA9IGZ1bmN0aW9uKG5vZGVzLCBfbmV3UGFyZW50LCBwb3NEaWZmWCwgcG9zRGlmZlkpIHtcbiAgICBpZiAoIGVsZW1lbnRVdGlsaXRpZXMuaXNHcmFwaFRvcG9sb2d5TG9ja2VkKCkgKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIG5ld1BhcmVudCA9IHR5cGVvZiBfbmV3UGFyZW50ID09PSAnc3RyaW5nJyA/IGN5LmdldEVsZW1lbnRCeUlkKF9uZXdQYXJlbnQpIDogX25ld1BhcmVudDtcbiAgICAvLyBOZXcgcGFyZW50IGlzIHN1cHBvc2VkIHRvIGJlIG9uZSBvZiB0aGUgcm9vdCwgYSBjb21wbGV4IG9yIGEgY29tcGFydG1lbnRcbiAgICBpZiAobmV3UGFyZW50ICYmICFuZXdQYXJlbnQuZGF0YShcImNsYXNzXCIpLnN0YXJ0c1dpdGgoXCJjb21wbGV4XCIpICYmIG5ld1BhcmVudC5kYXRhKFwiY2xhc3NcIikgIT0gXCJjb21wYXJ0bWVudFwiXG4gICAgICAgICAgICAmJiBuZXdQYXJlbnQuZGF0YShcImNsYXNzXCIpICE9IFwic3VibWFwXCIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLypcbiAgICAgKiBFbGVtaW5hdGUgdGhlIG5vZGVzIHdoaWNoIGNhbm5vdCBoYXZlIHRoZSBuZXdQYXJlbnQgYXMgdGhlaXIgcGFyZW50XG4gICAgICovXG4gICAgbm9kZXMgPSBub2Rlcy5maWx0ZXIoZnVuY3Rpb24gKGVsZW1lbnQsIGkpIHtcbiAgICAgIGlmKHR5cGVvZiBlbGVtZW50ID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgIGVsZW1lbnQgPSBpO1xuICAgICAgfVxuXG4gICAgICB2YXIgc2JnbmNsYXNzID0gZWxlbWVudC5kYXRhKFwiY2xhc3NcIik7XG4gICAgICByZXR1cm4gZWxlbWVudFV0aWxpdGllcy5pc1ZhbGlkUGFyZW50KHNiZ25jbGFzcywgbmV3UGFyZW50LCBlbGVtZW50KTtcbiAgICB9KTtcblxuICAgIC8vIERpc2NhcmQgdGhlIG5vZGVzIHdob3NlIHBhcmVudCBpcyBhbHJlYWR5IG5ld1BhcmVudC5cbiAgICAvLyBEaXNjYXJkIHRoZSBuZXdQYXJlbnQgaXRzZWxmIGlmIGl0IGlzIGFtb25nIHRoZSBub2Rlc1xuICAgIG5vZGVzID0gbm9kZXMuZmlsdGVyKGZ1bmN0aW9uIChlbGUsIGkpIHtcbiAgICAgIGlmKHR5cGVvZiBlbGUgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgZWxlID0gaTtcbiAgICAgIH1cblxuICAgICAgLy8gRGlzY2FyZCB0aGUgbmV3UGFyZW50IGlmIGl0IGlzIGFtb25nIHRoZSBub2Rlc1xuICAgICAgaWYgKG5ld1BhcmVudCAmJiBlbGUuaWQoKSA9PT0gbmV3UGFyZW50LmlkKCkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgLy8gRGlzY2FyZCB0aGUgbm9kZXMgd2hvc2UgcGFyZW50IGlzIGFscmVhZHkgbmV3UGFyZW50XG4gICAgICBpZiAoIW5ld1BhcmVudCkge1xuICAgICAgICByZXR1cm4gZWxlLmRhdGEoJ3BhcmVudCcpICE9IG51bGw7XG4gICAgICB9XG4gICAgICByZXR1cm4gZWxlLmRhdGEoJ3BhcmVudCcpICE9PSBuZXdQYXJlbnQuaWQoKTtcbiAgICB9KTtcblxuICAgIC8vIElmIHNvbWUgbm9kZXMgYXJlIGFuY2VzdG9yIG9mIG5ldyBwYXJlbnQgZWxlbWluYXRlIHRoZW1cbiAgICBpZiAobmV3UGFyZW50KSB7XG4gICAgICBub2RlcyA9IG5vZGVzLmRpZmZlcmVuY2UobmV3UGFyZW50LmFuY2VzdG9ycygpKTtcbiAgICB9XG5cbiAgICAvLyBJZiBhbGwgbm9kZXMgYXJlIGVsZW1pbmF0ZWQgcmV0dXJuIGRpcmVjdGx5XG4gICAgaWYgKG5vZGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIEp1c3QgbW92ZSB0aGUgdG9wIG1vc3Qgbm9kZXNcbiAgICBub2RlcyA9IGVsZW1lbnRVdGlsaXRpZXMuZ2V0VG9wTW9zdE5vZGVzKG5vZGVzKTtcblxuICAgIHZhciBwYXJlbnRJZCA9IG5ld1BhcmVudCA/IG5ld1BhcmVudC5pZCgpIDogbnVsbDtcblxuICAgIGlmIChvcHRpb25zLnVuZG9hYmxlKSB7XG4gICAgICB2YXIgcGFyYW0gPSB7XG4gICAgICAgIGZpcnN0VGltZTogdHJ1ZSxcbiAgICAgICAgcGFyZW50RGF0YTogcGFyZW50SWQsIC8vIEl0IGtlZXBzIHRoZSBuZXdQYXJlbnRJZCAoSnVzdCBhbiBpZCBmb3IgZWFjaCBub2RlcyBmb3IgdGhlIGZpcnN0IHRpbWUpXG4gICAgICAgIG5vZGVzOiBub2RlcyxcbiAgICAgICAgcG9zRGlmZlg6IHBvc0RpZmZYLFxuICAgICAgICBwb3NEaWZmWTogcG9zRGlmZlksXG4gICAgICAgIC8vIFRoaXMgaXMgbmVlZGVkIGJlY2F1c2UgdGhlIGNoYW5nZVBhcmVudCBmdW5jdGlvbiBjYWxsZWQgaXMgbm90IGZyb20gZWxlbWVudFV0aWxpdGllc1xuICAgICAgICAvLyBidXQgZnJvbSB0aGUgdW5kb1JlZG8gZXh0ZW5zaW9uIGRpcmVjdGx5LCBzbyBtYWludGFpbmluZyBwb2ludGVyIGlzIG5vdCBhdXRvbWF0aWNhbGx5IGRvbmUuXG4gICAgICAgIGNhbGxiYWNrOiBlbGVtZW50VXRpbGl0aWVzLm1haW50YWluUG9pbnRlclxuICAgICAgfTtcblxuICAgICAgY3kudW5kb1JlZG8oKS5kbyhcImNoYW5nZVBhcmVudFwiLCBwYXJhbSk7IC8vIFRoaXMgYWN0aW9uIGlzIHJlZ2lzdGVyZWQgYnkgdW5kb1JlZG8gZXh0ZW5zaW9uXG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgZWxlbWVudFV0aWxpdGllcy5jaGFuZ2VQYXJlbnQobm9kZXMsIHBhcmVudElkLCBwb3NEaWZmWCwgcG9zRGlmZlkpO1xuICAgIH1cbiAgfTtcblxuICAvKlxuICAgKiBDcmVhdGVzIGFuIGFjdGl2YXRpb24gcmVhY3Rpb24gd2l0aCBnaXZlbiBwYXJhbWV0ZXJzLiBSZXF1aXJlcyBjb3NlLWJpbGtlbnQgbGF5b3V0IHRvIHRpbGUgdGhlIGZyZWUgbWFjcm9tb2xlY3VsZXMgaW5jbHVkZWRcbiAgICogaW4gdGhlIGNvbXBsZXguIENvbnNpZGVycyB1bmRvYWJsZSBvcHRpb24uIEZvciBtb3JlIGluZm9ybWF0aW9uIHNlZSB0aGUgc2FtZSBmdW5jdGlvbiBpbiBlbGVtZW50VXRpbGl0aWVzXG4gICAqL1xuICBtYWluVXRpbGl0aWVzLmNyZWF0ZVRyYW5zbGF0aW9uUmVhY3Rpb24gPSBmdW5jdGlvbiAobVJuYU5hbWUsIHByb3RlaW5OYW1lLCBwcm9jZXNzUG9zaXRpb24sIGVkZ2VMZW5ndGgpIHtcbiAgICBpZiAoIGVsZW1lbnRVdGlsaXRpZXMuaXNHcmFwaFRvcG9sb2d5TG9ja2VkKCkgKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCFvcHRpb25zLnVuZG9hYmxlKSB7XG4gICAgICBlbGVtZW50VXRpbGl0aWVzLmNyZWF0ZVRyYW5zbGF0aW9uUmVhY3Rpb24obVJuYU5hbWUsIHByb3RlaW5OYW1lLCBwcm9jZXNzUG9zaXRpb24sIGVkZ2VMZW5ndGgpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHZhciBwYXJhbSA9IHtcbiAgICAgICAgbVJuYU5hbWU6IG1SbmFOYW1lLFxuICAgICAgICBwcm90ZWluTmFtZTogcHJvdGVpbk5hbWUsXG4gICAgICAgIHByb2Nlc3NQb3NpdGlvbjogcHJvY2Vzc1Bvc2l0aW9uLFxuICAgICAgICBlZGdlTGVuZ3RoOiBlZGdlTGVuZ3RoXG4gICAgICB9O1xuXG4gICAgICBjeS51bmRvUmVkbygpLmRvKFwiY3JlYXRlVHJhbnNsYXRpb25SZWFjdGlvblwiLCBwYXJhbSk7XG4gIH19O1xuXG4gIC8qXG4gICAqIENyZWF0ZXMgYW4gYWN0aXZhdGlvbiByZWFjdGlvbiB3aXRoIGdpdmVuIHBhcmFtZXRlcnMuIFJlcXVpcmVzIGNvc2UtYmlsa2VudCBsYXlvdXQgdG8gdGlsZSB0aGUgZnJlZSBtYWNyb21vbGVjdWxlcyBpbmNsdWRlZFxuICAgKiBpbiB0aGUgY29tcGxleC4gQ29uc2lkZXJzIHVuZG9hYmxlIG9wdGlvbi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gc2VlIHRoZSBzYW1lIGZ1bmN0aW9uIGluIGVsZW1lbnRVdGlsaXRpZXNcbiAgICovXG4gIG1haW5VdGlsaXRpZXMuY3JlYXRlVHJhbnNjcmlwdGlvblJlYWN0aW9uID0gZnVuY3Rpb24gKGdlbmVOYW1lLCBtUm5hTmFtZSwgcHJvY2Vzc1Bvc2l0aW9uLCBlZGdlTGVuZ3RoKSB7XG4gICAgaWYgKCBlbGVtZW50VXRpbGl0aWVzLmlzR3JhcGhUb3BvbG9neUxvY2tlZCgpICkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghb3B0aW9ucy51bmRvYWJsZSkge1xuICAgICAgZWxlbWVudFV0aWxpdGllcy5jcmVhdGVUcmFuc2NyaXB0aW9uUmVhY3Rpb24oZ2VuZU5hbWUsIG1SbmFOYW1lLCBwcm9jZXNzUG9zaXRpb24sIGVkZ2VMZW5ndGgpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHZhciBwYXJhbSA9IHtcbiAgICAgICAgZ2VuZU5hbWU6IGdlbmVOYW1lLFxuICAgICAgICBtUm5hTmFtZTogbVJuYU5hbWUsXG4gICAgICAgIHByb2Nlc3NQb3NpdGlvbjogcHJvY2Vzc1Bvc2l0aW9uLFxuICAgICAgICBlZGdlTGVuZ3RoOiBlZGdlTGVuZ3RoXG4gICAgICB9O1xuXG4gICAgICBjeS51bmRvUmVkbygpLmRvKFwiY3JlYXRlVHJhbnNjcmlwdGlvblJlYWN0aW9uXCIsIHBhcmFtKTtcbiAgfX07XG5cbiAgbWFpblV0aWxpdGllcy5jcmVhdGVUcmFuc2xhdGlvbiA9IGZ1bmN0aW9uKHJlZ3VsYXRvckxhYmVsLCBvdXRwdXRMYWJlbCwgb3JpZW50YXRpb24pIHtcbiAgICBpZiAoIGVsZW1lbnRVdGlsaXRpZXMuaXNHcmFwaFRvcG9sb2d5TG9ja2VkKCkgKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCFvcHRpb25zLnVuZG9hYmxlKSB7XG4gICAgICBlbGVtZW50VXRpbGl0aWVzLmNyZWF0ZVRyYW5zbGF0aW9uKHJlZ3VsYXRvckxhYmVsLCBvdXRwdXRMYWJlbCwgb3JpZW50YXRpb24pO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGNvbnN0IHBhcmFtID0ge1xuICAgICAgICByZWd1bGF0b3JMYWJlbDogcmVndWxhdG9yTGFiZWwsXG4gICAgICAgIG91dHB1dExhYmVsOiBvdXRwdXRMYWJlbCxcbiAgICAgICAgb3JpZW50YXRpb246IG9yaWVudGF0aW9uXG4gICAgICB9O1xuXG4gICAgICBjeS51bmRvUmVkbygpLmRvKFwiY3JlYXRlVHJhbnNsYXRpb25cIiwgcGFyYW0pO1xuICAgIH0gIFxuICB9O1xuXG4gIG1haW5VdGlsaXRpZXMuY3JlYXRlVHJhbnNjcmlwdGlvbiA9IGZ1bmN0aW9uKGxhYmVsLCBvcmllbnRhdGlvbikge1xuICAgIGlmICggZWxlbWVudFV0aWxpdGllcy5pc0dyYXBoVG9wb2xvZ3lMb2NrZWQoKSApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIW9wdGlvbnMudW5kb2FibGUpIHtcbiAgICAgIGVsZW1lbnRVdGlsaXRpZXMuY3JlYXRlVHJhbnNjcmlwdGlvbihsYWJlbCwgb3JpZW50YXRpb24pO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGNvbnN0IHBhcmFtID0ge1xuICAgICAgICBsYWJlbDogbGFiZWwsXG4gICAgICAgIG9yaWVudGF0aW9uOiBvcmllbnRhdGlvblxuICAgICAgfTtcblxuICAgICAgY3kudW5kb1JlZG8oKS5kbyhcImNyZWF0ZVRyYW5zY3JpcHRpb25cIiwgcGFyYW0pO1xuICAgIH0gIFxuICB9O1xuXG4gIG1haW5VdGlsaXRpZXMuY3JlYXRlRGVncmFkYXRpb24gPSBmdW5jdGlvbihtYWNyb21vbGVjdWxlLCBvcmllbnRhdGlvbikge1xuICAgIGlmICggZWxlbWVudFV0aWxpdGllcy5pc0dyYXBoVG9wb2xvZ3lMb2NrZWQoKSApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIW9wdGlvbnMudW5kb2FibGUpIHtcbiAgICAgIGVsZW1lbnRVdGlsaXRpZXMuY3JlYXRlRGVncmFkYXRpb24obWFjcm9tb2xlY3VsZSwgb3JpZW50YXRpb24pO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGNvbnN0IHBhcmFtID0ge1xuICAgICAgICBtYWNyb21vbGVjdWxlOiBtYWNyb21vbGVjdWxlLFxuICAgICAgICBvcmllbnRhdGlvbjogb3JpZW50YXRpb25cbiAgICAgIH07XG5cbiAgICAgIGN5LnVuZG9SZWRvKCkuZG8oXCJjcmVhdGVEZWdyYWRhdGlvblwiLCBwYXJhbSk7XG4gICAgfSAgXG4gIH07XG5cbiAgbWFpblV0aWxpdGllcy5jcmVhdGVDb21wbGV4UHJvdGVpbkZvcm1hdGlvbiA9IGZ1bmN0aW9uKHByb3RlaW5MYWJlbHMsIGNvbXBsZXhMYWJlbCwgcmVndWxhdG9yLCBvcmllbnRhdGlvbiwgcmV2ZXJzZSkge1xuICAgIGlmICggZWxlbWVudFV0aWxpdGllcy5pc0dyYXBoVG9wb2xvZ3lMb2NrZWQoKSApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIW9wdGlvbnMudW5kb2FibGUpIHtcbiAgICAgIGVsZW1lbnRVdGlsaXRpZXMuY3JlYXRlQ29tcGxleFByb3RlaW5Gb3JtYXRpb24ocHJvdGVpbkxhYmVscywgY29tcGxleExhYmVsLCByZWd1bGF0b3IsIG9yaWVudGF0aW9uLCByZXZlcnNlKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBjb25zdCBwYXJhbSA9IHtcbiAgICAgICAgcHJvdGVpbkxhYmVsczogcHJvdGVpbkxhYmVscyxcbiAgICAgICAgY29tcGxleExhYmVsOiBjb21wbGV4TGFiZWwsXG4gICAgICAgIHJlZ3VsYXRvcjogcmVndWxhdG9yLFxuICAgICAgICBvcmllbnRhdGlvbjogb3JpZW50YXRpb24sXG4gICAgICAgIHJldmVyc2U6IHJldmVyc2VcbiAgICAgIH07XG5cbiAgICAgIGN5LnVuZG9SZWRvKCkuZG8oXCJjcmVhdGVDb21wbGV4UHJvdGVpbkZvcm1hdGlvblwiLCBwYXJhbSk7XG4gICAgfSAgXG4gIH07XG5cbiAgbWFpblV0aWxpdGllcy5jcmVhdGVNdWx0aW1lcml6YXRpb24gPSBmdW5jdGlvbihtYWNyb21vbGVjdWxlLCByZWd1bGF0b3IsIHJlZ3VsYXRvck11bHRpbWVyLCBvcmllbnRhdGlvbikge1xuICAgIGlmICggZWxlbWVudFV0aWxpdGllcy5pc0dyYXBoVG9wb2xvZ3lMb2NrZWQoKSApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIW9wdGlvbnMudW5kb2FibGUpIHtcbiAgICAgIGVsZW1lbnRVdGlsaXRpZXMuY3JlYXRlTXVsdGltZXJpemF0aW9uKG1hY3JvbW9sZWN1bGUsIHJlZ3VsYXRvciwgcmVndWxhdG9yTXVsdGltZXIsIG9yaWVudGF0aW9uKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBjb25zdCBwYXJhbSA9IHtcbiAgICAgICAgbWFjcm9tb2xlY3VsZTogbWFjcm9tb2xlY3VsZSxcbiAgICAgICAgcmVndWxhdG9yOiByZWd1bGF0b3IsXG4gICAgICAgIHJlZ3VsYXRvck11bHRpbWVyOiByZWd1bGF0b3JNdWx0aW1lcixcbiAgICAgICAgb3JpZW50YXRpb246IG9yaWVudGF0aW9uXG4gICAgICB9O1xuXG4gICAgICBjeS51bmRvUmVkbygpLmRvKFwiY3JlYXRlTXVsdGltZXJpemF0aW9uXCIsIHBhcmFtKTtcbiAgICB9ICBcbiAgfTtcblxuICBtYWluVXRpbGl0aWVzLmNyZWF0ZUNvbnZlcnNpb24gPSBmdW5jdGlvbihtYWNyb21vbGVjdWxlLCByZWd1bGF0b3IsIHJlZ3VsYXRvck11bHRpbWVyLCBvcmllbnRhdGlvbiwgaW5wdXRJbmZvYm94TGFiZWxzLCBvdXRwdXRJbmZvYm94TGFiZWxzKSB7XG4gICAgaWYgKCBlbGVtZW50VXRpbGl0aWVzLmlzR3JhcGhUb3BvbG9neUxvY2tlZCgpICkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghb3B0aW9ucy51bmRvYWJsZSkge1xuICAgICAgZWxlbWVudFV0aWxpdGllcy5jcmVhdGVDb252ZXJzaW9uKG1hY3JvbW9sZWN1bGUsIHJlZ3VsYXRvciwgcmVndWxhdG9yTXVsdGltZXIsIG9yaWVudGF0aW9uLCBpbnB1dEluZm9ib3hMYWJlbHMsIG91dHB1dEluZm9ib3hMYWJlbHMpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGNvbnN0IHBhcmFtID0ge1xuICAgICAgICBtYWNyb21vbGVjdWxlOiBtYWNyb21vbGVjdWxlLFxuICAgICAgICByZWd1bGF0b3I6IHJlZ3VsYXRvcixcbiAgICAgICAgcmVndWxhdG9yTXVsdGltZXI6IHJlZ3VsYXRvck11bHRpbWVyLFxuICAgICAgICBvcmllbnRhdGlvbjogb3JpZW50YXRpb24sXG4gICAgICAgIGlucHV0SW5mb2JveExhYmVsczogaW5wdXRJbmZvYm94TGFiZWxzLFxuICAgICAgICBvdXRwdXRJbmZvYm94TGFiZWxzOiBvdXRwdXRJbmZvYm94TGFiZWxzXG4gICAgICB9O1xuXG4gICAgICBjeS51bmRvUmVkbygpLmRvKFwiY3JlYXRlQ29udmVyc2lvblwiLCBwYXJhbSk7XG4gICAgfSAgXG4gIH07XG5cbiAgbWFpblV0aWxpdGllcy5jcmVhdGVNZXRhYm9saWNSZWFjdGlvbiA9IGZ1bmN0aW9uKGlucHV0cywgb3V0cHV0cywgcmV2ZXJzaWJsZSwgcmVndWxhdG9yLCByZWd1bGF0b3JNdWx0aW1lciwgb3JpZW50YXRpb24pIHtcbiAgICBpZiAoIGVsZW1lbnRVdGlsaXRpZXMuaXNHcmFwaFRvcG9sb2d5TG9ja2VkKCkgKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCFvcHRpb25zLnVuZG9hYmxlKSB7XG4gICAgICBlbGVtZW50VXRpbGl0aWVzLmNyZWF0ZU1ldGFib2xpY1JlYWN0aW9uKGlucHV0cywgb3V0cHV0cywgcmV2ZXJzaWJsZSwgcmVndWxhdG9yLCByZWd1bGF0b3JNdWx0aW1lciwgb3JpZW50YXRpb24pO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGNvbnN0IHBhcmFtID0ge1xuICAgICAgICBpbnB1dHM6IGlucHV0cyxcbiAgICAgICAgb3V0cHV0czogb3V0cHV0cyxcbiAgICAgICAgcmV2ZXJzaWJsZTogcmV2ZXJzaWJsZSxcbiAgICAgICAgcmVndWxhdG9yOiByZWd1bGF0b3IsXG4gICAgICAgIHJlZ3VsYXRvck11bHRpbWVyOiByZWd1bGF0b3JNdWx0aW1lcixcbiAgICAgICAgb3JpZW50YXRpb246IG9yaWVudGF0aW9uXG4gICAgICB9O1xuXG4gICAgICBjeS51bmRvUmVkbygpLmRvKFwiY3JlYXRlTWV0YWJvbGljUmVhY3Rpb25cIiwgcGFyYW0pO1xuICAgIH0gIFxuICB9O1xuXG4gIC8qXG4gICAqIENyZWF0ZXMgYW4gYWN0aXZhdGlvbiByZWFjdGlvbiB3aXRoIGdpdmVuIHBhcmFtZXRlcnMuIFJlcXVpcmVzIGNvc2UtYmlsa2VudCBsYXlvdXQgdG8gdGlsZSB0aGUgZnJlZSBtYWNyb21vbGVjdWxlcyBpbmNsdWRlZFxuICAgKiBpbiB0aGUgY29tcGxleC4gQ29uc2lkZXJzIHVuZG9hYmxlIG9wdGlvbi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gc2VlIHRoZSBzYW1lIGZ1bmN0aW9uIGluIGVsZW1lbnRVdGlsaXRpZXNcbiAgICovXG4gIG1haW5VdGlsaXRpZXMuY3JlYXRlTWV0YWJvbGljQ2F0YWx5dGljQWN0aXZpdHkgPSBmdW5jdGlvbiAoaW5wdXROb2RlTGlzdCwgb3V0cHV0Tm9kZUxpc3QsIGNhdGFseXN0TmFtZSwgY2F0YWx5c3RUeXBlLCBwcm9jZXNzUG9zaXRpb24sIHRpbGluZ1BhZGRpbmdWZXJ0aWNhbCwgdGlsaW5nUGFkZGluZ0hvcml6b250YWwsIGVkZ2VMZW5ndGgpIHtcbiAgICBpZiAoIGVsZW1lbnRVdGlsaXRpZXMuaXNHcmFwaFRvcG9sb2d5TG9ja2VkKCkgKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCFvcHRpb25zLnVuZG9hYmxlKSB7XG4gICAgICBlbGVtZW50VXRpbGl0aWVzLmNyZWF0ZU1ldGFib2xpY0NhdGFseXRpY0FjdGl2aXR5KGlucHV0Tm9kZUxpc3QsIG91dHB1dE5vZGVMaXN0LCBjYXRhbHlzdE5hbWUsIGNhdGFseXN0VHlwZSwgcHJvY2Vzc1Bvc2l0aW9uLCB0aWxpbmdQYWRkaW5nVmVydGljYWwsIHRpbGluZ1BhZGRpbmdIb3Jpem9udGFsLCBlZGdlTGVuZ3RoKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICB2YXIgcGFyYW0gPSB7XG4gICAgICAgIGlucHV0Tm9kZUxpc3Q6IGlucHV0Tm9kZUxpc3QsXG4gICAgICAgIG91dHB1dE5vZGVMaXN0OiBvdXRwdXROb2RlTGlzdCxcbiAgICAgICAgY2F0YWx5c3ROYW1lOiBjYXRhbHlzdE5hbWUsXG4gICAgICAgIGNhdGFseXN0VHlwZTogY2F0YWx5c3RUeXBlLFxuICAgICAgICBwcm9jZXNzUG9zaXRpb246IHByb2Nlc3NQb3NpdGlvbixcbiAgICAgICAgdGlsaW5nUGFkZGluZ1ZlcnRpY2FsOiB0aWxpbmdQYWRkaW5nVmVydGljYWwsXG4gICAgICAgIHRpbGluZ1BhZGRpbmdIb3Jpem9udGFsOiB0aWxpbmdQYWRkaW5nSG9yaXpvbnRhbCxcbiAgICAgICAgZWRnZUxlbmd0aDogZWRnZUxlbmd0aCxcbiAgICAgIH07XG5cbiAgICAgIGN5LnVuZG9SZWRvKCkuZG8oXCJjcmVhdGVNZXRhYm9saWNDYXRhbHl0aWNBY3Rpdml0eVwiLCBwYXJhbSk7XG4gICAgfVxuICB9O1xuXG4gIC8qXG4gICAqIENyZWF0ZXMgYW4gYWN0aXZhdGlvbiByZWFjdGlvbiB3aXRoIGdpdmVuIHBhcmFtZXRlcnMuIFJlcXVpcmVzIGNvc2UtYmlsa2VudCBsYXlvdXQgdG8gdGlsZSB0aGUgZnJlZSBtYWNyb21vbGVjdWxlcyBpbmNsdWRlZFxuICAgKiBpbiB0aGUgY29tcGxleC4gQ29uc2lkZXJzIHVuZG9hYmxlIG9wdGlvbi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gc2VlIHRoZSBzYW1lIGZ1bmN0aW9uIGluIGVsZW1lbnRVdGlsaXRpZXNcbiAgICovXG4gIG1haW5VdGlsaXRpZXMuY3JlYXRlQWN0aXZhdGlvblJlYWN0aW9uID0gZnVuY3Rpb24gKHByb3RlaW5OYW1lLCBwcm9jZXNzUG9zaXRpb24sIGVkZ2VMZW5ndGgsIHJldmVyc2UpIHtcbiAgICBpZiAoIGVsZW1lbnRVdGlsaXRpZXMuaXNHcmFwaFRvcG9sb2d5TG9ja2VkKCkgKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCFvcHRpb25zLnVuZG9hYmxlKSB7XG4gICAgICBlbGVtZW50VXRpbGl0aWVzLmNyZWF0ZUFjdGl2YXRpb25SZWFjdGlvbihwcm90ZWluTmFtZSwgcHJvY2Vzc1Bvc2l0aW9uLCBlZGdlTGVuZ3RoLCByZXZlcnNlKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICB2YXIgcGFyYW0gPSB7XG4gICAgICAgIHByb3RlaW5OYW1lOiBwcm90ZWluTmFtZSxcbiAgICAgICAgcHJvY2Vzc1Bvc2l0aW9uOiBwcm9jZXNzUG9zaXRpb24sXG4gICAgICAgIGVkZ2VMZW5ndGg6IGVkZ2VMZW5ndGgsXG4gICAgICAgIHJldmVyc2U6IHJldmVyc2VcbiAgICAgIH07XG5cbiAgICAgIGN5LnVuZG9SZWRvKCkuZG8oXCJjcmVhdGVBY3RpdmF0aW9uUmVhY3Rpb25cIiwgcGFyYW0pO1xuICB9fTtcblxuICAvKlxuICAgKiBDcmVhdGVzIGEgdGVtcGxhdGUgcmVhY3Rpb24gd2l0aCBnaXZlbiBwYXJhbWV0ZXJzLiBSZXF1aXJlcyBjb3NlLWJpbGtlbnQgbGF5b3V0IHRvIHRpbGUgdGhlIGZyZWUgbWFjcm9tb2xlY3VsZXMgaW5jbHVkZWRcbiAgICogaW4gdGhlIGNvbXBsZXguIENvbnNpZGVycyB1bmRvYWJsZSBvcHRpb24uIEZvciBtb3JlIGluZm9ybWF0aW9uIHNlZSB0aGUgc2FtZSBmdW5jdGlvbiBpbiBlbGVtZW50VXRpbGl0aWVzXG4gICAqL1xuICBtYWluVXRpbGl0aWVzLmNyZWF0ZVRlbXBsYXRlUmVhY3Rpb24gPSBmdW5jdGlvbiAodGVtcGxhdGVUeXBlLCBtYWNyb21vbGVjdWxlTGlzdCwgY29tcGxleE5hbWUsIHByb2Nlc3NQb3NpdGlvbiwgdGlsaW5nUGFkZGluZ1ZlcnRpY2FsLCB0aWxpbmdQYWRkaW5nSG9yaXpvbnRhbCwgZWRnZUxlbmd0aCwgbGF5b3V0UGFyYW0pIHtcbiAgICBpZiAoIGVsZW1lbnRVdGlsaXRpZXMuaXNHcmFwaFRvcG9sb2d5TG9ja2VkKCkgKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCFvcHRpb25zLnVuZG9hYmxlKSB7XG4gICAgICBpZiAodGVtcGxhdGVUeXBlID09PSBcInJldmVyc2libGVcIikge1xuICAgICAgICBlbGVtZW50VXRpbGl0aWVzLnNldE1hcFR5cGUoXCJIeWJyaWRBbnlcIik7XG4gICAgICB9XG4gICAgICBlbGVtZW50VXRpbGl0aWVzLmNyZWF0ZVRlbXBsYXRlUmVhY3Rpb24odGVtcGxhdGVUeXBlLCBtYWNyb21vbGVjdWxlTGlzdCwgY29tcGxleE5hbWUsIHByb2Nlc3NQb3NpdGlvbiwgdGlsaW5nUGFkZGluZ1ZlcnRpY2FsLCB0aWxpbmdQYWRkaW5nSG9yaXpvbnRhbCwgZWRnZUxlbmd0aCwgbGF5b3V0UGFyYW0pO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHZhciBwYXJhbSA9IHtcbiAgICAgICAgdGVtcGxhdGVUeXBlOiB0ZW1wbGF0ZVR5cGUsXG4gICAgICAgIG1hY3JvbW9sZWN1bGVMaXN0OiBtYWNyb21vbGVjdWxlTGlzdCxcbiAgICAgICAgY29tcGxleE5hbWU6IGNvbXBsZXhOYW1lLFxuICAgICAgICBwcm9jZXNzUG9zaXRpb246IHByb2Nlc3NQb3NpdGlvbixcbiAgICAgICAgdGlsaW5nUGFkZGluZ1ZlcnRpY2FsOiB0aWxpbmdQYWRkaW5nVmVydGljYWwsXG4gICAgICAgIHRpbGluZ1BhZGRpbmdIb3Jpem9udGFsOiB0aWxpbmdQYWRkaW5nSG9yaXpvbnRhbCxcbiAgICAgICAgZWRnZUxlbmd0aDogZWRnZUxlbmd0aCxcbiAgICAgICAgbGF5b3V0UGFyYW06IGxheW91dFBhcmFtXG4gICAgICB9O1xuICAgICAgaWYgKHRlbXBsYXRlVHlwZSA9PT0gXCJyZXZlcnNpYmxlXCIpIHtcbiAgICAgICAgdmFyIGFjdGlvbnMgPSBbXTtcbiAgICAgICAgYWN0aW9ucy5wdXNoKHtuYW1lOlwiY2hhbmdlTWFwVHlwZVwiLCBwYXJhbToge21hcFR5cGU6IFwiSHlicmlkQW55XCIsIGNhbGxiYWNrOiBmdW5jdGlvbigpe30gfX0pO1xuICAgICAgICBhY3Rpb25zLnB1c2goe25hbWU6XCJjcmVhdGVUZW1wbGF0ZVJlYWN0aW9uXCIsIHBhcmFtOiBwYXJhbX0pO1xuICAgICAgICBjeS51bmRvUmVkbygpLmRvKFwiYmF0Y2hcIiwgYWN0aW9ucyk7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgY3kudW5kb1JlZG8oKS5kbyhcImNyZWF0ZVRlbXBsYXRlUmVhY3Rpb25cIiwgcGFyYW0pO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICAvKlxuICAgKiBSZXNpemUgZ2l2ZW4gbm9kZXMgaWYgdXNlQXNwZWN0UmF0aW8gaXMgdHJ1dGh5IG9uZSBvZiB3aWR0aCBvciBoZWlnaHQgc2hvdWxkIG5vdCBiZSBzZXQuXG4gICAqIENvbnNpZGVycyB1bmRvYWJsZSBvcHRpb24uXG4gICAqL1xuICBtYWluVXRpbGl0aWVzLnJlc2l6ZU5vZGVzID0gZnVuY3Rpb24obm9kZXMsIHdpZHRoLCBoZWlnaHQsIHVzZUFzcGVjdFJhdGlvLCBwcmVzZXJ2ZVJlbGF0aXZlUG9zKSB7XG4gICAgaWYgKG5vZGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zLnVuZG9hYmxlKSB7XG4gICAgICB2YXIgcGFyYW0gPSB7XG4gICAgICAgIG5vZGVzOiBub2RlcyxcbiAgICAgICAgd2lkdGg6IHdpZHRoLFxuICAgICAgICBoZWlnaHQ6IGhlaWdodCxcbiAgICAgICAgdXNlQXNwZWN0UmF0aW86IHVzZUFzcGVjdFJhdGlvLFxuICAgICAgICBwZXJmb3JtT3BlcmF0aW9uOiB0cnVlLFxuICAgICAgICBwcmVzZXJ2ZVJlbGF0aXZlUG9zOiBwcmVzZXJ2ZVJlbGF0aXZlUG9zXG4gICAgICB9O1xuXG4gICAgICBjeS51bmRvUmVkbygpLmRvKFwicmVzaXplTm9kZXNcIiwgcGFyYW0pO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGVsZW1lbnRVdGlsaXRpZXMucmVzaXplTm9kZXMobm9kZXMsIHdpZHRoLCBoZWlnaHQsIHVzZUFzcGVjdFJhdGlvKTtcbiAgICAgIGN5LnN0eWxlKCkudXBkYXRlKCk7XG4gICAgfVxuXG5cbiAgfTtcblxuICAgIC8qXG4gICAgICogUmVzaXplIGdpdmVuIG5vZGVzIGlmIHVzZUFzcGVjdFJhdGlvIGlzIHRydXRoeSBvbmUgb2Ygd2lkdGggb3IgaGVpZ2h0IHNob3VsZCBub3QgYmUgc2V0LlxuICAgICAqIENvbnNpZGVycyB1bmRvYWJsZSBvcHRpb24uXG4gICAgICovXG4gICAgbWFpblV0aWxpdGllcy5yZXNpemVOb2Rlc1RvQ29udGVudCA9IGZ1bmN0aW9uKG5vZGVzLCB1c2VBc3BlY3RSYXRpbykge1xuICAgICAgICBpZiAobm9kZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH0gXG4gICAgICAgIGlmIChvcHRpb25zLnVuZG9hYmxlKSB7XG4gICAgICAgICAgdmFyIGFjdGlvbnMgPSBbXTtcbiAgICAgICAgICBub2Rlcy5mb3JFYWNoKGZ1bmN0aW9uKG5vZGUpe1xuICAgICAgICAgICAgdmFyIHdpZHRoID0gZWxlbWVudFV0aWxpdGllcy5jYWxjdWxhdGVNaW5XaWR0aChub2RlKTtcbiAgICAgICAgICAgIHZhciBoZWlnaHQgPSBlbGVtZW50VXRpbGl0aWVzLmNhbGN1bGF0ZU1pbkhlaWdodChub2RlKTtcbiAgICAgICAgICAgIGFjdGlvbnMucHVzaCh7bmFtZTogXCJyZXNpemVOb2Rlc1wiLCBwYXJhbToge1xuICAgICAgICAgICAgICAgIG5vZGVzOiBub2RlLFxuICAgICAgICAgICAgICAgIHdpZHRoOiB3aWR0aCxcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IGhlaWdodCxcbiAgICAgICAgICAgICAgICB1c2VBc3BlY3RSYXRpbzogdXNlQXNwZWN0UmF0aW8sXG4gICAgICAgICAgICAgICAgcGVyZm9ybU9wZXJhdGlvbjogdHJ1ZSxcbiAgICAgICAgICAgICAgICBwcmVzZXJ2ZVJlbGF0aXZlUG9zOiB0cnVlXG4gICAgICAgICAgICB9fSk7XG5cbiAgICAgICAgICAgIHZhciBzdGF0ZUFuZEluZm9zID0gbm9kZS5kYXRhKCdzdGF0ZXNhbmRpbmZvcycpO1xuICAgICAgICAgICAgdmFyIGxlbmd0aCA9IHN0YXRlQW5kSW5mb3MubGVuZ3RoO1xuICAgICAgICAgICAgaWYgKGxlbmd0aCAhPSAwKSB7XG4gICAgICAgICAgICAgIHZhciBwYXJhbSA9IHtcbiAgICAgICAgICAgICAgICBub2RlOiBub2RlLFxuICAgICAgICAgICAgICAgIGxvY2F0aW9uczogW1widG9wXCIsXCJyaWdodFwiLFwiYm90dG9tXCIsXCJsZWZ0XCJdXG4gICAgICAgICAgICAgIH07ICAgICAgICAgIFxuICAgICAgICAgICAgICBhY3Rpb25zLnB1c2goe25hbWU6XCJmaXRVbml0c1wiLHBhcmFtIDogcGFyYW19KVxuICAgICAgICAgICAgIH1cbiAgXG5cbiAgICAgICAgICB9KTtcblxuICAgICAgICBcbiAgICAgICAgIFxuICAgICAgICAgIGN5LnVuZG9SZWRvKCkuZG8oXCJiYXRjaFwiLCBhY3Rpb25zKTtcbiAgICAgICAgICBjeS5zdHlsZSgpLnVwZGF0ZSgpO1xuICAgICAgICAgIHJldHVybiBhY3Rpb25zO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgbm9kZXMuZm9yRWFjaChmdW5jdGlvbihub2RlKXtcbiAgICAgICAgICAgICAgdmFyIHdpZHRoID0gZWxlbWVudFV0aWxpdGllcy5jYWxjdWxhdGVNaW5XaWR0aChub2RlKTtcbiAgICAgICAgICAgICAgdmFyIGhlaWdodCA9IGVsZW1lbnRVdGlsaXRpZXMuY2FsY3VsYXRlTWluSGVpZ2h0KG5vZGUpO1xuICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgZWxlbWVudFV0aWxpdGllcy5yZXNpemVOb2Rlcyhub2RlLCB3aWR0aCwgaGVpZ2h0LCB1c2VBc3BlY3RSYXRpbywgdHJ1ZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGN5LnN0eWxlKCkudXBkYXRlKCk7XG4gICAgfTtcblxuICAvKlxuICAgKiBDaGFuZ2VzIHRoZSBsYWJlbCBvZiB0aGUgZ2l2ZW4gbm9kZXMgdG8gdGhlIGdpdmVuIGxhYmVsLiBDb25zaWRlcnMgdW5kb2FibGUgb3B0aW9uLlxuICAgKi9cbiAgbWFpblV0aWxpdGllcy5jaGFuZ2VOb2RlTGFiZWwgPSBmdW5jdGlvbihub2RlcywgbGFiZWwpIHtcbiAgICBpZiAobm9kZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCFvcHRpb25zLnVuZG9hYmxlKSB7XG4gICAgICBub2Rlcy5kYXRhKCdsYWJlbCcsIGxhYmVsKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICB2YXIgcGFyYW0gPSB7XG4gICAgICAgIG5vZGVzOiBub2RlcyxcbiAgICAgICAgbGFiZWw6IGxhYmVsLFxuICAgICAgICBmaXJzdFRpbWU6IHRydWVcbiAgICAgIH07XG5cbiAgICAgIGN5LnVuZG9SZWRvKCkuZG8oXCJjaGFuZ2VOb2RlTGFiZWxcIiwgcGFyYW0pO1xuICAgIH1cblxuICAgIGN5LnN0eWxlKCkudXBkYXRlKCk7XG4gIH07XG5cbiAgLypcbiAgICogQ2hhbmdlIGZvbnQgcHJvcGVydGllcyBmb3IgZ2l2ZW4gbm9kZXMgdXNlIHRoZSBnaXZlbiBmb250IGRhdGEuXG4gICAqIENvbnNpZGVycyB1bmRvYWJsZSBvcHRpb24uXG4gICAqL1xuICBtYWluVXRpbGl0aWVzLmNoYW5nZUZvbnRQcm9wZXJ0aWVzID0gZnVuY3Rpb24oZWxlcywgZGF0YSkge1xuICAgIGlmIChlbGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zLnVuZG9hYmxlKSB7XG4gICAgICB2YXIgcGFyYW0gPSB7XG4gICAgICAgIGVsZXM6IGVsZXMsXG4gICAgICAgIGRhdGE6IGRhdGEsXG4gICAgICAgIGZpcnN0VGltZTogdHJ1ZVxuICAgICAgfTtcblxuICAgICAgY3kudW5kb1JlZG8oKS5kbyhcImNoYW5nZUZvbnRQcm9wZXJ0aWVzXCIsIHBhcmFtKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBlbGVtZW50VXRpbGl0aWVzLmNoYW5nZUZvbnRQcm9wZXJ0aWVzKGVsZXMsIGRhdGEpO1xuICAgIH1cblxuICAgIGN5LnN0eWxlKCkudXBkYXRlKCk7XG4gIH07XG5cbiAgLypcbiAgICogQ2hhbmdlIHN0YXRlIHZhbHVlIG9yIHVuaXQgb2YgaW5mb3JtYXRpb24gYm94IG9mIGdpdmVuIG5vZGVzIHdpdGggZ2l2ZW4gaW5kZXguXG4gICAqIENvbnNpZGVycyB1bmRvYWJsZSBvcHRpb24uXG4gICAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBwYXJhbWV0ZXJzIHNlZSBlbGVtZW50VXRpbGl0aWVzLmNoYW5nZVN0YXRlT3JJbmZvQm94XG4gICAqL1xuICBtYWluVXRpbGl0aWVzLmNoYW5nZVN0YXRlT3JJbmZvQm94ID0gZnVuY3Rpb24obm9kZXMsIGluZGV4LCB2YWx1ZSwgdHlwZSkge1xuICAgIGlmIChub2Rlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMudW5kb2FibGUpIHtcbiAgICAgIHZhciBwYXJhbSA9IHtcbiAgICAgICAgaW5kZXg6IGluZGV4LFxuICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgIHR5cGU6IHR5cGUsXG4gICAgICAgIG5vZGVzOiBub2Rlc1xuICAgICAgfTtcblxuICAgICAgY3kudW5kb1JlZG8oKS5kbyhcImNoYW5nZVN0YXRlT3JJbmZvQm94XCIsIHBhcmFtKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICByZXR1cm4gZWxlbWVudFV0aWxpdGllcy5jaGFuZ2VTdGF0ZU9ySW5mb0JveChub2RlcywgaW5kZXgsIHZhbHVlLCB0eXBlKTtcbiAgICB9XG5cbiAgICBjeS5zdHlsZSgpLnVwZGF0ZSgpO1xuICB9O1xuXG4gIC8vIEFkZCBhIG5ldyBzdGF0ZSBvciBpbmZvIGJveCB0byBnaXZlbiBub2Rlcy5cbiAgLy8gVGhlIGJveCBpcyByZXByZXNlbnRlZCBieSB0aGUgcGFyYW1ldGVyIG9iai5cbiAgLy8gQ29uc2lkZXJzIHVuZG9hYmxlIG9wdGlvbi5cbiAgbWFpblV0aWxpdGllcy5hZGRTdGF0ZU9ySW5mb0JveCA9IGZ1bmN0aW9uKG5vZGVzLCBvYmopIHtcbiAgICBpZiAobm9kZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCFvcHRpb25zLnVuZG9hYmxlKSB7XG4gICAgICBlbGVtZW50VXRpbGl0aWVzLmFkZFN0YXRlT3JJbmZvQm94KG5vZGVzLCBvYmopO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHZhciBwYXJhbSA9IHtcbiAgICAgICAgb2JqOiBvYmosXG4gICAgICAgIG5vZGVzOiBub2Rlc1xuICAgICAgfTtcblxuICAgICAgY3kudW5kb1JlZG8oKS5kbyhcImFkZFN0YXRlT3JJbmZvQm94XCIsIHBhcmFtKTtcbiAgICB9XG5cbiAgICBjeS5zdHlsZSgpLnVwZGF0ZSgpO1xuICB9O1xuXG4gIC8vIFJlbW92ZSB0aGUgc3RhdGUgb3IgaW5mbyBib3hlcyBvZiB0aGUgZ2l2ZW4gbm9kZXMgYXQgZ2l2ZW4gaW5kZXguXG4gIC8vIENvbnNpZGVycyB1bmRvYWJsZSBvcHRpb24uXG4gIG1haW5VdGlsaXRpZXMucmVtb3ZlU3RhdGVPckluZm9Cb3ggPSBmdW5jdGlvbihub2RlcywgaW5kZXgpIHtcbiAgICBpZiAobm9kZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCFvcHRpb25zLnVuZG9hYmxlKSB7XG4gICAgICBlbGVtZW50VXRpbGl0aWVzLnJlbW92ZVN0YXRlT3JJbmZvQm94KG5vZGVzLCB7aW5kZXg6IGluZGV4fSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgdmFyIHBhcmFtID0ge1xuICAgICAgICBsb2NhdGlvbk9iajoge2luZGV4OiBpbmRleH0sXG4gICAgICAgIG5vZGVzOiBub2Rlc1xuICAgICAgfTtcblxuICAgICAgY3kudW5kb1JlZG8oKS5kbyhcInJlbW92ZVN0YXRlT3JJbmZvQm94XCIsIHBhcmFtKTtcbiAgICB9XG5cbiAgICBjeS5zdHlsZSgpLnVwZGF0ZSgpO1xuICB9O1xuXG5cbiAgLy9BcnJhbmdlIGluZm9ybWF0aW9uIGJveGVzXG4gIC8vSWYgZm9yY2UgY2hlY2sgaXMgdHJ1ZSwgaXQgcmVhcnJhbmdlcyBhbGwgaW5mb3JtYXRpb24gYm94ZXNcbiAgbWFpblV0aWxpdGllcy5maXRVbml0cyA9IGZ1bmN0aW9uIChub2RlLCBsb2NhdGlvbnMpIHtcbiAgICBpZiAobm9kZS5kYXRhKCdhdXh1bml0bGF5b3V0cycpID09PSB1bmRlZmluZWQgfHwgbm9kZS5kYXRhKCdzdGF0ZXNhbmRpbmZvcycpLmxlbmd0aCA8PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChsb2NhdGlvbnMgPT09IHVuZGVmaW5lZCB8fCBsb2NhdGlvbnMubGVuZ3RoIDw9IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIW9wdGlvbnMudW5kb2FibGUpIHtcbiAgICAgIGVsZW1lbnRVdGlsaXRpZXMuZml0VW5pdHMobm9kZSwgbG9jYXRpb25zKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICB2YXIgcGFyYW0gPSB7XG4gICAgICAgIG5vZGU6IG5vZGUsXG4gICAgICAgIGxvY2F0aW9uczogbG9jYXRpb25zXG4gICAgICB9O1xuXG4gICAgICBjeS51bmRvUmVkbygpLmRvKFwiZml0VW5pdHNcIiwgcGFyYW0pO1xuICAgIH1cblxuICAgIGN5LnN0eWxlKCkudXBkYXRlKCk7XG4gIH07XG5cbiAgLypcbiAgICogU2V0IG11bHRpbWVyIHN0YXR1cyBvZiB0aGUgZ2l2ZW4gbm9kZXMgdG8gdGhlIGdpdmVuIHN0YXR1cy5cbiAgICogQ29uc2lkZXJzIHVuZG9hYmxlIG9wdGlvbi5cbiAgICovXG4gIG1haW5VdGlsaXRpZXMuc2V0TXVsdGltZXJTdGF0dXMgPSBmdW5jdGlvbihub2Rlcywgc3RhdHVzKSB7XG4gICAgaWYgKG5vZGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zLnVuZG9hYmxlKSB7XG4gICAgICB2YXIgcGFyYW0gPSB7XG4gICAgICAgIHN0YXR1czogc3RhdHVzLFxuICAgICAgICBub2Rlczogbm9kZXMsXG4gICAgICAgIGZpcnN0VGltZTogdHJ1ZVxuICAgICAgfTtcblxuICAgICAgY3kudW5kb1JlZG8oKS5kbyhcInNldE11bHRpbWVyU3RhdHVzXCIsIHBhcmFtKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBlbGVtZW50VXRpbGl0aWVzLnNldE11bHRpbWVyU3RhdHVzKG5vZGVzLCBzdGF0dXMpO1xuICAgIH1cblxuICAgIGN5LnN0eWxlKCkudXBkYXRlKCk7XG4gIH07XG5cbiAgLyoqXG4gICAqIFJlZHJhdyBjbG9uZSBtYXJrZXJzIG9uIGdpdmVuIG5vZGVzIHdpdGhvdXQgY29uc2lkZXJpbmcgdW5kby5cbiAgICogU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9pVmlzLWF0LUJpbGtlbnQvbmV3dC9pc3N1ZXMvNTc0IFxuICAgKi9cbiAgbWFpblV0aWxpdGllcy5yZWRyYXdDbG9uZU1hcmtlcnMgPSBmdW5jdGlvbihub2Rlcykge1xuICAgIGVsZW1lbnRVdGlsaXRpZXMuc2V0Q2xvbmVNYXJrZXJTdGF0dXMobm9kZXMsIHRydWUpO1xuICB9XG5cbiAgLypcbiAgICogU2V0IGNsb25lIG1hcmtlciBzdGF0dXMgb2YgZ2l2ZW4gbm9kZXMgdG8gdGhlIGdpdmVuIHN0YXR1cy5cbiAgICogQ29uc2lkZXJzIHVuZG9hYmxlIG9wdGlvbi5cbiAgICovXG4gIG1haW5VdGlsaXRpZXMuc2V0Q2xvbmVNYXJrZXJTdGF0dXMgPSBmdW5jdGlvbihub2Rlcywgc3RhdHVzKSB7XG4gICAgaWYgKG5vZGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zLnVuZG9hYmxlKSB7XG4gICAgICB2YXIgcGFyYW0gPSB7XG4gICAgICAgIHN0YXR1czogc3RhdHVzLFxuICAgICAgICBub2Rlczogbm9kZXMsXG4gICAgICAgIGZpcnN0VGltZTogdHJ1ZVxuICAgICAgfTtcblxuICAgICAgY3kudW5kb1JlZG8oKS5kbyhcInNldENsb25lTWFya2VyU3RhdHVzXCIsIHBhcmFtKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBlbGVtZW50VXRpbGl0aWVzLnNldENsb25lTWFya2VyU3RhdHVzKG5vZGVzLCBzdGF0dXMpO1xuICAgIH1cblxuICAgIGN5LnN0eWxlKCkudXBkYXRlKCk7XG4gIH07XG5cbiAgLypcbiAgICogQ2hhbmdlIHN0eWxlL2NzcyBvZiBnaXZlbiBlbGVzIGJ5IHNldHRpbmcgZ2V0dGluZyBwcm9wZXJ0eSBuYW1lIHRvIHRoZSBnaXZlbiBnaXZlbiB2YWx1ZS92YWx1ZXMgKE5vdGUgdGhhdCB2YWx1ZU1hcCBwYXJhbWV0ZXIgbWF5IGJlXG4gICAqIGEgc2luZ2xlIHN0cmluZyBvciBhbiBpZCB0byB2YWx1ZSBtYXApLiBDb25zaWRlcnMgdW5kb2FibGUgb3B0aW9uLlxuICAgKi9cbiAgbWFpblV0aWxpdGllcy5jaGFuZ2VDc3MgPSBmdW5jdGlvbihlbGVzLCBuYW1lLCB2YWx1ZU1hcCkge1xuICAgIGlmIChlbGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghb3B0aW9ucy51bmRvYWJsZSkge1xuICAgICAgZWxlbWVudFV0aWxpdGllcy5jaGFuZ2VDc3MoZWxlcywgbmFtZSwgdmFsdWVNYXApO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHZhciBwYXJhbSA9IHtcbiAgICAgICAgZWxlczogZWxlcyxcbiAgICAgICAgdmFsdWVNYXA6IHZhbHVlTWFwLFxuICAgICAgICBuYW1lOiBuYW1lXG4gICAgICB9O1xuXG4gICAgICBjeS51bmRvUmVkbygpLmRvKFwiY2hhbmdlQ3NzXCIsIHBhcmFtKTtcbiAgICB9XG5cbiAgICBjeS5zdHlsZSgpLnVwZGF0ZSgpO1xuICB9O1xuXG4gIC8qXG4gICAqIENoYW5nZSBkYXRhIG9mIGdpdmVuIGVsZXMgYnkgc2V0dGluZyBnZXR0aW5nIHByb3BlcnR5IG5hbWUgdG8gdGhlIGdpdmVuIGdpdmVuIHZhbHVlL3ZhbHVlcyAoTm90ZSB0aGF0IHZhbHVlTWFwIHBhcmFtZXRlciBtYXkgYmVcbiAgICogYSBzaW5nbGUgc3RyaW5nIG9yIGFuIGlkIHRvIHZhbHVlIG1hcCkuIENvbnNpZGVycyB1bmRvYWJsZSBvcHRpb24uXG4gICAqL1xuICBtYWluVXRpbGl0aWVzLmNoYW5nZURhdGEgPSBmdW5jdGlvbihlbGVzLCBuYW1lLCB2YWx1ZU1hcCkge1xuICAgIGlmIChlbGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghb3B0aW9ucy51bmRvYWJsZSkge1xuICAgICAgZWxlbWVudFV0aWxpdGllcy5jaGFuZ2VEYXRhKGVsZXMsIG5hbWUsIHZhbHVlTWFwKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICB2YXIgcGFyYW0gPSB7XG4gICAgICAgIGVsZXM6IGVsZXMsXG4gICAgICAgIHZhbHVlTWFwOiB2YWx1ZU1hcCxcbiAgICAgICAgbmFtZTogbmFtZVxuICAgICAgfTtcblxuICAgICAgY3kudW5kb1JlZG8oKS5kbyhcImNoYW5nZURhdGFcIiwgcGFyYW0pO1xuICAgIH1cblxuICAgIGN5LnN0eWxlKCkudXBkYXRlKCk7XG4gIH07XG5cbiAgbWFpblV0aWxpdGllcy51cGRhdGVTZXRGaWVsZCA9IGZ1bmN0aW9uKGVsZSwgZmllbGROYW1lLCB0b0RlbGV0ZSwgdG9BZGQsIGNhbGxiYWNrKSB7XG4gICAgaWYgKCFvcHRpb25zLnVuZG9hYmxlKSB7XG4gICAgICBlbGVtZW50VXRpbGl0aWVzLmNoYW5nZURhdGEoZWxlLCBmaWVsZE5hbWUsIHRvRGVsZXRlLCB0b0FkZCwgY2FsbGJhY2spO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHZhciBwYXJhbSA9IHtcbiAgICAgICAgZWxlLFxuICAgICAgICBmaWVsZE5hbWUsXG4gICAgICAgIHRvRGVsZXRlLFxuICAgICAgICB0b0FkZCxcbiAgICAgICAgY2FsbGJhY2tcbiAgICAgIH07XG5cbiAgICAgIGN5LnVuZG9SZWRvKCkuZG8oXCJ1cGRhdGVTZXRGaWVsZFwiLCBwYXJhbSk7XG4gICAgfVxuICB9O1xuXG4gIG1haW5VdGlsaXRpZXMuc2V0RGVmYXVsdFByb3BlcnR5ID0gZnVuY3Rpb24oIF9jbGFzcywgbmFtZSwgdmFsdWUgKSB7XG4gICAgaWYgKCFvcHRpb25zLnVuZG9hYmxlKSB7XG4gICAgICB2YXIgcHJvcE1hcCA9IHt9O1xuICAgICAgcHJvcE1hcFsgbmFtZSBdID0gdmFsdWU7XG5cbiAgICAgIGVsZW1lbnRVdGlsaXRpZXMuc2V0RGVmYXVsdFByb3BlcnRpZXMoX2NsYXNzLCBwcm9wTWFwKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICB2YXIgcGFyYW0gPSB7XG4gICAgICAgIGNsYXNzOiBfY2xhc3MsXG4gICAgICAgIG5hbWUsXG4gICAgICAgIHZhbHVlXG4gICAgICB9O1xuXG4gICAgICBjeS51bmRvUmVkbygpLmRvKFwic2V0RGVmYXVsdFByb3BlcnR5XCIsIHBhcmFtKTtcbiAgICB9XG4gIH07XG5cbiAgbWFpblV0aWxpdGllcy51cGRhdGVJbmZvYm94U3R5bGUgPSBmdW5jdGlvbiggbm9kZSwgaW5kZXgsIG5ld1Byb3BzICkge1xuICAgIGlmICghb3B0aW9ucy51bmRvYWJsZSkge1xuICAgICAgZWxlbWVudFV0aWxpdGllcy51cGRhdGVJbmZvYm94U3R5bGUoIG5vZGUsIGluZGV4LCBuZXdQcm9wcyApO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHZhciBwYXJhbSA9IHtcbiAgICAgICAgbm9kZTogbm9kZSxcbiAgICAgICAgaW5kZXg6IGluZGV4LFxuICAgICAgICBuZXdQcm9wczogbmV3UHJvcHNcbiAgICAgIH07XG5cbiAgICAgIGN5LnVuZG9SZWRvKCkuZG8oXCJ1cGRhdGVJbmZvYm94U3R5bGVcIiwgcGFyYW0pO1xuICAgIH1cblxuICAgIGN5LnN0eWxlKCkudXBkYXRlKCk7XG4gIH07XG5cbiAgbWFpblV0aWxpdGllcy51cGRhdGVJbmZvYm94T2JqID0gZnVuY3Rpb24oIG5vZGUsIGluZGV4LCBuZXdQcm9wcyApIHtcbiAgICBpZiAoIW9wdGlvbnMudW5kb2FibGUpIHtcbiAgICAgIGVsZW1lbnRVdGlsaXRpZXMudXBkYXRlSW5mb2JveE9iaiggbm9kZSwgaW5kZXgsIG5ld1Byb3BzICk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgdmFyIHBhcmFtID0ge1xuICAgICAgICBub2RlOiBub2RlLFxuICAgICAgICBpbmRleDogaW5kZXgsXG4gICAgICAgIG5ld1Byb3BzOiBuZXdQcm9wc1xuICAgICAgfTtcblxuICAgICAgY3kudW5kb1JlZG8oKS5kbyhcInVwZGF0ZUluZm9ib3hPYmpcIiwgcGFyYW0pO1xuICAgIH1cblxuICAgIGN5LnN0eWxlKCkudXBkYXRlKCk7XG4gIH07XG5cbiAgbWFpblV0aWxpdGllcy5kZWxldGVBbmRQZXJmb3JtTGF5b3V0ID0gZnVuY3Rpb24gKGVsZXMsIGxheW91dHBhcmFtKSB7XG4gICAgdmFyIG5vZGVzID0gZWxlcy5ub2RlcygpOyAvLyBFbnN1cmUgdGhhdCBub2RlcyBsaXN0IGp1c3QgaW5jbHVkZSBub2Rlc1xuXG4gICAgdmFyIGFsbE5vZGVzID0gY3kubm9kZXMoXCI6dmlzaWJsZVwiKTtcbiAgICB2YXIgbm9kZXNUb0tlZXAgPSBlbGVtZW50VXRpbGl0aWVzLmV4dGVuZFJlbWFpbmluZ05vZGVzKG5vZGVzLCBhbGxOb2Rlcyk7XG4gICAgdmFyIG5vZGVzVG9SZW1vdmUgPSBhbGxOb2Rlcy5ub3Qobm9kZXNUb0tlZXApO1xuXG4gICAgaWYgKG5vZGVzVG9SZW1vdmUubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIW9wdGlvbnMudW5kb2FibGUpIHtcblxuICAgICAgICBlbGVtZW50VXRpbGl0aWVzLmRlbGV0ZUFuZFBlcmZvcm1MYXlvdXQobm9kZXNUb1JlbW92ZSwgbGF5b3V0cGFyYW0pO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgdmFyIHBhcmFtID0ge1xuICAgICAgICAgICAgZWxlczogbm9kZXNUb1JlbW92ZSxcbiAgICAgICAgICAgIGxheW91dHBhcmFtOiBsYXlvdXRwYXJhbSxcbiAgICAgICAgICAgIGZpcnN0VGltZTogdHJ1ZVxuICAgICAgICB9O1xuXG4gICAgICAgIGN5LnVuZG9SZWRvKCkuZG8oXCJkZWxldGVBbmRQZXJmb3JtTGF5b3V0XCIsIHBhcmFtKTtcbiAgICB9XG4gIH07XG5cbiAgLypcbiAgICogSGlkZXMgZ2l2ZW4gZWxlcyAodGhlIG9uZXMgd2hpY2ggYXJlIHNlbGVjdGVkKSBhbmQgcGVyZm9ybSBnaXZlbiBsYXlvdXQgYWZ0ZXJ3YXJkLiBMYXlvdXQgcGFyYW1ldGVyIG1heSBiZSBsYXlvdXQgb3B0aW9uc1xuICAgKiBvciBhIGZ1bmN0aW9uIHRvIGNhbGwuIFJlcXVpcmVzIHZpZXdVdGlsaXRpZXMgZXh0ZW5zaW9uIGFuZCBjb25zaWRlcnMgdW5kb2FibGUgb3B0aW9uLlxuICAgKi9cbiAgbWFpblV0aWxpdGllcy5oaWRlQW5kUGVyZm9ybUxheW91dCA9IGZ1bmN0aW9uKGVsZXMsIGxheW91dHBhcmFtKSB7XG4gICAgICB2YXIgbm9kZXMgPSBlbGVzLm5vZGVzKCk7IC8vIEVuc3VyZSB0aGF0IG5vZGVzIGxpc3QganVzdCBpbmNsdWRlIG5vZGVzXG5cbiAgICAgIHZhciBhbGxOb2RlcyA9IGN5Lm5vZGVzKFwiOnZpc2libGVcIik7XG4gICAgICB2YXIgbm9kZXNUb1Nob3cgPSBlbGVtZW50VXRpbGl0aWVzLmV4dGVuZFJlbWFpbmluZ05vZGVzKG5vZGVzLCBhbGxOb2Rlcyk7XG4gICAgICB2YXIgbm9kZXNUb0hpZGUgPSBhbGxOb2Rlcy5ub3Qobm9kZXNUb1Nob3cpO1xuXG4gICAgICBpZiAobm9kZXNUb0hpZGUubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoIW9wdGlvbnMudW5kb2FibGUpIHtcblxuICAgICAgICAgIHZhciBub2Rlc1dpdGhIaWRkZW5OZWlnaGJvciA9IGN5LmVkZ2VzKFwiOmhpZGRlblwiKS5jb25uZWN0ZWROb2RlcygnOnZpc2libGUnKTtcbiAgICAgICAgICBzYmdudml6SW5zdGFuY2UudGhpbkJvcmRlcihub2Rlc1dpdGhIaWRkZW5OZWlnaGJvcik7XG4gICAgICAgICAgZWxlbWVudFV0aWxpdGllcy5oaWRlQW5kUGVyZm9ybUxheW91dChub2Rlc1RvSGlkZSwgbGF5b3V0cGFyYW0pO1xuICAgICAgICAgIHZhciBub2Rlc1dpdGhIaWRkZW5OZWlnaGJvciA9IGN5LmVkZ2VzKFwiOmhpZGRlblwiKS5jb25uZWN0ZWROb2RlcygnOnZpc2libGUnKTtcbiAgICAgICAgICBzYmdudml6SW5zdGFuY2UudGhpY2tlbkJvcmRlcihub2Rlc1dpdGhIaWRkZW5OZWlnaGJvcik7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgICB2YXIgcGFyYW0gPSB7XG4gICAgICAgICAgICAgIGVsZXM6IG5vZGVzVG9IaWRlLFxuICAgICAgICAgICAgICBsYXlvdXRwYXJhbTogbGF5b3V0cGFyYW0sXG4gICAgICAgICAgICAgIGZpcnN0VGltZTogdHJ1ZVxuICAgICAgICAgIH07XG5cbiAgICAgICAgICB2YXIgdXIgPSBjeS51bmRvUmVkbygpO1xuICAgICAgICAgIHVyLmFjdGlvbihcInRoaWNrZW5Cb3JkZXJcIiwgc2JnbnZpekluc3RhbmNlLnRoaWNrZW5Cb3JkZXIsIHNiZ252aXpJbnN0YW5jZS50aGluQm9yZGVyKTtcbiAgICAgICAgICB1ci5hY3Rpb24oXCJ0aGluQm9yZGVyXCIsIHNiZ252aXpJbnN0YW5jZS50aGluQm9yZGVyLCBzYmdudml6SW5zdGFuY2UudGhpY2tlbkJvcmRlcik7XG5cbiAgICAgICAgICB2YXIgYWN0aW9ucyA9IFtdO1xuICAgICAgICAgIHZhciBub2Rlc1dpdGhIaWRkZW5OZWlnaGJvciA9IGN5LmVkZ2VzKFwiOmhpZGRlblwiKS5jb25uZWN0ZWROb2RlcygpLmludGVyc2VjdGlvbihub2Rlc1RvSGlkZSk7XG4gICAgICAgICAgYWN0aW9ucy5wdXNoKHtuYW1lOiBcInRoaW5Cb3JkZXJcIiwgcGFyYW06IG5vZGVzV2l0aEhpZGRlbk5laWdoYm9yfSk7XG4gICAgICAgICAgYWN0aW9ucy5wdXNoKHtuYW1lOiBcImhpZGVBbmRQZXJmb3JtTGF5b3V0XCIsIHBhcmFtOiBwYXJhbX0pO1xuICAgICAgICAgIG5vZGVzV2l0aEhpZGRlbk5laWdoYm9yID0gbm9kZXNUb0hpZGUubmVpZ2hib3Job29kKFwiOnZpc2libGVcIikubm9kZXMoKS5kaWZmZXJlbmNlKG5vZGVzVG9IaWRlKS5kaWZmZXJlbmNlKGN5Lm5vZGVzKFwiW3RoaWNrQm9yZGVyXVwiKSk7XG4gICAgICAgICAgYWN0aW9ucy5wdXNoKHtuYW1lOiBcInRoaWNrZW5Cb3JkZXJcIiwgcGFyYW06IG5vZGVzV2l0aEhpZGRlbk5laWdoYm9yfSk7XG4gICAgICAgICAgY3kudW5kb1JlZG8oKS5kbyhcImJhdGNoXCIsIGFjdGlvbnMpO1xuICAgICAgfVxuICB9O1xuXG4gIC8qXG4gICAqIFNob3dzIGFsbCBlbGVtZW50cyAodGhlIG9uZXMgd2hpY2ggYXJlIGhpZGRlbiBpZiBhbnkpIGFuZCBwZXJmb3JtIGdpdmVuIGxheW91dCBhZnRlcndhcmQuIExheW91dCBwYXJhbWV0ZXIgbWF5IGJlIGxheW91dCBvcHRpb25zXG4gICAqIG9yIGEgZnVuY3Rpb24gdG8gY2FsbC4gUmVxdWlyZXMgdmlld1V0aWxpdGllcyBleHRlbnNpb24gYW5kIGNvbnNpZGVycyB1bmRvYWJsZSBvcHRpb24uXG4gICAqL1xuICBtYWluVXRpbGl0aWVzLnNob3dBbGxBbmRQZXJmb3JtTGF5b3V0ID0gZnVuY3Rpb24obGF5b3V0cGFyYW0pIHtcbiAgICB2YXIgaGlkZGVuRWxlcyA9IGN5LmVsZW1lbnRzKCc6aGlkZGVuJyk7XG4gICAgaWYgKGhpZGRlbkVsZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICghb3B0aW9ucy51bmRvYWJsZSkge1xuICAgICAgdmFyIG5vZGVzV2l0aEhpZGRlbk5laWdoYm9yID0gY3kuZWRnZXMoXCI6aGlkZGVuXCIpLmNvbm5lY3RlZE5vZGVzKCc6dmlzaWJsZScpO1xuICAgICAgc2JnbnZpekluc3RhbmNlLnRoaW5Cb3JkZXIobm9kZXNXaXRoSGlkZGVuTmVpZ2hib3IpO1xuICAgICAgZWxlbWVudFV0aWxpdGllcy5zaG93QW5kUGVyZm9ybUxheW91dChoaWRkZW5FbGVzLCBsYXlvdXRwYXJhbSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgdmFyIHBhcmFtID0ge1xuICAgICAgICBlbGVzOiBoaWRkZW5FbGVzLFxuICAgICAgICBsYXlvdXRwYXJhbTogbGF5b3V0cGFyYW0sXG4gICAgICAgIGZpcnN0VGltZTogdHJ1ZVxuICAgICAgfTtcblxuICAgICAgdmFyIHVyID0gY3kudW5kb1JlZG8oKTtcbiAgICAgIHVyLmFjdGlvbihcInRoaWNrZW5Cb3JkZXJcIiwgc2JnbnZpekluc3RhbmNlLnRoaWNrZW5Cb3JkZXIsIHNiZ252aXpJbnN0YW5jZS50aGluQm9yZGVyKTtcbiAgICAgIHVyLmFjdGlvbihcInRoaW5Cb3JkZXJcIiwgc2JnbnZpekluc3RhbmNlLnRoaW5Cb3JkZXIsIHNiZ252aXpJbnN0YW5jZS50aGlja2VuQm9yZGVyKTtcblxuICAgICAgdmFyIGFjdGlvbnMgPSBbXTtcbiAgICAgIHZhciBub2Rlc1dpdGhIaWRkZW5OZWlnaGJvciA9IGN5Lm5vZGVzKFwiW3RoaWNrQm9yZGVyXVwiKTtcbiAgICAgIGFjdGlvbnMucHVzaCh7bmFtZTogXCJ0aGluQm9yZGVyXCIsIHBhcmFtOiBub2Rlc1dpdGhIaWRkZW5OZWlnaGJvcn0pO1xuICAgICAgYWN0aW9ucy5wdXNoKHtuYW1lOiBcInNob3dBbmRQZXJmb3JtTGF5b3V0XCIsIHBhcmFtOiBwYXJhbX0pO1xuICAgICAgY3kudW5kb1JlZG8oKS5kbyhcImJhdGNoXCIsIGFjdGlvbnMpO1xuICAgIH1cbiAgfTtcblxuICAvKlxuICAgKiBVbmhpZGUgZ2l2ZW4gZWxlcyAodGhlIG9uZXMgd2hpY2ggYXJlIGhpZGRlbiBpZiBhbnkpIGFuZCBwZXJmb3JtIGdpdmVuIGxheW91dCBhZnRlcndhcmQuIExheW91dCBwYXJhbWV0ZXIgbWF5IGJlIGxheW91dCBvcHRpb25zXG4gICAqIG9yIGEgZnVuY3Rpb24gdG8gY2FsbC4gUmVxdWlyZXMgdmlld1V0aWxpdGllcyBleHRlbnNpb24gYW5kIGNvbnNpZGVycyB1bmRvYWJsZSBvcHRpb24uXG4gICAqL1xuICBtYWluVXRpbGl0aWVzLnNob3dBbmRQZXJmb3JtTGF5b3V0ID0gZnVuY3Rpb24obWFpbkVsZSwgZWxlcywgbGF5b3V0cGFyYW0pIHtcbiAgICAgIHZhciBoaWRkZW5FbGVzID0gZWxlcy5maWx0ZXIoJzpoaWRkZW4nKTtcbiAgICAgIGlmIChoaWRkZW5FbGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIG1haW5VdGlsaXRpZXMuY2xvc2VVcEVsZW1lbnRzKG1haW5FbGUsIGhpZGRlbkVsZXMubm9kZXMoKSk7XG4gICAgICBpZiAoIW9wdGlvbnMudW5kb2FibGUpIHtcbiAgICAgICAgICB2YXIgbm9kZXNXaXRoSGlkZGVuTmVpZ2hib3IgPSBjeS5lZGdlcyhcIjpoaWRkZW5cIikuY29ubmVjdGVkTm9kZXMoJzp2aXNpYmxlJyk7XG4gICAgICAgICAgc2JnbnZpekluc3RhbmNlLnRoaW5Cb3JkZXIobm9kZXNXaXRoSGlkZGVuTmVpZ2hib3IpO1xuICAgICAgICAgIGVsZW1lbnRVdGlsaXRpZXMuc2hvd0FuZFBlcmZvcm1MYXlvdXQoaGlkZGVuRWxlcywgbGF5b3V0cGFyYW0pO1xuICAgICAgICAgIHZhciBub2Rlc1dpdGhIaWRkZW5OZWlnaGJvciA9IGN5LmVkZ2VzKFwiOmhpZGRlblwiKS5jb25uZWN0ZWROb2RlcygnOnZpc2libGUnKTtcbiAgICAgICAgICBzYmdudml6SW5zdGFuY2UudGhpY2tlbkJvcmRlcihub2Rlc1dpdGhIaWRkZW5OZWlnaGJvcik7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgICB2YXIgcGFyYW0gPSB7XG4gICAgICAgICAgICAgIGVsZXM6IGhpZGRlbkVsZXMsXG4gICAgICAgICAgICAgIGxheW91dHBhcmFtOiBsYXlvdXRwYXJhbSxcbiAgICAgICAgICAgICAgZmlyc3RUaW1lOiB0cnVlXG4gICAgICAgICAgfTtcblxuICAgICAgICAgIHZhciB1ciA9IGN5LnVuZG9SZWRvKCk7XG4gICAgICAgICAgdXIuYWN0aW9uKFwidGhpY2tlbkJvcmRlclwiLCBzYmdudml6SW5zdGFuY2UudGhpY2tlbkJvcmRlciwgc2JnbnZpekluc3RhbmNlLnRoaW5Cb3JkZXIpO1xuICAgICAgICAgIHVyLmFjdGlvbihcInRoaW5Cb3JkZXJcIiwgc2JnbnZpekluc3RhbmNlLnRoaW5Cb3JkZXIsIHNiZ252aXpJbnN0YW5jZS50aGlja2VuQm9yZGVyKTtcblxuICAgICAgICAgIHZhciBhY3Rpb25zID0gW107XG4gICAgICAgICAgdmFyIG5vZGVzVG9UaGluQm9yZGVyID0gKGhpZGRlbkVsZXMubmVpZ2hib3Job29kKFwiOnZpc2libGVcIikubm9kZXMoXCJbdGhpY2tCb3JkZXJdXCIpKVxuICAgICAgICAgICAgICAgICAgLmRpZmZlcmVuY2UoY3kuZWRnZXMoXCI6aGlkZGVuXCIpLmRpZmZlcmVuY2UoaGlkZGVuRWxlcy5lZGdlcygpLnVuaW9uKGhpZGRlbkVsZXMubm9kZXMoKS5jb25uZWN0ZWRFZGdlcygpKSkuY29ubmVjdGVkTm9kZXMoKSk7XG4gICAgICAgICAgYWN0aW9ucy5wdXNoKHtuYW1lOiBcInRoaW5Cb3JkZXJcIiwgcGFyYW06IG5vZGVzVG9UaGluQm9yZGVyfSk7XG4gICAgICAgICAgYWN0aW9ucy5wdXNoKHtuYW1lOiBcInNob3dBbmRQZXJmb3JtTGF5b3V0XCIsIHBhcmFtOiBwYXJhbX0pO1xuICAgICAgICAgIHZhciBub2Rlc1RvVGhpY2tlbkJvcmRlciA9IGhpZGRlbkVsZXMubm9kZXMoKS5lZGdlc1dpdGgoY3kubm9kZXMoXCI6aGlkZGVuXCIpLmRpZmZlcmVuY2UoaGlkZGVuRWxlcy5ub2RlcygpKSlcbiAgXHQgICAgICAgICAgICAuY29ubmVjdGVkTm9kZXMoKS5pbnRlcnNlY3Rpb24oaGlkZGVuRWxlcy5ub2RlcygpKTtcbiAgICAgICAgICBhY3Rpb25zLnB1c2goe25hbWU6IFwidGhpY2tlbkJvcmRlclwiLCBwYXJhbTogbm9kZXNUb1RoaWNrZW5Cb3JkZXJ9KTtcbiAgICAgICAgICBjeS51bmRvUmVkbygpLmRvKFwiYmF0Y2hcIiwgYWN0aW9ucyk7XG4gICAgICB9XG4gIH07XG5cbiAgLypcbiAgKiBUYWtlcyB0aGUgaGlkZGVuIGVsZW1lbnRzIGNsb3NlIHRvIHRoZSBub2RlcyB3aG9zZSBuZWlnaGJvcnMgd2lsbCBiZSBzaG93blxuICAqICovXG4gIG1haW5VdGlsaXRpZXMuY2xvc2VVcEVsZW1lbnRzID0gZnVuY3Rpb24obWFpbkVsZSwgaGlkZGVuRWxlcykge1xuICAgICAgdmFyIGxlZnRYID0gTnVtYmVyLk1BWF9WQUxVRTtcbiAgICAgIHZhciByaWdodFggPSBOdW1iZXIuTUlOX1ZBTFVFO1xuICAgICAgdmFyIHRvcFkgPSBOdW1iZXIuTUFYX1ZBTFVFO1xuICAgICAgdmFyIGJvdHRvbVkgPSBOdW1iZXIuTUlOX1ZBTFVFO1xuICAgICAgLy8gQ2hlY2sgdGhlIHggYW5kIHkgbGltaXRzIG9mIGFsbCBoaWRkZW4gZWxlbWVudHMgYW5kIHN0b3JlIHRoZW0gaW4gdGhlIHZhcmlhYmxlcyBhYm92ZVxuICAgICAgaGlkZGVuRWxlcy5mb3JFYWNoKGZ1bmN0aW9uKCBlbGUgKXtcbiAgICAgICAgICBpZiAoZWxlLmRhdGEoJ2NsYXNzJykgIT0gJ2NvbXBhcnRtZW50JyAmJiAgZWxlLmRhdGEoJ2NsYXNzJykgIT0gJ2NvbXBsZXgnKVxuICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdmFyIGhhbGZXaWR0aCA9IGVsZS5vdXRlcldpZHRoKCkvMjtcbiAgICAgICAgICAgICAgdmFyIGhhbGZIZWlnaHQgPSBlbGUub3V0ZXJIZWlnaHQoKS8yO1xuICAgICAgICAgICAgICBpZiAoZWxlLnBvc2l0aW9uKFwieFwiKSAtIGhhbGZXaWR0aCA8IGxlZnRYKVxuICAgICAgICAgICAgICAgICAgbGVmdFggPSBlbGUucG9zaXRpb24oXCJ4XCIpIC0gaGFsZldpZHRoO1xuICAgICAgICAgICAgICBpZiAoZWxlLnBvc2l0aW9uKFwieFwiKSArIGhhbGZXaWR0aCA+IHJpZ2h0WClcbiAgICAgICAgICAgICAgICAgIHJpZ2h0WCA9IGVsZS5wb3NpdGlvbihcInhcIikgKyBoYWxmV2lkdGg7XG4gICAgICAgICAgICAgIGlmIChlbGUucG9zaXRpb24oXCJ5XCIpIC0gaGFsZkhlaWdodCA8IHRvcFkpXG4gICAgICAgICAgICAgICAgICB0b3BZID0gZWxlLnBvc2l0aW9uKFwieVwiKSAtIGhhbGZIZWlnaHQ7XG4gICAgICAgICAgICAgIGlmIChlbGUucG9zaXRpb24oXCJ5XCIpICsgaGFsZkhlaWdodCA+IHRvcFkpXG4gICAgICAgICAgICAgICAgICBib3R0b21ZID0gZWxlLnBvc2l0aW9uKFwieVwiKSArIGhhbGZIZWlnaHQ7XG4gICAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIC8vVGhlIGNvb3JkaW5hdGVzIG9mIHRoZSBvbGQgY2VudGVyIGNvbnRhaW5pbmcgdGhlIGhpZGRlbiBub2Rlc1xuICAgICAgdmFyIG9sZENlbnRlclggPSAobGVmdFggKyByaWdodFgpLzI7XG4gICAgICB2YXIgb2xkQ2VudGVyWSA9ICh0b3BZICsgYm90dG9tWSkvMjtcblxuICAgICAgLy9IZXJlIHdlIGNhbGN1bGF0ZSB0d28gcGFyYW1ldGVycyB3aGljaCBkZWZpbmUgdGhlIGFyZWEgaW4gd2hpY2ggdGhlIGhpZGRlbiBlbGVtZW50cyBhcmUgcGxhY2VkIGluaXRpYWxseVxuICAgICAgdmFyIG1pbkhvcml6b250YWxQYXJhbSA9IG1haW5FbGUub3V0ZXJXaWR0aCgpLzIgKyAocmlnaHRYIC0gbGVmdFgpLzI7XG4gICAgICB2YXIgbWF4SG9yaXpvbnRhbFBhcmFtID0gbWFpbkVsZS5vdXRlcldpZHRoKCkgKyAocmlnaHRYIC0gbGVmdFgpLzI7XG4gICAgICB2YXIgbWluVmVydGljYWxQYXJhbSA9IG1haW5FbGUub3V0ZXJIZWlnaHQoKS8yICsgKGJvdHRvbVkgLSB0b3BZKS8yO1xuICAgICAgdmFyIG1heFZlcnRpY2FsUGFyYW0gPSBtYWluRWxlLm91dGVySGVpZ2h0KCkgKyAoYm90dG9tWSAtIHRvcFkpLzI7XG5cbiAgICAgIC8vUXVhZHJhbnRzIGlzIGFuIG9iamVjdCBvZiB0aGUgZm9ybSB7Zmlyc3Q6XCJvYnRhaW5lZFwiLCBzZWNvbmQ6XCJmcmVlXCIsIHRoaXJkOlwiZnJlZVwiLCBmb3VydGg6XCJvYnRhaW5lZFwifVxuICAgICAgLy8gd2hpY2ggaG9sZHMgd2hpY2ggcXVhZHJhbnQgYXJlIGZyZWUgKHRoYXQncyB3aGVyZSBoaWRkZW4gbm9kZXMgd2lsbCBiZSBicm91Z2h0KVxuICAgICAgdmFyIHF1YWRyYW50cyA9IG1haW5VdGlsaXRpZXMuY2hlY2tPY2N1cGllZFF1YWRyYW50cyhtYWluRWxlLCBoaWRkZW5FbGVzKTtcbiAgICAgIHZhciBmcmVlUXVhZHJhbnRzID0gW107XG4gICAgICBmb3IgKHZhciBwcm9wZXJ0eSBpbiBxdWFkcmFudHMpIHtcbiAgICAgICAgICBpZiAocXVhZHJhbnRzW3Byb3BlcnR5XSA9PT0gXCJmcmVlXCIpXG4gICAgICAgICAgICAgIGZyZWVRdWFkcmFudHMucHVzaChwcm9wZXJ0eSk7XG4gICAgICB9XG5cbiAgICAgIC8vQ2FuIHRha2UgdmFsdWVzIDEgYW5kIC0xIGFuZCBhcmUgdXNlZCB0byBwbGFjZSB0aGUgaGlkZGVuIG5vZGVzIGluIHRoZSByYW5kb20gcXVhZHJhbnRcbiAgICAgIHZhciBob3Jpem9udGFsTXVsdDtcbiAgICAgIHZhciB2ZXJ0aWNhbE11bHQ7XG4gICAgICBpZiAoZnJlZVF1YWRyYW50cy5sZW5ndGggPiAwKVxuICAgICAge1xuICAgICAgICBpZiAoZnJlZVF1YWRyYW50cy5sZW5ndGggPT09IDMpXG4gICAgICAgIHtcbiAgICAgICAgICBpZiAoZnJlZVF1YWRyYW50cy5pbmNsdWRlcygnZmlyc3QnKSAmJiBmcmVlUXVhZHJhbnRzLmluY2x1ZGVzKCdzZWNvbmQnKSAmJiBmcmVlUXVhZHJhbnRzLmluY2x1ZGVzKCd0aGlyZCcpKVxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGhvcml6b250YWxNdWx0ID0gLTE7XG4gICAgICAgICAgICB2ZXJ0aWNhbE11bHQgPSAtMTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSBpZiAoZnJlZVF1YWRyYW50cy5pbmNsdWRlcygnZmlyc3QnKSAmJiBmcmVlUXVhZHJhbnRzLmluY2x1ZGVzKCdzZWNvbmQnKSAmJiBmcmVlUXVhZHJhbnRzLmluY2x1ZGVzKCdmb3VydGgnKSlcbiAgICAgICAgICB7XG4gICAgICAgICAgICBob3Jpem9udGFsTXVsdCA9IDE7XG4gICAgICAgICAgICB2ZXJ0aWNhbE11bHQgPSAtMTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSBpZiAoZnJlZVF1YWRyYW50cy5pbmNsdWRlcygnZmlyc3QnKSAmJiBmcmVlUXVhZHJhbnRzLmluY2x1ZGVzKCd0aGlyZCcpICYmIGZyZWVRdWFkcmFudHMuaW5jbHVkZXMoJ2ZvdXJ0aCcpKVxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGhvcml6b250YWxNdWx0ID0gMTtcbiAgICAgICAgICAgIHZlcnRpY2FsTXVsdCA9IDE7XG4gICAgICAgICAgfVxuICAgICAgICAgIGVsc2UgaWYgKGZyZWVRdWFkcmFudHMuaW5jbHVkZXMoJ3NlY29uZCcpICYmIGZyZWVRdWFkcmFudHMuaW5jbHVkZXMoJ3RoaXJkJykgJiYgZnJlZVF1YWRyYW50cy5pbmNsdWRlcygnZm91cnRoJykpXG4gICAgICAgICAge1xuICAgICAgICAgICAgaG9yaXpvbnRhbE11bHQgPSAtMTtcbiAgICAgICAgICAgIHZlcnRpY2FsTXVsdCA9IDE7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgIC8vUmFuZG9tbHkgcGlja3Mgb25lIHF1YWRyYW50IGZyb20gdGhlIGZyZWUgcXVhZHJhbnRzXG4gICAgICAgICAgdmFyIHJhbmRvbVF1YWRyYW50ID0gZnJlZVF1YWRyYW50c1tNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqZnJlZVF1YWRyYW50cy5sZW5ndGgpXTtcblxuICAgICAgICAgIGlmIChyYW5kb21RdWFkcmFudCA9PT0gXCJmaXJzdFwiKSB7XG4gICAgICAgICAgICAgIGhvcml6b250YWxNdWx0ID0gMTtcbiAgICAgICAgICAgICAgdmVydGljYWxNdWx0ID0gLTE7XG4gICAgICAgICAgfVxuICAgICAgICAgIGVsc2UgaWYgKHJhbmRvbVF1YWRyYW50ID09PSBcInNlY29uZFwiKSB7XG4gICAgICAgICAgICAgIGhvcml6b250YWxNdWx0ID0gLTE7XG4gICAgICAgICAgICAgIHZlcnRpY2FsTXVsdCA9IC0xO1xuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIGlmIChyYW5kb21RdWFkcmFudCA9PT0gXCJ0aGlyZFwiKSB7XG4gICAgICAgICAgICAgIGhvcml6b250YWxNdWx0ID0gLTE7XG4gICAgICAgICAgICAgIHZlcnRpY2FsTXVsdCA9IDE7XG4gICAgICAgICAgfVxuICAgICAgICAgIGVsc2UgaWYgKHJhbmRvbVF1YWRyYW50ID09PSBcImZvdXJ0aFwiKSB7XG4gICAgICAgICAgICAgIGhvcml6b250YWxNdWx0ID0gMTtcbiAgICAgICAgICAgICAgdmVydGljYWxNdWx0ID0gMTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGVsc2VcbiAgICAgIHtcbiAgICAgICAgICBob3Jpem9udGFsTXVsdCA9IDA7XG4gICAgICAgICAgdmVydGljYWxNdWx0ID0gMDtcbiAgICAgIH1cbiAgICAgIC8vIElmIHRoZSBob3Jpem9udGFsTXVsdCBpcyAwIGl0IG1lYW5zIHRoYXQgbm8gcXVhZHJhbnQgaXMgZnJlZSwgc28gd2UgcmFuZG9tbHkgY2hvb3NlIGEgcXVhZHJhbnRcbiAgICAgIHZhciBob3Jpem9udGFsUGFyYW0gPSBtYWluVXRpbGl0aWVzLmdlbmVyYXRlUmFuZG9tKG1pbkhvcml6b250YWxQYXJhbSxtYXhIb3Jpem9udGFsUGFyYW0saG9yaXpvbnRhbE11bHQpO1xuICAgICAgdmFyIHZlcnRpY2FsUGFyYW0gPSBtYWluVXRpbGl0aWVzLmdlbmVyYXRlUmFuZG9tKG1pblZlcnRpY2FsUGFyYW0sbWF4VmVydGljYWxQYXJhbSx2ZXJ0aWNhbE11bHQpO1xuXG4gICAgICAvL1RoZSBjb29yZGluYXRlcyBvZiB0aGUgY2VudGVyIHdoZXJlIHRoZSBoaWRkZW4gbm9kZXMgd2lsbCBiZSB0cmFuc2ZlcmVkXG4gICAgICB2YXIgbmV3Q2VudGVyWCA9IG1haW5FbGUucG9zaXRpb24oXCJ4XCIpICsgaG9yaXpvbnRhbFBhcmFtO1xuICAgICAgdmFyIG5ld0NlbnRlclkgPSBtYWluRWxlLnBvc2l0aW9uKFwieVwiKSArIHZlcnRpY2FsUGFyYW07XG5cbiAgICAgIHZhciB4ZGlmZiA9IG5ld0NlbnRlclggLSBvbGRDZW50ZXJYO1xuICAgICAgdmFyIHlkaWZmID0gbmV3Q2VudGVyWSAtIG9sZENlbnRlclk7XG5cbiAgICAgIC8vQ2hhbmdlIHRoZSBwb3NpdGlvbiBvZiBoaWRkZW4gZWxlbWVudHNcbiAgICAgIGhpZGRlbkVsZXMuZm9yRWFjaChmdW5jdGlvbiggZWxlICl7XG4gICAgICAgICAgdmFyIG5ld3ggPSBlbGUucG9zaXRpb24oXCJ4XCIpICsgeGRpZmY7XG4gICAgICAgICAgdmFyIG5ld3kgPSBlbGUucG9zaXRpb24oXCJ5XCIpICsgeWRpZmY7XG4gICAgICAgICAgZWxlLnBvc2l0aW9uKFwieFwiLCBuZXd4KTtcbiAgICAgICAgICBlbGUucG9zaXRpb24oXCJ5XCIsbmV3eSk7XG4gICAgICB9KTtcbiAgfTtcblxuICAvKlxuICAgKiBHZW5lcmF0ZXMgYSBudW1iZXIgYmV0d2VlbiAyIG5yIGFuZCBtdWx0aW1wbGllcyBpdCB3aXRoIDEgb3IgLTFcbiAgICogKi9cbiAgbWFpblV0aWxpdGllcy5nZW5lcmF0ZVJhbmRvbSA9IGZ1bmN0aW9uKG1pbiwgbWF4LCBtdWx0KSB7XG4gICAgICB2YXIgdmFsID0gWy0xLDFdO1xuICAgICAgaWYgKG11bHQgPT09IDApXG4gICAgICAgICAgbXVsdCA9IHZhbFtNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqdmFsLmxlbmd0aCldO1xuICAgICAgcmV0dXJuIChNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAobWF4IC0gbWluICsgMSkpICsgbWluKSAqIG11bHQ7XG4gIH07XG5cbiAgLypcbiAgICogVGhpcyBmdW5jdGlvbiBtYWtlcyBzdXJlIHRoYXQgdGhlIHJhbmRvbSBudW1iZXIgbGllcyBpbiBmcmVlIHF1YWRyYW50XG4gICAqICovXG4gIG1haW5VdGlsaXRpZXMuY2hlY2tPY2N1cGllZFF1YWRyYW50cyA9IGZ1bmN0aW9uKG1haW5FbGUsIGhpZGRlbkVsZXMpIHtcbiAgICAgIGlmIChlbGVtZW50VXRpbGl0aWVzLmdldE1hcFR5cGUoKSA9PSAnUEQnKVxuICAgICAge1xuICAgICAgICB2YXIgdmlzaWJsZU5laWdoYm9yRWxlcyA9IG1haW5FbGUubmVpZ2hib3Job29kKCkuZGlmZmVyZW5jZShoaWRkZW5FbGVzKS5ub2RlcygpO1xuICAgICAgICB2YXIgdmlzaWJsZU5laWdoYm9yc09mTmVpZ2hib3JzID0gdmlzaWJsZU5laWdoYm9yRWxlcy5uZWlnaGJvcmhvb2QoKS5kaWZmZXJlbmNlKGhpZGRlbkVsZXMpLmRpZmZlcmVuY2UobWFpbkVsZSkubm9kZXMoKTtcbiAgICAgICAgdmFyIHZpc2libGVFbGVzID0gdmlzaWJsZU5laWdoYm9yRWxlcy51bmlvbih2aXNpYmxlTmVpZ2hib3JzT2ZOZWlnaGJvcnMpO1xuICAgICAgfVxuICAgICAgZWxzZVxuICAgICAgICB2YXIgdmlzaWJsZUVsZXMgPSBtYWluRWxlLm5laWdoYm9yaG9vZCgpLmRpZmZlcmVuY2UoaGlkZGVuRWxlcykubm9kZXMoKTtcbiAgICAgIHZhciBvY2N1cGllZFF1YWRyYW50cyA9IHtmaXJzdDpcImZyZWVcIiwgc2Vjb25kOlwiZnJlZVwiLCB0aGlyZDpcImZyZWVcIiwgZm91cnRoOlwiZnJlZVwifTtcblxuICAgICAgdmlzaWJsZUVsZXMuZm9yRWFjaChmdW5jdGlvbiggZWxlICl7XG4gICAgICAgICAgaWYgKGVsZS5kYXRhKCdjbGFzcycpICE9ICdjb21wYXJ0bWVudCcgJiYgIGVsZS5kYXRhKCdjbGFzcycpICE9ICdjb21wbGV4JylcbiAgICAgICAgICB7XG4gICAgICAgICAgICAgIGlmIChlbGUucG9zaXRpb24oXCJ4XCIpIDwgbWFpbkVsZS5wb3NpdGlvbihcInhcIikgJiYgZWxlLnBvc2l0aW9uKFwieVwiKSA8IG1haW5FbGUucG9zaXRpb24oXCJ5XCIpKVxuICAgICAgICAgICAgICAgICAgb2NjdXBpZWRRdWFkcmFudHMuc2Vjb25kID0gXCJvY2N1cGllZFwiO1xuICAgICAgICAgICAgICBlbHNlIGlmIChlbGUucG9zaXRpb24oXCJ4XCIpID4gbWFpbkVsZS5wb3NpdGlvbihcInhcIikgJiYgZWxlLnBvc2l0aW9uKFwieVwiKSA8IG1haW5FbGUucG9zaXRpb24oXCJ5XCIpKVxuICAgICAgICAgICAgICAgICAgb2NjdXBpZWRRdWFkcmFudHMuZmlyc3QgPSBcIm9jY3VwaWVkXCI7XG4gICAgICAgICAgICAgIGVsc2UgaWYgKGVsZS5wb3NpdGlvbihcInhcIikgPCBtYWluRWxlLnBvc2l0aW9uKFwieFwiKSAmJiBlbGUucG9zaXRpb24oXCJ5XCIpID4gbWFpbkVsZS5wb3NpdGlvbihcInlcIikpXG4gICAgICAgICAgICAgICAgICBvY2N1cGllZFF1YWRyYW50cy50aGlyZCA9IFwib2NjdXBpZWRcIjtcbiAgICAgICAgICAgICAgZWxzZSBpZiAoZWxlLnBvc2l0aW9uKFwieFwiKSA+IG1haW5FbGUucG9zaXRpb24oXCJ4XCIpICYmIGVsZS5wb3NpdGlvbihcInlcIikgPiBtYWluRWxlLnBvc2l0aW9uKFwieVwiKSlcbiAgICAgICAgICAgICAgICAgIG9jY3VwaWVkUXVhZHJhbnRzLmZvdXJ0aCA9IFwib2NjdXBpZWRcIjtcbiAgICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBvY2N1cGllZFF1YWRyYW50cztcbiAgfTtcblxuICAvLyBPdmVycmlkZXMgaGlnaGxpZ2h0UHJvY2Vzc2VzIGZyb20gU0JHTlZJWiAtIGRvIG5vdCBoaWdobGlnaHQgYW55IG5vZGVzIHdoZW4gdGhlIG1hcCB0eXBlIGlzIEFGXG4gIG1haW5VdGlsaXRpZXMuaGlnaGxpZ2h0UHJvY2Vzc2VzID0gZnVuY3Rpb24oX25vZGVzKSB7XG4gICAgaWYgKGVsZW1lbnRVdGlsaXRpZXMuZ2V0TWFwVHlwZSgpID09IFwiQUZcIilcbiAgICAgIHJldHVybjtcbiAgICBzYmdudml6SW5zdGFuY2UuaGlnaGxpZ2h0UHJvY2Vzc2VzKF9ub2Rlcyk7XG4gIH07XG5cbiAgLyoqXG4gICAqIFJlc2V0cyBtYXAgdHlwZSB0byB1bmRlZmluZWRcbiAgICovXG4gIG1haW5VdGlsaXRpZXMucmVzZXRNYXBUeXBlID0gZnVuY3Rpb24oKXtcbiAgICBlbGVtZW50VXRpbGl0aWVzLnJlc2V0TWFwVHlwZSgpO1xuICB9O1xuXG4gIC8qKlxuICAgKiByZXR1cm4gOiBtYXAgdHlwZVxuICAgKi9cbiAgbWFpblV0aWxpdGllcy5nZXRNYXBUeXBlID0gZnVuY3Rpb24oKXtcbiAgICByZXR1cm4gZWxlbWVudFV0aWxpdGllcy5nZXRNYXBUeXBlKCk7XG4gIH07XG5cbiAgbWFpblV0aWxpdGllcy5hZGRCYWNrZ3JvdW5kSW1hZ2UgPSBmdW5jdGlvbihub2RlcywgYmdPYmosIHVwZGF0ZUluZm8sIHByb21wdEludmFsaWRJbWFnZSwgdmFsaWRhdGVVUkwpe1xuICAgIGlmIChub2Rlcy5sZW5ndGggPT09IDAgfHwgIWJnT2JqKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgYmdPYmpbJ2ZpcnN0VGltZSddID0gdHJ1ZTtcbiAgICBpZiAob3B0aW9ucy51bmRvYWJsZSkge1xuICAgICAgdmFyIHBhcmFtID0ge1xuICAgICAgICBiZ09iajogYmdPYmosXG4gICAgICAgIG5vZGVzOiBub2RlcyxcbiAgICAgICAgdXBkYXRlSW5mbzogdXBkYXRlSW5mbyxcbiAgICAgICAgcHJvbXB0SW52YWxpZEltYWdlOiBwcm9tcHRJbnZhbGlkSW1hZ2UsXG4gICAgICAgIHZhbGlkYXRlVVJMOiB2YWxpZGF0ZVVSTCxcbiAgICAgIH07XG5cbiAgICAgIGN5LnVuZG9SZWRvKCkuZG8oXCJhZGRCYWNrZ3JvdW5kSW1hZ2VcIiwgcGFyYW0pO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGVsZW1lbnRVdGlsaXRpZXMuYWRkQmFja2dyb3VuZEltYWdlKG5vZGVzLCBiZ09iaiwgdXBkYXRlSW5mbywgcHJvbXB0SW52YWxpZEltYWdlLCB2YWxpZGF0ZVVSTCk7XG4gICAgfVxuXG4gICAgY3kuc3R5bGUoKS51cGRhdGUoKTtcbiAgfVxuXG4gIG1haW5VdGlsaXRpZXMucmVtb3ZlQmFja2dyb3VuZEltYWdlID0gZnVuY3Rpb24obm9kZXMsIGJnT2JqKXtcbiAgICBpZiAobm9kZXMubGVuZ3RoID09PSAwIHx8ICFiZ09iaikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGJnT2JqWydmaXJzdFRpbWUnXSA9IHRydWU7XG4gICAgaWYgKG9wdGlvbnMudW5kb2FibGUpIHtcbiAgICAgIHZhciBwYXJhbSA9IHtcbiAgICAgICAgYmdPYmo6IGJnT2JqLFxuICAgICAgICBub2Rlczogbm9kZXNcbiAgICAgIH07XG5cbiAgICAgIGN5LnVuZG9SZWRvKCkuZG8oXCJyZW1vdmVCYWNrZ3JvdW5kSW1hZ2VcIiwgcGFyYW0pO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGVsZW1lbnRVdGlsaXRpZXMucmVtb3ZlQmFja2dyb3VuZEltYWdlKG5vZGVzLCBiZ09iaik7XG4gICAgfVxuXG4gICAgY3kuc3R5bGUoKS51cGRhdGUoKTtcbiAgfVxuXG4gIG1haW5VdGlsaXRpZXMudXBkYXRlQmFja2dyb3VuZEltYWdlID0gZnVuY3Rpb24obm9kZXMsIGJnT2JqKXtcbiAgICBpZiAobm9kZXMubGVuZ3RoID09PSAwIHx8ICFiZ09iaikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zLnVuZG9hYmxlKSB7XG4gICAgICB2YXIgcGFyYW0gPSB7XG4gICAgICAgIGJnT2JqOiBiZ09iaixcbiAgICAgICAgbm9kZXM6IG5vZGVzXG4gICAgICB9O1xuXG4gICAgICBjeS51bmRvUmVkbygpLmRvKFwidXBkYXRlQmFja2dyb3VuZEltYWdlXCIsIHBhcmFtKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBlbGVtZW50VXRpbGl0aWVzLnVwZGF0ZUJhY2tncm91bmRJbWFnZShub2RlcywgYmdPYmopO1xuICAgIH1cblxuICAgIGN5LnN0eWxlKCkudXBkYXRlKCk7XG4gIH1cblxuICBtYWluVXRpbGl0aWVzLmNoYW5nZUJhY2tncm91bmRJbWFnZSA9IGZ1bmN0aW9uKG5vZGVzLCBvbGRJbWcsIG5ld0ltZywgdXBkYXRlSW5mbywgcHJvbXB0SW52YWxpZEltYWdlLCB2YWxpZGF0ZVVSTCl7XG4gICAgaWYgKG5vZGVzLmxlbmd0aCA9PT0gMCB8fCAhb2xkSW1nIHx8ICFuZXdJbWcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucy51bmRvYWJsZSkge1xuICAgICAgdmFyIHBhcmFtID0ge1xuICAgICAgICBvbGRJbWc6IG9sZEltZyxcbiAgICAgICAgbmV3SW1nOiBuZXdJbWcsXG4gICAgICAgIG5vZGVzOiBub2RlcyxcbiAgICAgICAgZmlyc3RUaW1lOiB0cnVlLFxuICAgICAgICB1cGRhdGVJbmZvOiB1cGRhdGVJbmZvLFxuICAgICAgICBwcm9tcHRJbnZhbGlkSW1hZ2U6IHByb21wdEludmFsaWRJbWFnZSxcbiAgICAgICAgdmFsaWRhdGVVUkw6IHZhbGlkYXRlVVJMXG4gICAgICB9O1xuXG4gICAgICBjeS51bmRvUmVkbygpLmRvKFwiY2hhbmdlQmFja2dyb3VuZEltYWdlXCIsIHBhcmFtKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBlbGVtZW50VXRpbGl0aWVzLmNoYW5nZUJhY2tncm91bmRJbWFnZShub2Rlcywgb2xkSW1nLCBuZXdJbWcsIHRydWUsIHVwZGF0ZUluZm8sIHByb21wdEludmFsaWRJbWFnZSwgdmFsaWRhdGVVUkwpO1xuICAgIH1cblxuICAgIGN5LnN0eWxlKCkudXBkYXRlKCk7XG4gIH1cblxuICByZXR1cm4gbWFpblV0aWxpdGllcztcbn07XG4iLCIvKlxuICogIEV4dGVuZCBkZWZhdWx0IG9wdGlvbnMgYW5kIGdldCBjdXJyZW50IG9wdGlvbnMgYnkgdXNpbmcgdGhpcyBmaWxlXG4gKi9cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG5cbiAgLy8gZGVmYXVsdCBvcHRpb25zXG4gIHZhciBkZWZhdWx0cyA9IHtcbiAgICAvLyBUaGUgcGF0aCBvZiBjb3JlIGxpYnJhcnkgaW1hZ2VzIHdoZW4gc2JnbnZpeiBpcyByZXF1aXJlZCBmcm9tIG5wbSBhbmQgdGhlIGluZGV4IGh0bWxcbiAgICAvLyBmaWxlIGFuZCBub2RlX21vZHVsZXMgYXJlIHVuZGVyIHRoZSBzYW1lIGZvbGRlciB0aGVuIHVzaW5nIHRoZSBkZWZhdWx0IHZhbHVlIGlzIGZpbmVcbiAgICBpbWdQYXRoOiAnbm9kZV9tb2R1bGVzL3NiZ252aXovc3JjL2ltZycsXG4gICAgLy8gV2hldGhlciB0byBmaXQgbGFiZWxzIHRvIG5vZGVzXG4gICAgZml0TGFiZWxzVG9Ob2RlczogZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0sXG4gICAgZml0TGFiZWxzVG9JbmZvYm94ZXM6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9LFxuICAgIC8vIGR5bmFtaWMgbGFiZWwgc2l6ZSBpdCBtYXkgYmUgJ3NtYWxsJywgJ3JlZ3VsYXInLCAnbGFyZ2UnXG4gICAgZHluYW1pY0xhYmVsU2l6ZTogZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuICdyZWd1bGFyJztcbiAgICB9LFxuICAgIC8vIFdoZXRoZXIgdG8gaW5mZXIgbmVzdGluZyBvbiBsb2FkIFxuICAgIGluZmVyTmVzdGluZ09uTG9hZDogZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0sXG4gICAgLy8gcGVyY2VudGFnZSB1c2VkIHRvIGNhbGN1bGF0ZSBjb21wb3VuZCBwYWRkaW5nc1xuICAgIGNvbXBvdW5kUGFkZGluZzogZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIDEwO1xuICAgIH0sXG4gICAgLy8gVGhlIHNlbGVjdG9yIG9mIHRoZSBjb21wb25lbnQgY29udGFpbmluZyB0aGUgc2JnbiBuZXR3b3JrXG4gICAgbmV0d29ya0NvbnRhaW5lclNlbGVjdG9yOiAnI3NiZ24tbmV0d29yay1jb250YWluZXInLFxuICAgIC8vIFdoZXRoZXIgdGhlIGFjdGlvbnMgYXJlIHVuZG9hYmxlLCByZXF1aXJlcyBjeXRvc2NhcGUtdW5kby1yZWRvIGV4dGVuc2lvblxuICAgIHVuZG9hYmxlOiB0cnVlLFxuICAgIC8vIFdoZXRoZXIgdG8gaGF2ZSB1bmRvYWJsZSBkcmFnIGZlYXR1cmUgaW4gdW5kby9yZWRvIGV4dGVuc2lvbi4gVGhpcyBvcHRpb25zIHdpbGwgYmUgcGFzc2VkIHRvIHVuZG8vcmVkbyBleHRlbnNpb25cbiAgICB1bmRvYWJsZURyYWc6IHRydWVcbiAgfTtcblxuICB2YXIgb3B0aW9uVXRpbGl0aWVzID0gZnVuY3Rpb24gKCkge1xuICB9O1xuXG4gIC8vIEV4dGVuZCB0aGUgZGVmYXVsdHMgb3B0aW9ucyB3aXRoIHRoZSB1c2VyIG9wdGlvbnNcbiAgb3B0aW9uVXRpbGl0aWVzLmV4dGVuZE9wdGlvbnMgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgIHZhciByZXN1bHQgPSB7fTtcblxuICAgIGZvciAodmFyIHByb3AgaW4gZGVmYXVsdHMpIHtcbiAgICAgIHJlc3VsdFtwcm9wXSA9IGRlZmF1bHRzW3Byb3BdO1xuICAgIH1cblxuICAgIGZvciAodmFyIHByb3AgaW4gb3B0aW9ucykge1xuICAgICAgcmVzdWx0W3Byb3BdID0gb3B0aW9uc1twcm9wXTtcbiAgICB9XG5cbiAgICBvcHRpb25VdGlsaXRpZXMub3B0aW9ucyA9IHJlc3VsdDtcblxuICAgIHJldHVybiBvcHRpb25zO1xuICB9O1xuXG4gIG9wdGlvblV0aWxpdGllcy5nZXRPcHRpb25zID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBvcHRpb25VdGlsaXRpZXMub3B0aW9ucztcbiAgfTtcblxuICByZXR1cm4gb3B0aW9uVXRpbGl0aWVzO1xufTtcbiIsInZhciBsaWJzID0gcmVxdWlyZSgnLi9saWItdXRpbGl0aWVzJykuZ2V0TGlicygpO1xudmFyICQgPSBsaWJzLmpRdWVyeTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG5cbiAgdmFyIHVuZG9SZWRvQWN0aW9uRnVuY3Rpb25zLCBvcHRpb25zLCBjeTtcblxuICB2YXIgcmVnaXN0ZXJVbmRvUmVkb0FjdGlvbnMgPSBmdW5jdGlvbiAocGFyYW0pIHtcblxuICAgIHVuZG9SZWRvQWN0aW9uRnVuY3Rpb25zID0gcGFyYW0udW5kb1JlZG9BY3Rpb25GdW5jdGlvbnM7XG4gICAgb3B0aW9ucyA9IHBhcmFtLm9wdGlvblV0aWxpdGllcy5nZXRPcHRpb25zKCk7XG4gICAgY3kgPSBwYXJhbS5zYmdudml6SW5zdGFuY2VVdGlsaXRpZXMuZ2V0Q3koKTtcblxuICAgIGlmICghb3B0aW9ucy51bmRvYWJsZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIGNyZWF0ZSB1bmRvLXJlZG8gaW5zdGFuY2VcbiAgICB2YXIgdXIgPSBjeS51bmRvUmVkbyh7XG4gICAgICB1bmRvYWJsZURyYWc6IG9wdGlvbnMudW5kb2FibGVEcmFnXG4gICAgfSk7XG5cbiAgICAvLyByZWdpc3RlciBhZGQgcmVtb3ZlIGFjdGlvbnNcbiAgICB1ci5hY3Rpb24oXCJhZGROb2RlXCIsIHVuZG9SZWRvQWN0aW9uRnVuY3Rpb25zLmFkZE5vZGUsIHVuZG9SZWRvQWN0aW9uRnVuY3Rpb25zLmRlbGV0ZUVsZXNTaW1wbGUpO1xuICAgIHVyLmFjdGlvbihcImRlbGV0ZUVsZXNTaW1wbGVcIiwgdW5kb1JlZG9BY3Rpb25GdW5jdGlvbnMuZGVsZXRlRWxlc1NpbXBsZSwgdW5kb1JlZG9BY3Rpb25GdW5jdGlvbnMucmVzdG9yZUVsZXMpO1xuICAgIHVyLmFjdGlvbihcImFkZEVkZ2VcIiwgdW5kb1JlZG9BY3Rpb25GdW5jdGlvbnMuYWRkRWRnZSwgdW5kb1JlZG9BY3Rpb25GdW5jdGlvbnMuZGVsZXRlRWxlc1NpbXBsZSk7XG4gICAgdXIuYWN0aW9uKFwiYWRkUHJvY2Vzc1dpdGhDb252ZW5pZW50RWRnZXNcIiwgdW5kb1JlZG9BY3Rpb25GdW5jdGlvbnMuYWRkUHJvY2Vzc1dpdGhDb252ZW5pZW50RWRnZXMsIHVuZG9SZWRvQWN0aW9uRnVuY3Rpb25zLmRlbGV0ZUVsZXNTaW1wbGUpO1xuICAgIHVyLmFjdGlvbihcImRlbGV0ZUVsZXNTbWFydFwiLCB1bmRvUmVkb0FjdGlvbkZ1bmN0aW9ucy5kZWxldGVFbGVzU21hcnQsIHVuZG9SZWRvQWN0aW9uRnVuY3Rpb25zLnJlc3RvcmVFbGVzKTtcbiAgICB1ci5hY3Rpb24oXCJjcmVhdGVDb21wb3VuZEZvckdpdmVuTm9kZXNcIiwgdW5kb1JlZG9BY3Rpb25GdW5jdGlvbnMuY3JlYXRlQ29tcG91bmRGb3JHaXZlbk5vZGVzLCB1bmRvUmVkb0FjdGlvbkZ1bmN0aW9ucy5jcmVhdGVDb21wb3VuZEZvckdpdmVuTm9kZXMpO1xuXG4gICAgLy8gcmVnaXN0ZXIgZ2VuZXJhbCBhY3Rpb25zXG4gICAgdXIuYWN0aW9uKFwicmVzaXplTm9kZXNcIiwgdW5kb1JlZG9BY3Rpb25GdW5jdGlvbnMucmVzaXplTm9kZXMsIHVuZG9SZWRvQWN0aW9uRnVuY3Rpb25zLnJlc2l6ZU5vZGVzKTtcbiAgICB1ci5hY3Rpb24oXCJjaGFuZ2VOb2RlTGFiZWxcIiwgdW5kb1JlZG9BY3Rpb25GdW5jdGlvbnMuY2hhbmdlTm9kZUxhYmVsLCB1bmRvUmVkb0FjdGlvbkZ1bmN0aW9ucy5jaGFuZ2VOb2RlTGFiZWwpO1xuICAgIHVyLmFjdGlvbihcImNoYW5nZURhdGFcIiwgdW5kb1JlZG9BY3Rpb25GdW5jdGlvbnMuY2hhbmdlRGF0YSwgdW5kb1JlZG9BY3Rpb25GdW5jdGlvbnMuY2hhbmdlRGF0YSk7XG4gICAgdXIuYWN0aW9uKFwidXBkYXRlU2V0RmllbGRcIiwgdW5kb1JlZG9BY3Rpb25GdW5jdGlvbnMudXBkYXRlU2V0RmllbGQsIHVuZG9SZWRvQWN0aW9uRnVuY3Rpb25zLnVwZGF0ZVNldEZpZWxkKTtcbiAgICB1ci5hY3Rpb24oXCJjaGFuZ2VDc3NcIiwgdW5kb1JlZG9BY3Rpb25GdW5jdGlvbnMuY2hhbmdlQ3NzLCB1bmRvUmVkb0FjdGlvbkZ1bmN0aW9ucy5jaGFuZ2VDc3MpO1xuICAgIHVyLmFjdGlvbihcImNoYW5nZUJlbmRQb2ludHNcIiwgdW5kb1JlZG9BY3Rpb25GdW5jdGlvbnMuY2hhbmdlQmVuZFBvaW50cywgdW5kb1JlZG9BY3Rpb25GdW5jdGlvbnMuY2hhbmdlQmVuZFBvaW50cyk7XG4gICAgdXIuYWN0aW9uKFwiY2hhbmdlRm9udFByb3BlcnRpZXNcIiwgdW5kb1JlZG9BY3Rpb25GdW5jdGlvbnMuY2hhbmdlRm9udFByb3BlcnRpZXMsIHVuZG9SZWRvQWN0aW9uRnVuY3Rpb25zLmNoYW5nZUZvbnRQcm9wZXJ0aWVzKTtcbiAgICB1ci5hY3Rpb24oXCJzaG93QW5kUGVyZm9ybUxheW91dFwiLCB1bmRvUmVkb0FjdGlvbkZ1bmN0aW9ucy5zaG93QW5kUGVyZm9ybUxheW91dCwgdW5kb1JlZG9BY3Rpb25GdW5jdGlvbnMudW5kb1Nob3dBbmRQZXJmb3JtTGF5b3V0KTtcbiAgICB1ci5hY3Rpb24oXCJoaWRlQW5kUGVyZm9ybUxheW91dFwiLCB1bmRvUmVkb0FjdGlvbkZ1bmN0aW9ucy5oaWRlQW5kUGVyZm9ybUxheW91dCwgdW5kb1JlZG9BY3Rpb25GdW5jdGlvbnMudW5kb0hpZGVBbmRQZXJmb3JtTGF5b3V0KTtcbiAgICB1ci5hY3Rpb24oXCJkZWxldGVBbmRQZXJmb3JtTGF5b3V0XCIsIHVuZG9SZWRvQWN0aW9uRnVuY3Rpb25zLmRlbGV0ZUFuZFBlcmZvcm1MYXlvdXQsIHVuZG9SZWRvQWN0aW9uRnVuY3Rpb25zLnVuZG9EZWxldGVBbmRQZXJmb3JtTGF5b3V0KTtcbiAgICB1ci5hY3Rpb24oXCJhcHBseVNJRlRvcG9sb2d5R3JvdXBpbmdcIiwgdW5kb1JlZG9BY3Rpb25GdW5jdGlvbnMuYXBwbHlTSUZUb3BvbG9neUdyb3VwaW5nLCB1bmRvUmVkb0FjdGlvbkZ1bmN0aW9ucy5hcHBseVNJRlRvcG9sb2d5R3JvdXBpbmcpO1xuXG4gICAgLy8gcmVnaXN0ZXIgU0JHTiBhY3Rpb25zXG4gICAgdXIuYWN0aW9uKFwiYWRkU3RhdGVPckluZm9Cb3hcIiwgdW5kb1JlZG9BY3Rpb25GdW5jdGlvbnMuYWRkU3RhdGVPckluZm9Cb3gsIHVuZG9SZWRvQWN0aW9uRnVuY3Rpb25zLnJlbW92ZVN0YXRlT3JJbmZvQm94KTtcbiAgICB1ci5hY3Rpb24oXCJjaGFuZ2VTdGF0ZU9ySW5mb0JveFwiLCB1bmRvUmVkb0FjdGlvbkZ1bmN0aW9ucy5jaGFuZ2VTdGF0ZU9ySW5mb0JveCwgdW5kb1JlZG9BY3Rpb25GdW5jdGlvbnMuY2hhbmdlU3RhdGVPckluZm9Cb3gpO1xuICAgIHVyLmFjdGlvbihcInNldE11bHRpbWVyU3RhdHVzXCIsIHVuZG9SZWRvQWN0aW9uRnVuY3Rpb25zLnNldE11bHRpbWVyU3RhdHVzLCB1bmRvUmVkb0FjdGlvbkZ1bmN0aW9ucy5zZXRNdWx0aW1lclN0YXR1cyk7XG4gICAgdXIuYWN0aW9uKFwic2V0Q2xvbmVNYXJrZXJTdGF0dXNcIiwgdW5kb1JlZG9BY3Rpb25GdW5jdGlvbnMuc2V0Q2xvbmVNYXJrZXJTdGF0dXMsIHVuZG9SZWRvQWN0aW9uRnVuY3Rpb25zLnNldENsb25lTWFya2VyU3RhdHVzKTtcbiAgICB1ci5hY3Rpb24oXCJyZW1vdmVTdGF0ZU9ySW5mb0JveFwiLCB1bmRvUmVkb0FjdGlvbkZ1bmN0aW9ucy5yZW1vdmVTdGF0ZU9ySW5mb0JveCwgdW5kb1JlZG9BY3Rpb25GdW5jdGlvbnMuYWRkU3RhdGVPckluZm9Cb3gpO1xuICAgIHVyLmFjdGlvbihcImZpdFVuaXRzXCIsIHVuZG9SZWRvQWN0aW9uRnVuY3Rpb25zLmZpdFVuaXRzLCB1bmRvUmVkb0FjdGlvbkZ1bmN0aW9ucy5yZXN0b3JlVW5pdHMpO1xuICAgIHVyLmFjdGlvbihcImFkZEJhY2tncm91bmRJbWFnZVwiLCB1bmRvUmVkb0FjdGlvbkZ1bmN0aW9ucy5hZGRCYWNrZ3JvdW5kSW1hZ2UsIHVuZG9SZWRvQWN0aW9uRnVuY3Rpb25zLnJlbW92ZUJhY2tncm91bmRJbWFnZSk7XG4gICAgdXIuYWN0aW9uKFwicmVtb3ZlQmFja2dyb3VuZEltYWdlXCIsIHVuZG9SZWRvQWN0aW9uRnVuY3Rpb25zLnJlbW92ZUJhY2tncm91bmRJbWFnZSwgdW5kb1JlZG9BY3Rpb25GdW5jdGlvbnMuYWRkQmFja2dyb3VuZEltYWdlKTtcbiAgICB1ci5hY3Rpb24oXCJ1cGRhdGVCYWNrZ3JvdW5kSW1hZ2VcIiwgdW5kb1JlZG9BY3Rpb25GdW5jdGlvbnMudXBkYXRlQmFja2dyb3VuZEltYWdlLCB1bmRvUmVkb0FjdGlvbkZ1bmN0aW9ucy51cGRhdGVCYWNrZ3JvdW5kSW1hZ2UpO1xuICAgIHVyLmFjdGlvbihcImNoYW5nZUJhY2tncm91bmRJbWFnZVwiLCB1bmRvUmVkb0FjdGlvbkZ1bmN0aW9ucy5jaGFuZ2VCYWNrZ3JvdW5kSW1hZ2UsIHVuZG9SZWRvQWN0aW9uRnVuY3Rpb25zLmNoYW5nZUJhY2tncm91bmRJbWFnZSk7XG4gICAgdXIuYWN0aW9uKFwidXBkYXRlSW5mb2JveFN0eWxlXCIsIHVuZG9SZWRvQWN0aW9uRnVuY3Rpb25zLnVwZGF0ZUluZm9ib3hTdHlsZSwgdW5kb1JlZG9BY3Rpb25GdW5jdGlvbnMudXBkYXRlSW5mb2JveFN0eWxlKTtcbiAgICB1ci5hY3Rpb24oXCJ1cGRhdGVJbmZvYm94T2JqXCIsIHVuZG9SZWRvQWN0aW9uRnVuY3Rpb25zLnVwZGF0ZUluZm9ib3hPYmosIHVuZG9SZWRvQWN0aW9uRnVuY3Rpb25zLnVwZGF0ZUluZm9ib3hPYmopO1xuXG4gICAgLy8gcmVnaXN0ZXIgZWFzeSBjcmVhdGlvbiBhY3Rpb25zXG4gICAgdXIuYWN0aW9uKFwiY3JlYXRlVGVtcGxhdGVSZWFjdGlvblwiLCB1bmRvUmVkb0FjdGlvbkZ1bmN0aW9ucy5jcmVhdGVUZW1wbGF0ZVJlYWN0aW9uLCB1bmRvUmVkb0FjdGlvbkZ1bmN0aW9ucy5kZWxldGVFbGVzU2ltcGxlKTtcbiAgICB1ci5hY3Rpb24oXCJjcmVhdGVBY3RpdmF0aW9uUmVhY3Rpb25cIiwgdW5kb1JlZG9BY3Rpb25GdW5jdGlvbnMuY3JlYXRlQWN0aXZhdGlvblJlYWN0aW9uLCB1bmRvUmVkb0FjdGlvbkZ1bmN0aW9ucy5kZWxldGVFbGVzU2ltcGxlKTtcbiAgICB1ci5hY3Rpb24oXCJjcmVhdGVNZXRhYm9saWNDYXRhbHl0aWNBY3Rpdml0eVwiLCB1bmRvUmVkb0FjdGlvbkZ1bmN0aW9ucy5jcmVhdGVNZXRhYm9saWNDYXRhbHl0aWNBY3Rpdml0eSwgdW5kb1JlZG9BY3Rpb25GdW5jdGlvbnMuZGVsZXRlRWxlc1NpbXBsZSk7XG4gICAgdXIuYWN0aW9uKFwiY3JlYXRlTWV0YWJvbGljUmVhY3Rpb25cIiwgdW5kb1JlZG9BY3Rpb25GdW5jdGlvbnMuY3JlYXRlTWV0YWJvbGljUmVhY3Rpb24sIHVuZG9SZWRvQWN0aW9uRnVuY3Rpb25zLmRlbGV0ZUVsZXNTaW1wbGUpO1xuICAgIHVyLmFjdGlvbihcImNyZWF0ZUNvbnZlcnNpb25cIiwgdW5kb1JlZG9BY3Rpb25GdW5jdGlvbnMuY3JlYXRlQ29udmVyc2lvbiwgdW5kb1JlZG9BY3Rpb25GdW5jdGlvbnMuZGVsZXRlRWxlc1NpbXBsZSk7XG4gICAgdXIuYWN0aW9uKFwiY3JlYXRlTXVsdGltZXJpemF0aW9uXCIsIHVuZG9SZWRvQWN0aW9uRnVuY3Rpb25zLmNyZWF0ZU11bHRpbWVyaXphdGlvbiwgdW5kb1JlZG9BY3Rpb25GdW5jdGlvbnMuZGVsZXRlRWxlc1NpbXBsZSk7XG4gICAgdXIuYWN0aW9uKFwiY3JlYXRlQ29tcGxleFByb3RlaW5Gb3JtYXRpb25cIiwgdW5kb1JlZG9BY3Rpb25GdW5jdGlvbnMuY3JlYXRlQ29tcGxleFByb3RlaW5Gb3JtYXRpb24sIHVuZG9SZWRvQWN0aW9uRnVuY3Rpb25zLmRlbGV0ZUVsZXNTaW1wbGUpO1xuICAgIHVyLmFjdGlvbihcImNyZWF0ZURlZ3JhZGF0aW9uXCIsIHVuZG9SZWRvQWN0aW9uRnVuY3Rpb25zLmNyZWF0ZURlZ3JhZGF0aW9uLCB1bmRvUmVkb0FjdGlvbkZ1bmN0aW9ucy5kZWxldGVFbGVzU2ltcGxlKTtcbiAgICB1ci5hY3Rpb24oXCJjcmVhdGVUcmFuc2NyaXB0aW9uXCIsIHVuZG9SZWRvQWN0aW9uRnVuY3Rpb25zLmNyZWF0ZVRyYW5zY3JpcHRpb24sIHVuZG9SZWRvQWN0aW9uRnVuY3Rpb25zLmRlbGV0ZUVsZXNTaW1wbGUpO1xuICAgIHVyLmFjdGlvbihcImNyZWF0ZVRyYW5zbGF0aW9uXCIsIHVuZG9SZWRvQWN0aW9uRnVuY3Rpb25zLmNyZWF0ZVRyYW5zbGF0aW9uLCB1bmRvUmVkb0FjdGlvbkZ1bmN0aW9ucy5kZWxldGVFbGVzU2ltcGxlKTtcbiAgICB1ci5hY3Rpb24oXCJjcmVhdGVUcmFuc2NyaXB0aW9uUmVhY3Rpb25cIiwgdW5kb1JlZG9BY3Rpb25GdW5jdGlvbnMuY3JlYXRlVHJhbnNjcmlwdGlvblJlYWN0aW9uLCB1bmRvUmVkb0FjdGlvbkZ1bmN0aW9ucy5kZWxldGVFbGVzU2ltcGxlKTtcbiAgICB1ci5hY3Rpb24oXCJjcmVhdGVUcmFuc2xhdGlvblJlYWN0aW9uXCIsIHVuZG9SZWRvQWN0aW9uRnVuY3Rpb25zLmNyZWF0ZVRyYW5zbGF0aW9uUmVhY3Rpb24sIHVuZG9SZWRvQWN0aW9uRnVuY3Rpb25zLmRlbGV0ZUVsZXNTaW1wbGUpO1xuICAgIHVyLmFjdGlvbihcInNldERlZmF1bHRQcm9wZXJ0eVwiLCB1bmRvUmVkb0FjdGlvbkZ1bmN0aW9ucy5zZXREZWZhdWx0UHJvcGVydHksIHVuZG9SZWRvQWN0aW9uRnVuY3Rpb25zLnNldERlZmF1bHRQcm9wZXJ0eSk7XG4gICAgdXIuYWN0aW9uKFwiY29udmVydEludG9SZXZlcnNpYmxlUmVhY3Rpb25cIiwgdW5kb1JlZG9BY3Rpb25GdW5jdGlvbnMuY29udmVydEludG9SZXZlcnNpYmxlUmVhY3Rpb24sIHVuZG9SZWRvQWN0aW9uRnVuY3Rpb25zLmNvbnZlcnRJbnRvUmV2ZXJzaWJsZVJlYWN0aW9uKTtcblxuICAgIHVyLmFjdGlvbihcIm1vdmVFZGdlXCIsIHVuZG9SZWRvQWN0aW9uRnVuY3Rpb25zLm1vdmVFZGdlLCB1bmRvUmVkb0FjdGlvbkZ1bmN0aW9ucy5tb3ZlRWRnZSk7XG4gICAgdXIuYWN0aW9uKFwiZml4RXJyb3JcIiwgdW5kb1JlZG9BY3Rpb25GdW5jdGlvbnMuZml4RXJyb3IsdW5kb1JlZG9BY3Rpb25GdW5jdGlvbnMudW5maXhFcnJvcik7XG4gICAgdXIuYWN0aW9uKFwiY2xvbmVIaWdoRGVncmVlTm9kZVwiLCB1bmRvUmVkb0FjdGlvbkZ1bmN0aW9ucy5jbG9uZUhpZ2hEZWdyZWVOb2RlLHVuZG9SZWRvQWN0aW9uRnVuY3Rpb25zLnVuQ2xvbmVIaWdoRGVncmVlTm9kZSk7XG5cbiAgICB1ci5hY3Rpb24oXCJjaGFuZ2VNYXBUeXBlXCIsIHVuZG9SZWRvQWN0aW9uRnVuY3Rpb25zLmNoYW5nZU1hcFR5cGUsdW5kb1JlZG9BY3Rpb25GdW5jdGlvbnMuY2hhbmdlTWFwVHlwZSk7XG4gICAgdXIuYWN0aW9uKFwic2V0Q29tcG91bmRQYWRkaW5nXCIsIHVuZG9SZWRvQWN0aW9uRnVuY3Rpb25zLnNldENvbXBvdW5kUGFkZGluZywgdW5kb1JlZG9BY3Rpb25GdW5jdGlvbnMuc2V0Q29tcG91bmRQYWRkaW5nKTtcblxuICB9O1xuXG4gIHJldHVybiByZWdpc3RlclVuZG9SZWRvQWN0aW9ucztcbn07XG4iLCJ2YXIgbGlicyA9IHJlcXVpcmUoJy4vbGliLXV0aWxpdGllcycpLmdldExpYnMoKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG5cbiAgdmFyIGluc3RhbmNlO1xuXG4gIGZ1bmN0aW9uIHNiZ252aXpJbnN0YW5jZVV0aWxpdGllcyAob3B0aW9ucykge1xuXG4gICAgaW5zdGFuY2UgPSBsaWJzLnNiZ252aXoob3B0aW9ucyk7XG5cbiAgICByZXR1cm4gaW5zdGFuY2U7XG4gIH1cblxuICBzYmdudml6SW5zdGFuY2VVdGlsaXRpZXMuZ2V0SW5zdGFuY2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGluc3RhbmNlO1xuICB9XG5cbiAgc2JnbnZpekluc3RhbmNlVXRpbGl0aWVzLmdldEN5ID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldEluc3RhbmNlKCkuZ2V0Q3koKTtcbiAgfVxuXG4gIHJldHVybiBzYmdudml6SW5zdGFuY2VVdGlsaXRpZXM7XG59O1xuIiwidmFyIGlzRXF1YWwgPSByZXF1aXJlKCdsb2Rhc2guaXNlcXVhbCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKCkge1xuXG4gIHZhciBjeSwgZWxlbWVudFV0aWxpdGllcztcbiAgdmFyIGdyb3VwQ29tcG91bmRUeXBlLCBtZXRhRWRnZUlkZW50aWZpZXIsIGxvY2tHcmFwaFRvcG9sb2d5LCBzaG91bGRBcHBseTtcblxuICB2YXIgREVGQVVMVF9HUk9VUF9DT01QT1VORF9UWVBFID0gJ3RvcG9sb2d5IGdyb3VwJztcbiAgdmFyIEVER0VfU1RZTEVfTkFNRVMgPSBbICdsaW5lLWNvbG9yJywgJ3dpZHRoJyBdO1xuXG4gIGZ1bmN0aW9uIHRvcG9sb2d5R3JvdXBpbmcoIHBhcmFtLCBwcm9wcyApIHtcbiAgICBjeSA9IHBhcmFtLnNiZ252aXpJbnN0YW5jZVV0aWxpdGllcy5nZXRDeSgpXG4gICAgZWxlbWVudFV0aWxpdGllcyA9IHBhcmFtLmVsZW1lbnRVdGlsaXRpZXM7XG5cbiAgICBncm91cENvbXBvdW5kVHlwZSA9IHByb3BzLmdyb3VwQ29tcG91bmRUeXBlIHx8IERFRkFVTFRfR1JPVVBfQ09NUE9VTkRfVFlQRTtcbiAgICBtZXRhRWRnZUlkZW50aWZpZXIgPSBwcm9wcy5tZXRhRWRnZUlkZW50aWZpZXI7XG4gICAgbG9ja0dyYXBoVG9wb2xvZ3kgPSBwcm9wcy5sb2NrR3JhcGhUb3BvbG9neTtcbiAgICBzaG91bGRBcHBseSA9IHByb3BzLnNob3VsZEFwcGx5IHx8IHRydWU7XG5cbiAgICB0b3BvbG9neUdyb3VwaW5nLmFwcGxpZWQgPSBmYWxzZTtcbiAgICBpbml0TWV0YVN0eWxlTWFwKCk7XG4gIH1cblxuICB0b3BvbG9neUdyb3VwaW5nLmFwcGx5ID0gZnVuY3Rpb24oKSB7XG4gICAgaWYgKCB0b3BvbG9neUdyb3VwaW5nLmFwcGxpZWQgfHwgIWV2YWxPcHQoIHNob3VsZEFwcGx5ICkgKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGxpc3QgPSBjeS5ub2RlcygpLm1hcCggZnVuY3Rpb24oIG5vZGUgKSB7XG4gICAgICByZXR1cm4gWyBub2RlIF07XG4gICAgfSApO1xuXG4gICAgLy8gZGV0ZXJtaW5lIG5vZGUgZ3JvdXBzIGJ5IHRoZWlyIHRvcG9sb2d5XG4gICAgdmFyIGdyb3VwcyA9IGdldE5vZGVHcm91cHMoIGxpc3QgKTtcbiAgICBcbiAgICAvLyBhcHBseSBncm91cGluZyBpbiBjeSBsZXZlbFxuICAgIHZhciBtZXRhRWRnZXMgPSB0b3BvbG9neUdyb3VwaW5nLmdldE1ldGFFZGdlcygpO1xuICAgIHZhciBjb21wb3VuZHMgPSB0b3BvbG9neUdyb3VwaW5nLmdldEdyb3VwQ29tcG91bmRzKCk7XG4gIFx0YXBwbHlHcm91cGluZyhncm91cHMsIG1ldGFFZGdlcywgY29tcG91bmRzKTtcblxuICAgIHRvcG9sb2d5R3JvdXBpbmcuYXBwbGllZCA9IHRydWU7XG5cbiAgICBpZiAoIGxvY2tHcmFwaFRvcG9sb2d5ICkge1xuICAgICAgZWxlbWVudFV0aWxpdGllcy5sb2NrR3JhcGhUb3BvbG9neSgpO1xuICAgIH1cblxuICBcdHJldHVybiBncm91cHM7XG4gIH07XG5cbiAgdG9wb2xvZ3lHcm91cGluZy51bmFwcGx5ID0gZnVuY3Rpb24oKSB7XG4gICAgaWYgKCAhdG9wb2xvZ3lHcm91cGluZy5hcHBsaWVkICkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBtZXRhRWRnZXMgPSB0b3BvbG9neUdyb3VwaW5nLmdldE1ldGFFZGdlcygpO1xuICAgIG1ldGFFZGdlcy5mb3JFYWNoKCBmdW5jdGlvbiggZWRnZSApIHtcbiAgICAgIHZhciB0b1Jlc3RvcmUgPSBlZGdlLmRhdGEoJ3RnLXRvLXJlc3RvcmUnKTtcbiAgICAgIGVkZ2UucmVtb3ZlKCk7XG4gICAgICB0b1Jlc3RvcmUucmVzdG9yZSgpO1xuXG4gICAgICBFREdFX1NUWUxFX05BTUVTLmZvckVhY2goIGZ1bmN0aW9uKCBuYW1lICkge1xuICAgICAgICB2YXIgb2xkVmFsID0gdG9wb2xvZ3lHcm91cGluZy5tZXRhU3R5bGVNYXBbIG5hbWUgXVsgZWRnZS5pZCgpIF07XG4gICAgICAgIHZhciBuZXdWYWwgPSBlZGdlLmRhdGEoIG5hbWUgKTtcblxuICAgICAgICBpZiAoIG9sZFZhbCAhPT0gbmV3VmFsICkge1xuICAgICAgICAgIHRvUmVzdG9yZS5kYXRhKCBuYW1lLCBuZXdWYWwgKTtcbiAgICAgICAgfVxuICAgICAgfSApO1xuICAgIH0gKTtcblxuICAgIGluaXRNZXRhU3R5bGVNYXAoKTtcblxuICAgIHZhciBwYXJlbnRzID0gdG9wb2xvZ3lHcm91cGluZy5nZXRHcm91cENvbXBvdW5kcygpO1xuICAgIGVsZW1lbnRVdGlsaXRpZXMuY2hhbmdlUGFyZW50KCBwYXJlbnRzLmNoaWxkcmVuKCksIG51bGwgKTtcbiAgICBwYXJlbnRzLnJlbW92ZSgpO1xuXG4gICAgdG9wb2xvZ3lHcm91cGluZy5hcHBsaWVkID0gZmFsc2U7XG5cbiAgICBpZiAoIGxvY2tHcmFwaFRvcG9sb2d5ICkge1xuICAgICAgZWxlbWVudFV0aWxpdGllcy51bmxvY2tHcmFwaFRvcG9sb2d5KCk7XG4gICAgfVxuICB9O1xuXG4gIHRvcG9sb2d5R3JvdXBpbmcuZ2V0TWV0YUVkZ2VzID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIG1ldGFFZGdlcyA9IGN5LmVkZ2VzKCdbJyArIG1ldGFFZGdlSWRlbnRpZmllciArICddJyk7XG4gICAgcmV0dXJuIG1ldGFFZGdlcztcbiAgfTtcblxuICB0b3BvbG9neUdyb3VwaW5nLmdldEdyb3VwQ29tcG91bmRzID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGNsYXNzTmFtZSA9IGdyb3VwQ29tcG91bmRUeXBlO1xuICAgIHJldHVybiBjeS5ub2RlcygnW2NsYXNzPVwiJyArIGNsYXNzTmFtZSArICdcIl0nKTtcbiAgfTtcblxuICB0b3BvbG9neUdyb3VwaW5nLmNsZWFyQXBwbGllZEZsYWcgPSBmdW5jdGlvbigpIHtcbiAgICB0b3BvbG9neUdyb3VwaW5nLmFwcGxpZWQgPSBmYWxzZTtcbiAgfTtcblxuICB0b3BvbG9neUdyb3VwaW5nLnNldEFwcGxpZWRGbGFnID0gZnVuY3Rpb24oYXBwbGllZCkge1xuICAgIHRvcG9sb2d5R3JvdXBpbmcuYXBwbGllZCA9IGFwcGxpZWQ7XG4gIH07XG5cbiAgdG9wb2xvZ3lHcm91cGluZy50b2dnbGVBcHBsaWVkRmxhZyA9IGZ1bmN0aW9uKCkge1xuICAgIHRvcG9sb2d5R3JvdXBpbmcuYXBwbGllZCA9ICF0b3BvbG9neUdyb3VwaW5nLmFwcGxpZWQ7XG4gIH07XG5cbiAgZnVuY3Rpb24gaW5pdE1ldGFTdHlsZU1hcCgpIHtcbiAgICB0b3BvbG9neUdyb3VwaW5nLm1ldGFTdHlsZU1hcCA9IHt9O1xuICAgIEVER0VfU1RZTEVfTkFNRVMuZm9yRWFjaCggZnVuY3Rpb24oIG5hbWUgKSB7XG4gICAgICB0b3BvbG9neUdyb3VwaW5nLm1ldGFTdHlsZU1hcFsgbmFtZSBdID0ge307XG4gICAgfSApO1xuICB9XG5cbiAgZnVuY3Rpb24gZXZhbE9wdCggb3B0ICkge1xuICAgIGlmICggdHlwZW9mIG9wdCA9PT0gJ2Z1bmN0aW9uJyApIHtcbiAgICAgIHJldHVybiBvcHQoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gb3B0O1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0Tm9kZUdyb3VwcyggbGlzdCApIHtcbiAgICBpZiAoIGxpc3QubGVuZ3RoIDw9IDEgKSB7XG4gICAgICByZXR1cm4gbGlzdDtcbiAgICB9XG5cbiAgICB2YXIgaGFsdmVzID0gZ2V0SGFsdmVzKCBsaXN0ICk7XG4gICAgdmFyIGZpcnN0UGFydCA9IGdldE5vZGVHcm91cHMoIGhhbHZlc1sgMCBdICk7XG4gICAgdmFyIHNlY29uZFBhcnQgPSBnZXROb2RlR3JvdXBzKCBoYWx2ZXNbIDEgXSApO1xuICAgIC8vIG1lcmdlIHRoZSBoYWx2ZXNcblx0ICB2YXIgZ3JvdXBzID0gbWVyZ2VHcm91cHMoIGZpcnN0UGFydCwgc2Vjb25kUGFydCApO1xuXG4gICAgcmV0dXJuIGdyb3VwcztcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldFBhcmVudE9yU2VsZiggbm9kZSApIHtcbiAgICB2YXIgcGFyZW50ID0gbm9kZS5wYXJlbnQoKTtcbiAgICByZXR1cm4gcGFyZW50LnNpemUoKSA+IDAgPyBwYXJlbnQgOiBub2RlO1xuICB9XG5cbiAgZnVuY3Rpb24gY2FsY0dyb3VwaW5nS2V5KCBlZGdlICkge1xuICAgIHZhciBzcmNJZCA9IGdldFBhcmVudE9yU2VsZiggZWRnZS5zb3VyY2UoKSApLmlkKCk7XG4gICAgdmFyIHRndElkID0gZ2V0UGFyZW50T3JTZWxmKCBlZGdlLnRhcmdldCgpICkuaWQoKTtcbiAgICB2YXIgZWRnZVR5cGUgPSBnZXRFZGdlVHlwZSggZWRnZSApO1xuXG4gICAgcmV0dXJuIFsgZWRnZVR5cGUsIHNyY0lkLCB0Z3RJZCBdLmpvaW4oICctJyApO1xuICB9XG5cbiAgZnVuY3Rpb24gYWRkVG9NYXBDaGFpbiggbWFwLCBrZXksIHZhbCApIHtcbiAgICBpZiAoICFtYXBbIGtleSBdICkge1xuICAgICAgbWFwWyBrZXkgXSA9IGN5LmNvbGxlY3Rpb24oKTtcbiAgICB9XG5cbiAgICBtYXBbIGtleSBdID0gbWFwWyBrZXkgXS5hZGQoIHZhbCApO1xuICB9XG5cbiAgZnVuY3Rpb24gYXBwbHlHcm91cGluZyhncm91cHMsIG1ldGFFZGdlcywgZ3JvdXBDb21wb3VuZHMpIHtcbiAgICB2YXIgY29tcG91bmRzO1xuXG4gICAgaWYgKGdyb3VwQ29tcG91bmRzLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbXBvdW5kcyA9IGdyb3VwQ29tcG91bmRzO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGdyb3Vwcy5mb3JFYWNoKCBmdW5jdGlvbiggZ3JvdXAgKSB7XG4gICAgICAgIGNyZWF0ZUdyb3VwQ29tcG91bmQoIGdyb3VwICk7XG4gICAgICB9ICk7XG4gIFxuICAgICAgY29tcG91bmRzID0gdG9wb2xvZ3lHcm91cGluZy5nZXRHcm91cENvbXBvdW5kcygpO1xuICAgIH1cblxuICAgIHZhciBjaGlsZHJlbkVkZ2VzID0gY29tcG91bmRzLmNoaWxkcmVuKCkuY29ubmVjdGVkRWRnZXMoKTtcbiAgICB2YXIgZWRnZXNNYXAgPSBbXTtcblxuICAgIGNoaWxkcmVuRWRnZXMuZm9yRWFjaCggZnVuY3Rpb24oIGVkZ2UgKXtcbiAgICAgIHZhciBrZXkgPSBjYWxjR3JvdXBpbmdLZXkoIGVkZ2UgKTtcbiAgICAgIGFkZFRvTWFwQ2hhaW4oIGVkZ2VzTWFwLCBrZXksIGVkZ2UgKTtcbiAgICAgIGVkZ2UucmVtb3ZlKCk7XG4gICAgfSApO1xuXG4gICAgaWYgKG1ldGFFZGdlcy5sZW5ndGggPiAwKSB7XG4gICAgICBPYmplY3Qua2V5cyggZWRnZXNNYXAgKS5mb3JFYWNoKCBmdW5jdGlvbigga2V5ICkge1xuICAgICAgICB2YXIgZWRnZXMgPSBlZGdlc01hcFtrZXldO1xuICAgICAgICB2YXIgdGVtcCA9IGVkZ2VzWzBdO1xuICAgICAgICB2YXIgbWV0YUVkZ2UgPSBtZXRhRWRnZXMuZmlsdGVyKGVkZ2UgPT4ge1xuICAgICAgICAgIHJldHVybiBlZGdlLnNvdXJjZSgpLmlkKCkgPT09IGdldFBhcmVudE9yU2VsZiggdGVtcC5zb3VyY2UoKSApLmlkKCkgJiZcbiAgICAgICAgICAgICAgICAgIGVkZ2UudGFyZ2V0KCkuaWQoKSA9PT0gZ2V0UGFyZW50T3JTZWxmKCB0ZW1wLnRhcmdldCgpICkuaWQoKTtcbiAgICAgICAgfSlbMF07XG4gICAgICAgIG1ldGFFZGdlLmRhdGEoICd0Zy10by1yZXN0b3JlJywgZWRnZXMgKTtcbiAgICAgICAgZWRnZXMucmVtb3ZlKCk7XG4gICAgICB9ICk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgT2JqZWN0LmtleXMoIGVkZ2VzTWFwICkuZm9yRWFjaCggZnVuY3Rpb24oIGtleSApIHtcbiAgICAgICAgY3JlYXRlTWV0YUVkZ2VGb3IoIGVkZ2VzTWFwWyBrZXkgXSApO1xuICAgICAgfSApO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZUdyb3VwQ29tcG91bmQoIGdyb3VwICkge1xuICAgIGlmICggZ3JvdXAubGVuZ3RoIDwgMiApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgY29sbGVjdGlvbiA9IGN5LmNvbGxlY3Rpb24oKTtcblxuICAgIGdyb3VwLmZvckVhY2goIGZ1bmN0aW9uKCBub2RlICkge1xuICAgICAgY29sbGVjdGlvbiA9IGNvbGxlY3Rpb24uYWRkKCBub2RlICk7XG4gICAgfSApO1xuXG4gICAgZWxlbWVudFV0aWxpdGllcy5jcmVhdGVDb21wb3VuZEZvckdpdmVuTm9kZXMoIGNvbGxlY3Rpb24sIGdyb3VwQ29tcG91bmRUeXBlICk7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVNZXRhRWRnZUZvciggZWRnZXMgKSB7XG4gICAgdmFyIHNyY0lkID0gZ2V0UGFyZW50T3JTZWxmKCBlZGdlcy5zb3VyY2UoKSApLmlkKCk7XG4gICAgdmFyIHRndElkID0gZ2V0UGFyZW50T3JTZWxmKCBlZGdlcy50YXJnZXQoKSApLmlkKCk7XG4gICAgdmFyIHR5cGUgPSBlZGdlcy5kYXRhKCAnY2xhc3MnICk7XG4gICAgY3kucmVtb3ZlKCBlZGdlcyApO1xuXG4gICAgdmFyIG1ldGFFZGdlID0gZWxlbWVudFV0aWxpdGllcy5hZGRFZGdlKCBzcmNJZCwgdGd0SWQsIHR5cGUgKTtcbiAgICBtZXRhRWRnZS5kYXRhKCAndGctdG8tcmVzdG9yZScsIGVkZ2VzICk7XG4gICAgbWV0YUVkZ2UuZGF0YSggbWV0YUVkZ2VJZGVudGlmaWVyLCB0cnVlICk7XG5cbiAgICBFREdFX1NUWUxFX05BTUVTLmZvckVhY2goIGZ1bmN0aW9uKCBzdHlsZU5hbWUgKSB7XG4gICAgICBlZGdlcy5mb3JFYWNoKCBmdW5jdGlvbiggZWRnZSApIHtcbiAgICAgICAgdG9wb2xvZ3lHcm91cGluZy5tZXRhU3R5bGVNYXBbIHN0eWxlTmFtZSBdWyBlZGdlLmlkKCkgXSA9IGVkZ2UuZGF0YSggc3R5bGVOYW1lICk7XG4gICAgICB9ICk7XG5cbiAgICAgIHZhciBjb21tb25WYWwgPSBlbGVtZW50VXRpbGl0aWVzLmdldENvbW1vblByb3BlcnR5KGVkZ2VzLCBzdHlsZU5hbWUsICdkYXRhJyk7XG4gICAgICBpZiAoIGNvbW1vblZhbCApIHtcbiAgICAgICAgbWV0YUVkZ2UuZGF0YSggc3R5bGVOYW1lLCBjb21tb25WYWwgKTtcbiAgICAgIH1cbiAgICB9ICk7XG5cbiAgICByZXR1cm4gbWV0YUVkZ2U7XG4gIH1cblxuICBmdW5jdGlvbiBtZXJnZUdyb3VwcyggZ3JvdXBzMSwgZ3JvdXBzMiApIHtcbiAgICAvLyBub3RNZXJnZWRHcnMgd2lsbCBpbmNsdWRlIG1lbWJlcnMgb2YgZ3JvdXBzMSB0aGF0IGFyZSBub3QgbWVyZ2VkXG4gIFx0Ly8gbWVyZ2VkR3JzIHdpbGwgaW5jbHVkZSB0aGUgbWVyZ2VkIG1lbWJlcnMgZnJvbSAyIGdyb3Vwc1xuICBcdHZhciBub3RNZXJnZWRHcnMgPSBbXSwgbWVyZ2VkR3JzID0gW107XG5cbiAgICBncm91cHMxLmZvckVhY2goIGZ1bmN0aW9uKCBncjEgKSB7XG4gICAgICB2YXIgbWVyZ2VkID0gZmFsc2U7XG5cbiAgICAgIG1lcmdlZEdycy5jb25jYXQoIGdyb3VwczIgKS5mb3JFYWNoKCBmdW5jdGlvbiggZ3IyLCBpbmRleDIgKSB7XG4gICAgICAgIC8vIGlmIGdyb3VwcyBzaG91bGQgYmUgbWVyZ2VkIG1lcmdlIHRoZW0sIHJlbW92ZSBncjIgZnJvbSB3aGVyZSBpdFxuICAgICAgICAvLyBjb21lcyBmcm9tIGFuZCBwdXNoIHRoZSBtZXJnZSByZXN1bHQgdG8gbWVyZ2VkR3JzXG4gICAgICAgIGlmICggc2hvdWxkTWVyZ2UoIGdyMSwgZ3IyICkgKSB7XG4gICAgICAgICAgdmFyIG1lcmdlZEdyID0gZ3IxLmNvbmNhdCggZ3IyICk7XG5cbiAgICAgICAgICBpZiAoIGluZGV4MiA+PSBtZXJnZWRHcnMubGVuZ3RoICkge1xuICAgICAgICAgICAgcmVtb3ZlQXQoIGdyb3VwczIsIGluZGV4MiAtIG1lcmdlZEdycy5sZW5ndGggKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZW1vdmVBdCggbWVyZ2VkR3JzLCBpbmRleDIgKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBtYXJrIGFzIG1lcmdlZCBhbmQgYnJlYWsgdGhlIGxvb3BcbiAgICAgICAgICBtZXJnZWRHcnMucHVzaCggbWVyZ2VkR3IgKTtcbiAgICAgICAgICBtZXJnZWQgPSB0cnVlO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfSApO1xuXG4gICAgICAvLyBpZiBncjEgaXMgbm90IG1lcmdlZCBwdXNoIGl0IHRvIG5vdE1lcmdlZEdyc1xuICAgICAgaWYgKCAhbWVyZ2VkICkge1xuICAgICAgICBub3RNZXJnZWRHcnMucHVzaCggZ3IxICk7XG4gICAgICB9XG4gICAgfSApO1xuXG4gICAgLy8gdGhlIGdyb3VwcyB0aGF0IGNvbWVzIGZyb20gZ3JvdXBzMiBidXQgbm90IG1lcmdlZCBhcmUgc3RpbGwgaW5jbHVkZWRcblx0ICAvLyBpbiBncm91cHMyIGFkZCB0aGVtIHRvIHRoZSByZXN1bHQgdG9nZXRoZXIgd2l0aCBtZXJnZWRHcnMgYW5kIG5vdE1lcmdlZEdyc1xuICAgIHJldHVybiBub3RNZXJnZWRHcnMuY29uY2F0KCBtZXJnZWRHcnMsIGdyb3VwczIgKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHNob3VsZE1lcmdlKCBncm91cDEsIGdyb3VwMiApIHtcbiAgICAvLyB1c2luZyBmaXJzdCBlbGVtZW50cyBpcyBlbm91Z2ggdG8gZGVjaWRlIHdoZXRoZXIgdG8gbWVyZ2VcbiAgXHR2YXIgbm9kZTEgPSBncm91cDFbIDAgXTtcbiAgXHR2YXIgbm9kZTIgPSBncm91cDJbIDAgXTtcblxuICAgIGlmICggbm9kZTEuZWRnZXMoKS5sZW5ndGggIT09IG5vZGUyLmVkZ2VzKCkubGVuZ3RoICkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHZhciBnZXRVbmRpcmVjdGVkRWRnZXMgPSBmdW5jdGlvbiggbm9kZSApIHtcbiAgICAgIHZhciBlZGdlcyA9IG5vZGUuY29ubmVjdGVkRWRnZXMoKS5maWx0ZXIoIGlzVW5kaXJlY3RlZEVkZ2UgKTtcbiAgICAgIHJldHVybiBlZGdlcztcbiAgICB9O1xuICAgIC8vIHVuZGlyZWN0ZWQgZWRnZXMgb2Ygbm9kZTEgYW5kIG5vZGUyIHJlc3BlY3RpdmVseVxuICAgIHZhciB1bmRpcjEgPSBnZXRVbmRpcmVjdGVkRWRnZXMoIG5vZGUxICk7XG4gICAgdmFyIHVuZGlyMiA9IGdldFVuZGlyZWN0ZWRFZGdlcyggbm9kZTIgKTtcblxuICAgIHZhciBpbjEgPSBub2RlMS5pbmNvbWVycygpLmVkZ2VzKCkubm90KCB1bmRpcjEgKTtcbiAgICB2YXIgaW4yID0gbm9kZTIuaW5jb21lcnMoKS5lZGdlcygpLm5vdCggdW5kaXIyICk7XG5cbiAgICB2YXIgb3V0MSA9IG5vZGUxLm91dGdvZXJzKCkuZWRnZXMoKS5ub3QoIHVuZGlyMSApO1xuXHQgIHZhciBvdXQyID0gbm9kZTIub3V0Z29lcnMoKS5lZGdlcygpLm5vdCggdW5kaXIyICk7XG5cbiAgICByZXR1cm4gY29tcGFyZUVkZ2VHcm91cCggaW4xLCBpbjIsIG5vZGUxLCBub2RlMiApXG4gICAgICAgICAgICAmJiBjb21wYXJlRWRnZUdyb3VwKCBvdXQxLCBvdXQyLCBub2RlMSwgbm9kZTIgKVxuICAgICAgICAgICAgJiYgY29tcGFyZUVkZ2VHcm91cCggdW5kaXIxLCB1bmRpcjIsIG5vZGUxLCBub2RlMiApO1xuICB9XG5cbiAgLy8gZGVjaWRlIGlmIDIgZWRnZSBncm91cHMgY29udGFpbnMgc2V0IG9mIGVkZ2VzIHdpdGggc2ltaWxhciBjb250ZW50ICh0eXBlLFxuICAvLyBzb3VyY2UsdGFyZ2V0KSByZWxhdGl2ZSB0byB0aGVpciBub2RlcyB3aGVyZSBncjEgYXJlIGVkZ2VzIG9mIG5vZGUxIGFuZCBncjIgYXJlIGVkZ2VzIG9mXG4gIC8vIG5vZGUyXG4gIGZ1bmN0aW9uIGNvbXBhcmVFZGdlR3JvdXAoIGdyMSwgZ3IyLCBub2RlMSwgbm9kZTIgKSB7XG4gICAgdmFyIGlkMSA9IG5vZGUxLmlkKCk7XG4gICAgdmFyIGlkMiA9IG5vZGUyLmlkKCk7XG5cbiAgICB2YXIgbWFwMSA9IGZpbGxJZFRvVHlwZVNldE1hcCggZ3IxLCBub2RlMSApO1xuICAgIHZhciBtYXAyID0gZmlsbElkVG9UeXBlU2V0TWFwKCBncjIsIG5vZGUyICk7XG5cbiAgICBpZiAoIE9iamVjdC5rZXlzKCBtYXAxICkubGVuZ3RoICE9PSBPYmplY3Qua2V5cyggbWFwMiApLmxlbmd0aCApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgZmFpbGVkID0gZmFsc2U7XG5cbiAgICBPYmplY3Qua2V5cyggbWFwMSApLmZvckVhY2goIGZ1bmN0aW9uKCBrZXkgKSB7XG4gICAgICAvLyBpZiBhbHJlYWR5IGZhaWxlZCBqdXN0IHJldHVyblxuICAgICAgaWYgKCBmYWlsZWQgKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gaWYga2V5IGlzIGlkMiB1c2UgaWQxIGluc3RlYWQgYmVjYXVzZSBjb21wYXJpc29uIGlzIHJlbGF0aXZlIHRvIG5vZGVzXG4gICAgICB2YXIgb3RoZXJLZXkgPSAoIGtleSA9PSBpZDIgKSA/IGlkMSA6IGtleTtcblxuICAgICAgLy8gY2hlY2sgaWYgdGhlIHNldHMgaGF2ZSB0aGUgc2FtZSBjb250ZW50XG4gIFx0XHQvLyBpZiBjaGVjayBmYWlscyByZXR1cm4gZmFsc2VcbiAgICAgIGlmICggIWlzRXF1YWwoIG1hcDFbIGtleSBdLCBtYXAyWyBvdGhlcktleSBdICkgKSB7XG4gICAgICAgIGZhaWxlZCA9IHRydWU7XG4gICAgICB9XG4gICAgfSApO1xuXG4gICAgLy8gaWYgY2hlY2sgcGFzc2VzIGZvciBlYWNoIGtleSByZXR1cm4gdHJ1ZVxuICAgIHJldHVybiAhZmFpbGVkO1xuICB9XG5cbiAgZnVuY3Rpb24gZmlsbElkVG9UeXBlU2V0TWFwKCBlZGdlR3JvdXAsIG5vZGUgKSB7XG4gICAgdmFyIG1hcCA9IHt9O1xuICAgIHZhciBub2RlSWQgPSBub2RlLmlkKCk7XG5cbiAgICBlZGdlR3JvdXAuZm9yRWFjaCggZnVuY3Rpb24oIGVkZ2UgKSB7XG4gICAgICB2YXIgc3JjSWQgPSBlZGdlLmRhdGEoJ3NvdXJjZScpO1xuICAgICAgdmFyIHRndElkID0gZWRnZS5kYXRhKCd0YXJnZXQnKTtcbiAgICAgIHZhciBlZGdlSWQgPSBlZGdlLmlkKCk7XG5cbiAgICAgIHZhciBvdGhlckVuZCA9ICggbm9kZUlkID09PSB0Z3RJZCApID8gc3JjSWQgOiB0Z3RJZDtcblxuICAgICAgZnVuY3Rpb24gYWRkVG9SZWxhdGVkU2V0KCBzaWRlU3RyLCB2YWx1ZSApIHtcbiAgICAgICAgaWYgKCAhbWFwWyBzaWRlU3RyIF0gKSB7XG4gICAgICAgICAgbWFwWyBzaWRlU3RyIF0gPSBuZXcgU2V0KCk7XG4gICAgICAgIH1cblxuICAgICAgICBtYXBbIHNpZGVTdHIgXS5hZGQoIHZhbHVlICk7XG4gICAgICB9XG5cbiAgICAgIHZhciBlZGdlVHlwZSA9IGdldEVkZ2VUeXBlKCBlZGdlICk7XG5cbiAgICAgIGFkZFRvUmVsYXRlZFNldCggb3RoZXJFbmQsIGVkZ2VUeXBlICk7XG4gICAgfSApO1xuXG4gICAgcmV0dXJuIG1hcDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldEVkZ2VUeXBlKCBlZGdlICkge1xuICAgIHJldHVybiBlZGdlLmRhdGEoICdjbGFzcycgKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGlzVW5kaXJlY3RlZEVkZ2UoIGVkZ2UgKSB7XG4gICAgcmV0dXJuIGVsZW1lbnRVdGlsaXRpZXMuaXNVbmRpcmVjdGVkRWRnZSggZWRnZSApO1xuICB9XG5cbiAgLy8gZ2V0IGhhbHZlcyBvZiBhIGxpc3QuIEl0IGlzIGFzc3VtZWQgdGhhdCBsaXN0IHNpemUgaXMgYXQgbGVhc3QgMi5cbiAgZnVuY3Rpb24gZ2V0SGFsdmVzKCBsaXN0ICkge1xuICAgIHZhciBzID0gbGlzdC5sZW5ndGg7XG4gICAgdmFyIGhhbGZJbmRleCA9IE1hdGguZmxvb3IoIHMgLyAyICk7XG4gICAgdmFyIGZpcnN0SGFsZiA9IGxpc3Quc2xpY2UoIDAsIGhhbGZJbmRleCApO1xuICAgIHZhciBzZWNvbmRIYWxmID0gbGlzdC5zbGljZSggaGFsZkluZGV4LCBzICk7XG5cbiAgICByZXR1cm4gWyBmaXJzdEhhbGYsIHNlY29uZEhhbGYgXTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlbW92ZUF0KCBhcnIsIGluZGV4ICkge1xuICAgIGFyci5zcGxpY2UoIGluZGV4LCAxICk7XG4gIH1cblxuICByZXR1cm4gdG9wb2xvZ3lHcm91cGluZztcbn07XG4iLCIvLyBFeHRlbmRzIHNiZ252aXoudW5kb1JlZG9BY3Rpb25GdW5jdGlvbnNcbnZhciBsaWJzID0gcmVxdWlyZSgnLi9saWItdXRpbGl0aWVzJykuZ2V0TGlicygpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHtcblxuICB2YXIgc2JnbnZpekluc3RhbmNlLCB1bmRvUmVkb0FjdGlvbkZ1bmN0aW9ucywgZWxlbWVudFV0aWxpdGllcywgY3ksIHRvcG9sb2d5R3JvdXBpbmc7XG5cbiAgZnVuY3Rpb24gdW5kb1JlZG9BY3Rpb25GdW5jdGlvbnNFeHRlbmRlciAocGFyYW0pIHtcblxuICAgIHNiZ252aXpJbnN0YW5jZSA9IHBhcmFtLnNiZ252aXpJbnN0YW5jZVV0aWxpdGllcy5nZXRJbnN0YW5jZSgpO1xuICAgIGN5ID0gcGFyYW0uc2JnbnZpekluc3RhbmNlVXRpbGl0aWVzLmdldEN5KCk7XG4gICAgdW5kb1JlZG9BY3Rpb25GdW5jdGlvbnMgPSBzYmdudml6SW5zdGFuY2UudW5kb1JlZG9BY3Rpb25GdW5jdGlvbnM7XG4gICAgZWxlbWVudFV0aWxpdGllcyA9IHBhcmFtLmVsZW1lbnRVdGlsaXRpZXM7XG4gICAgdG9wb2xvZ3lHcm91cGluZyA9IHBhcmFtLnNpZlRvcG9sb2d5R3JvdXBpbmc7XG5cbiAgICBleHRlbmQoKTtcbiAgfVxuXG4gIC8vIEV4dGVuZHMgdW5kb1JlZG9BY3Rpb25GdW5jdGlvbnMgd2l0aCBjaGlzZSBzcGVjaWZpYyBmZWF0dXJlc1xuICBmdW5jdGlvbiBleHRlbmQgKCkge1xuXG4gICAgdW5kb1JlZG9BY3Rpb25GdW5jdGlvbnMuYXBwbHlTSUZUb3BvbG9neUdyb3VwaW5nID0gZnVuY3Rpb24ocGFyYW0pIHtcbiAgICAgIHZhciBvbGRFbGVzLCBuZXdFbGVzO1xuICAgICAgaWYgKCBwYXJhbS5maXJzdFRpbWUgKSB7XG4gICAgICAgIG9sZEVsZXMgPSBjeS5lbGVtZW50cygpO1xuXG4gICAgICAgIGlmIChwYXJhbS5hcHBseSkge1xuICAgICAgICAgIHRvcG9sb2d5R3JvdXBpbmcuYXBwbHkoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICB0b3BvbG9neUdyb3VwaW5nLnVuYXBwbHkoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIG5ld0VsZXMgPSBjeS5lbGVtZW50cygpO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIG9sZEVsZXMgPSBwYXJhbS5vbGRFbGVzO1xuICAgICAgICBuZXdFbGVzID0gcGFyYW0ubmV3RWxlcztcblxuICAgICAgICBpZiAoIGVsZW1lbnRVdGlsaXRpZXMuaXNHcmFwaFRvcG9sb2d5TG9ja2VkKCkgKSB7XG4gICAgICAgICAgZWxlbWVudFV0aWxpdGllcy51bmxvY2tHcmFwaFRvcG9sb2d5KCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgZWxlbWVudFV0aWxpdGllcy5sb2NrR3JhcGhUb3BvbG9neSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgb2xkRWxlcy5yZW1vdmUoKTtcbiAgICAgICAgbmV3RWxlcy5yZXN0b3JlKCk7XG5cbiAgICAgICAgdG9wb2xvZ3lHcm91cGluZy50b2dnbGVBcHBsaWVkRmxhZygpO1xuICAgICAgfVxuXG4gICAgICB2YXIgcmVzdWx0ID0geyBvbGRFbGVzOiBuZXdFbGVzLCBuZXdFbGVzOiBvbGRFbGVzIH07XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH07XG5cbiAgICAvLyBTZWN0aW9uIFN0YXJ0XG4gICAgLy8gYWRkL3JlbW92ZSBhY3Rpb24gZnVuY3Rpb25zXG5cbiAgICB1bmRvUmVkb0FjdGlvbkZ1bmN0aW9ucy5hZGROb2RlID0gZnVuY3Rpb24gKHBhcmFtKSB7XG4gICAgICB2YXIgcmVzdWx0O1xuICAgICAgaWYgKHBhcmFtLmZpcnN0VGltZSkge1xuICAgICAgICB2YXIgbmV3Tm9kZSA9IHBhcmFtLm5ld05vZGU7XG4gICAgICAgIHJlc3VsdCA9IGVsZW1lbnRVdGlsaXRpZXMuYWRkTm9kZShuZXdOb2RlLngsIG5ld05vZGUueSwgbmV3Tm9kZS5jbGFzcywgbmV3Tm9kZS5pZCwgbmV3Tm9kZS5wYXJlbnQsIG5ld05vZGUudmlzaWJpbGl0eSk7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgcmVzdWx0ID0gZWxlbWVudFV0aWxpdGllcy5yZXN0b3JlRWxlcyhwYXJhbSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGVsZXM6IHJlc3VsdFxuICAgICAgfTtcbiAgICB9O1xuXG4gICAgdW5kb1JlZG9BY3Rpb25GdW5jdGlvbnMuYWRkRWRnZSA9IGZ1bmN0aW9uIChwYXJhbSkge1xuICAgICAgdmFyIHJlc3VsdDtcbiAgICAgIGlmIChwYXJhbS5maXJzdFRpbWUpIHtcbiAgICAgICAgdmFyIG5ld0VkZ2UgPSBwYXJhbS5uZXdFZGdlO1xuICAgICAgICByZXN1bHQgPSBlbGVtZW50VXRpbGl0aWVzLmFkZEVkZ2UobmV3RWRnZS5zb3VyY2UsIG5ld0VkZ2UudGFyZ2V0LCBuZXdFZGdlLmNsYXNzLCBuZXdFZGdlLmlkLCBuZXdFZGdlLnZpc2liaWxpdHkpO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIHJlc3VsdCA9IGVsZW1lbnRVdGlsaXRpZXMucmVzdG9yZUVsZXMocGFyYW0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBlbGVzOiByZXN1bHRcbiAgICAgIH07XG4gICAgfTtcblxuICAgIHVuZG9SZWRvQWN0aW9uRnVuY3Rpb25zLmFkZFByb2Nlc3NXaXRoQ29udmVuaWVudEVkZ2VzID0gZnVuY3Rpb24ocGFyYW0pIHtcbiAgICAgIHZhciByZXN1bHQ7XG4gICAgICBpZiAocGFyYW0uZmlyc3RUaW1lKSB7XG4gICAgICAgIHJlc3VsdCA9IGVsZW1lbnRVdGlsaXRpZXMuYWRkUHJvY2Vzc1dpdGhDb252ZW5pZW50RWRnZXMocGFyYW0uc291cmNlLCBwYXJhbS50YXJnZXQsIHBhcmFtLnByb2Nlc3NUeXBlKTtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICByZXN1bHQgPSBlbGVtZW50VXRpbGl0aWVzLnJlc3RvcmVFbGVzKHBhcmFtKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZWxlczogcmVzdWx0XG4gICAgICB9O1xuICAgIH07XG5cbiAgICB1bmRvUmVkb0FjdGlvbkZ1bmN0aW9ucy5jcmVhdGVDb21wb3VuZEZvckdpdmVuTm9kZXMgPSBmdW5jdGlvbiAocGFyYW0pIHtcbiAgICAgIHZhciByZXN1bHQgPSB7fTtcblxuICAgICAgaWYgKHBhcmFtLmZpcnN0VGltZSkge1xuICAgICAgICAvLyBOb2RlcyB0byBtYWtlIGNvbXBvdW5kLCB0aGVpciBkZXNjZW5kYW50cyBhbmQgZWRnZXMgY29ubmVjdGVkIHRvIHRoZW0gd2lsbCBiZSByZW1vdmVkIGR1cmluZyBjcmVhdGVDb21wb3VuZEZvckdpdmVuTm9kZXMgb3BlcmF0aW9uXG4gICAgICAgIC8vIChpbnRlcm5hbGx5IGJ5IGVsZXMubW92ZSgpIG9wZXJhdGlvbiksIHNvIG1hcmsgdGhlbSBhcyByZW1vdmVkIGVsZXMgZm9yIHVuZG8gb3BlcmF0aW9uLlxuICAgICAgICB2YXIgbm9kZXNUb01ha2VDb21wb3VuZCA9IHBhcmFtLm5vZGVzVG9NYWtlQ29tcG91bmQ7XG4gICAgICAgIHZhciByZW1vdmVkRWxlcyA9IG5vZGVzVG9NYWtlQ29tcG91bmQudW5pb24obm9kZXNUb01ha2VDb21wb3VuZC5kZXNjZW5kYW50cygpKTtcbiAgICAgICAgcmVtb3ZlZEVsZXMgPSByZW1vdmVkRWxlcy51bmlvbihyZW1vdmVkRWxlcy5jb25uZWN0ZWRFZGdlcygpKTtcbiAgICAgICAgcmVzdWx0LnJlbW92ZWRFbGVzID0gcmVtb3ZlZEVsZXM7XG4gICAgICAgIC8vIEFzc3VtZSB0aGF0IGFsbCBub2RlcyB0byBtYWtlIGNvbXBvdW5kIGhhdmUgdGhlIHNhbWUgcGFyZW50XG4gICAgICAgIHZhciBvbGRQYXJlbnRJZCA9IG5vZGVzVG9NYWtlQ29tcG91bmRbMF0uZGF0YShcInBhcmVudFwiKTtcbiAgICAgICAgLy8gVGhlIHBhcmVudCBvZiBuZXcgY29tcG91bmQgd2lsbCBiZSB0aGUgb2xkIHBhcmVudCBvZiB0aGUgbm9kZXMgdG8gbWFrZSBjb21wb3VuZFxuICAgICAgICAvLyBOZXcgZWxlcyBpbmNsdWRlcyBuZXcgY29tcG91bmQgYW5kIHRoZSBtb3ZlZCBlbGVzIGFuZCB3aWxsIGJlIHVzZWQgaW4gdW5kbyBvcGVyYXRpb24uXG4gICAgICAgIHJlc3VsdC5uZXdFbGVzID0gZWxlbWVudFV0aWxpdGllcy5jcmVhdGVDb21wb3VuZEZvckdpdmVuTm9kZXMobm9kZXNUb01ha2VDb21wb3VuZCwgcGFyYW0uY29tcG91bmRUeXBlKTtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICByZXN1bHQucmVtb3ZlZEVsZXMgPSBwYXJhbS5uZXdFbGVzLnJlbW92ZSgpO1xuICAgICAgICByZXN1bHQubmV3RWxlcyA9IHBhcmFtLnJlbW92ZWRFbGVzLnJlc3RvcmUoKTtcbiAgICAgICAgZWxlbWVudFV0aWxpdGllcy5tYWludGFpblBvaW50ZXIocmVzdWx0Lm5ld0VsZXMpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH07XG5cbiAgICAvLyBTZWN0aW9uIEVuZFxuICAgIC8vIGFkZC9yZW1vdmUgYWN0aW9uIGZ1bmN0aW9uc1xuXG4gICAgLy8gU2VjdGlvbiBTdGFydFxuICAgIC8vIGVhc3kgY3JlYXRpb24gYWN0aW9uIGZ1bmN0aW9uc1xuXG4gICAgdW5kb1JlZG9BY3Rpb25GdW5jdGlvbnMuY3JlYXRlVGVtcGxhdGVSZWFjdGlvbiA9IGZ1bmN0aW9uIChwYXJhbSkge1xuICAgICAgdmFyIGZpcnN0VGltZSA9IHBhcmFtLmZpcnN0VGltZTtcbiAgICAgIHZhciBlbGVzO1xuXG4gICAgICBpZiAoZmlyc3RUaW1lKSB7XG4gICAgICAgIGVsZXMgPSBlbGVtZW50VXRpbGl0aWVzLmNyZWF0ZVRlbXBsYXRlUmVhY3Rpb24ocGFyYW0udGVtcGxhdGVUeXBlLCBwYXJhbS5tYWNyb21vbGVjdWxlTGlzdCwgcGFyYW0uY29tcGxleE5hbWUsIHBhcmFtLnByb2Nlc3NQb3NpdGlvbiwgcGFyYW0udGlsaW5nUGFkZGluZ1ZlcnRpY2FsLCBwYXJhbS50aWxpbmdQYWRkaW5nSG9yaXpvbnRhbCwgcGFyYW0uZWRnZUxlbmd0aCwgcGFyYW0ubGF5b3V0UGFyYW0pXG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgZWxlcyA9IHBhcmFtO1xuICAgICAgICBjeS5hZGQoZWxlcyk7XG5cbiAgICAgICAgY3kuZWxlbWVudHMoKS51bnNlbGVjdCgpO1xuICAgICAgICBlbGVzLnNlbGVjdCgpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBlbGVzOiBlbGVzXG4gICAgICB9O1xuICAgIH07XG5cbiAgICB1bmRvUmVkb0FjdGlvbkZ1bmN0aW9ucy5jcmVhdGVBY3RpdmF0aW9uUmVhY3Rpb24gPSBmdW5jdGlvbihwYXJhbSkge1xuICAgICAgdmFyIGZpcnN0VGltZSA9IHBhcmFtLmZpcnN0VGltZTtcbiAgICAgIHZhciBlbGVzO1xuXG4gICAgICBpZiAoZmlyc3RUaW1lKSB7XG4gICAgICAgIGVsZXMgPSBlbGVtZW50VXRpbGl0aWVzLmNyZWF0ZUFjdGl2YXRpb25SZWFjdGlvbihwYXJhbS5wcm90ZWluTmFtZSwgcGFyYW0ucHJvY2Vzc1Bvc2l0aW9uLCBwYXJhbS5lZGdlTGVuZ3RoLCBwYXJhbS5yZXZlcnNlKVxuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIGVsZXMgPSBwYXJhbTtcbiAgICAgICAgY3kuYWRkKGVsZXMpO1xuXG4gICAgICAgIGN5LmVsZW1lbnRzKCkudW5zZWxlY3QoKTtcbiAgICAgICAgZWxlcy5zZWxlY3QoKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZWxlczogZWxlc1xuICAgICAgfTtcbiAgICB9O1xuXG4gICAgdW5kb1JlZG9BY3Rpb25GdW5jdGlvbnMuY3JlYXRlVHJhbnNsYXRpb24gPSBmdW5jdGlvbihwYXJhbSkge1xuICAgICAgbGV0IGZpcnN0VGltZSA9IHBhcmFtLmZpcnN0VGltZTtcbiAgICAgIGxldCBlbGVzO1xuXG4gICAgICBpZiAoZmlyc3RUaW1lKSB7XG4gICAgICAgIGVsZXMgPSBlbGVtZW50VXRpbGl0aWVzLmNyZWF0ZVRyYW5zbGF0aW9uKHBhcmFtLnJlZ3VsYXRvckxhYmVsLCBwYXJhbS5vdXRwdXRMYWJlbCwgcGFyYW0ub3JpZW50YXRpb24pO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIGVsZXMgPSBwYXJhbTtcbiAgICAgICAgY3kuYWRkKGVsZXMpO1xuXG4gICAgICAgIGN5LmVsZW1lbnRzKCkudW5zZWxlY3QoKTtcbiAgICAgICAgZWxlcy5zZWxlY3QoKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZWxlczogZWxlc1xuICAgICAgfTtcbiAgICB9O1xuXG4gICAgdW5kb1JlZG9BY3Rpb25GdW5jdGlvbnMuY3JlYXRlVHJhbnNjcmlwdGlvbiA9IGZ1bmN0aW9uKHBhcmFtKSB7XG4gICAgICBsZXQgZmlyc3RUaW1lID0gcGFyYW0uZmlyc3RUaW1lO1xuICAgICAgbGV0IGVsZXM7XG5cbiAgICAgIGlmIChmaXJzdFRpbWUpIHtcbiAgICAgICAgZWxlcyA9IGVsZW1lbnRVdGlsaXRpZXMuY3JlYXRlVHJhbnNjcmlwdGlvbihwYXJhbS5sYWJlbCwgcGFyYW0ub3JpZW50YXRpb24pO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIGVsZXMgPSBwYXJhbTtcbiAgICAgICAgY3kuYWRkKGVsZXMpO1xuXG4gICAgICAgIGN5LmVsZW1lbnRzKCkudW5zZWxlY3QoKTtcbiAgICAgICAgZWxlcy5zZWxlY3QoKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZWxlczogZWxlc1xuICAgICAgfTtcbiAgICB9O1xuXG4gICAgdW5kb1JlZG9BY3Rpb25GdW5jdGlvbnMuY3JlYXRlRGVncmFkYXRpb24gPSBmdW5jdGlvbihwYXJhbSkge1xuICAgICAgbGV0IGZpcnN0VGltZSA9IHBhcmFtLmZpcnN0VGltZTtcbiAgICAgIGxldCBlbGVzO1xuXG4gICAgICBpZiAoZmlyc3RUaW1lKSB7XG4gICAgICAgIGVsZXMgPSBlbGVtZW50VXRpbGl0aWVzLmNyZWF0ZURlZ3JhZGF0aW9uKHBhcmFtLm1hY3JvbW9sZWN1bGUsIHBhcmFtLm9yaWVudGF0aW9uKTtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICBlbGVzID0gcGFyYW07XG4gICAgICAgIGN5LmFkZChlbGVzKTtcblxuICAgICAgICBjeS5lbGVtZW50cygpLnVuc2VsZWN0KCk7XG4gICAgICAgIGVsZXMuc2VsZWN0KCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGVsZXM6IGVsZXNcbiAgICAgIH07XG4gICAgfTtcblxuICAgIHVuZG9SZWRvQWN0aW9uRnVuY3Rpb25zLmNyZWF0ZUNvbXBsZXhQcm90ZWluRm9ybWF0aW9uID0gZnVuY3Rpb24ocGFyYW0pIHtcbiAgICAgIGxldCBmaXJzdFRpbWUgPSBwYXJhbS5maXJzdFRpbWU7XG4gICAgICBsZXQgZWxlcztcblxuICAgICAgaWYgKGZpcnN0VGltZSkge1xuICAgICAgICBlbGVzID0gZWxlbWVudFV0aWxpdGllcy5jcmVhdGVDb21wbGV4UHJvdGVpbkZvcm1hdGlvbihwYXJhbS5wcm90ZWluTGFiZWxzLCBwYXJhbS5jb21wbGV4TGFiZWwsIHBhcmFtLnJlZ3VsYXRvciwgcGFyYW0ub3JpZW50YXRpb24sIHBhcmFtLnJldmVyc2UpO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIGVsZXMgPSBwYXJhbTtcbiAgICAgICAgY3kuYWRkKGVsZXMpO1xuXG4gICAgICAgIGN5LmVsZW1lbnRzKCkudW5zZWxlY3QoKTtcbiAgICAgICAgZWxlcy5zZWxlY3QoKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZWxlczogZWxlc1xuICAgICAgfTtcbiAgICB9O1xuXG4gICAgdW5kb1JlZG9BY3Rpb25GdW5jdGlvbnMuY3JlYXRlTXVsdGltZXJpemF0aW9uID0gZnVuY3Rpb24ocGFyYW0pIHtcbiAgICAgIGxldCBmaXJzdFRpbWUgPSBwYXJhbS5maXJzdFRpbWU7XG4gICAgICBsZXQgZWxlcztcblxuICAgICAgaWYgKGZpcnN0VGltZSkge1xuICAgICAgICBlbGVzID0gZWxlbWVudFV0aWxpdGllcy5jcmVhdGVNdWx0aW1lcml6YXRpb24ocGFyYW0ubWFjcm9tb2xlY3VsZSwgcGFyYW0ucmVndWxhdG9yLCBwYXJhbS5yZWd1bGF0b3JNdWx0aW1lciwgcGFyYW0ub3JpZW50YXRpb24pO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIGVsZXMgPSBwYXJhbTtcbiAgICAgICAgY3kuYWRkKGVsZXMpO1xuXG4gICAgICAgIGN5LmVsZW1lbnRzKCkudW5zZWxlY3QoKTtcbiAgICAgICAgZWxlcy5zZWxlY3QoKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZWxlczogZWxlc1xuICAgICAgfTtcbiAgICB9O1xuXG4gICAgdW5kb1JlZG9BY3Rpb25GdW5jdGlvbnMuY3JlYXRlQ29udmVyc2lvbiA9IGZ1bmN0aW9uKHBhcmFtKSB7XG4gICAgICBsZXQgZmlyc3RUaW1lID0gcGFyYW0uZmlyc3RUaW1lO1xuICAgICAgbGV0IGVsZXM7XG5cbiAgICAgIGlmIChmaXJzdFRpbWUpIHtcbiAgICAgICAgZWxlcyA9IGVsZW1lbnRVdGlsaXRpZXMuY3JlYXRlQ29udmVyc2lvbihwYXJhbS5tYWNyb21vbGVjdWxlLCBwYXJhbS5yZWd1bGF0b3IsIHBhcmFtLnJlZ3VsYXRvck11bHRpbWVyLCBwYXJhbS5vcmllbnRhdGlvbiwgcGFyYW0uaW5wdXRJbmZvYm94TGFiZWxzLCBwYXJhbS5vdXRwdXRJbmZvYm94TGFiZWxzKTtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICBlbGVzID0gcGFyYW07XG4gICAgICAgIGN5LmFkZChlbGVzKTtcblxuICAgICAgICBjeS5lbGVtZW50cygpLnVuc2VsZWN0KCk7XG4gICAgICAgIGVsZXMuc2VsZWN0KCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGVsZXM6IGVsZXNcbiAgICAgIH07XG4gICAgfTtcblxuICAgIHVuZG9SZWRvQWN0aW9uRnVuY3Rpb25zLmNyZWF0ZU1ldGFib2xpY1JlYWN0aW9uID0gZnVuY3Rpb24ocGFyYW0pIHtcbiAgICAgIGxldCBmaXJzdFRpbWUgPSBwYXJhbS5maXJzdFRpbWU7XG4gICAgICBsZXQgZWxlcztcblxuICAgICAgaWYgKGZpcnN0VGltZSkge1xuICAgICAgICBlbGVzID0gZWxlbWVudFV0aWxpdGllcy5jcmVhdGVNZXRhYm9saWNSZWFjdGlvbihwYXJhbS5pbnB1dHMsIHBhcmFtLm91dHB1dHMsIHBhcmFtLnJldmVyc2libGUsIHBhcmFtLnJlZ3VsYXRvciwgcGFyYW0ucmVndWxhdG9yTXVsdGltZXIsIHBhcmFtLm9yaWVudGF0aW9uKTtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICBlbGVzID0gcGFyYW07XG4gICAgICAgIGN5LmFkZChlbGVzKTtcblxuICAgICAgICBjeS5lbGVtZW50cygpLnVuc2VsZWN0KCk7XG4gICAgICAgIGVsZXMuc2VsZWN0KCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGVsZXM6IGVsZXNcbiAgICAgIH07XG4gICAgfTtcblxuICAgIHVuZG9SZWRvQWN0aW9uRnVuY3Rpb25zLmNyZWF0ZU1ldGFib2xpY0NhdGFseXRpY0FjdGl2aXR5ID0gZnVuY3Rpb24ocGFyYW0pIHtcbiAgICAgIHZhciBmaXJzdFRpbWUgPSBwYXJhbS5maXJzdFRpbWU7XG4gICAgICB2YXIgZWxlcztcblxuICAgICAgaWYgKGZpcnN0VGltZSkge1xuICAgICAgICBlbGVzID0gZWxlbWVudFV0aWxpdGllcy5jcmVhdGVNZXRhYm9saWNDYXRhbHl0aWNBY3Rpdml0eShwYXJhbS5pbnB1dE5vZGVMaXN0LCBwYXJhbS5vdXRwdXROb2RlTGlzdCwgcGFyYW0uY2F0YWx5c3ROYW1lLCBwYXJhbS5jYXRhbHlzdFR5cGUsIHBhcmFtLnByb2Nlc3NQb3NpdGlvbiwgcGFyYW0udGlsaW5nUGFkZGluZ1ZlcnRpY2FsLCBwYXJhbS50aWxpbmdQYWRkaW5nSG9yaXpvbnRhbCwgcGFyYW0uZWRnZUxlbmd0aClcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICBlbGVzID0gcGFyYW07XG4gICAgICAgIGN5LmFkZChlbGVzKTtcblxuICAgICAgICBjeS5lbGVtZW50cygpLnVuc2VsZWN0KCk7XG4gICAgICAgIGVsZXMuc2VsZWN0KCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGVsZXM6IGVsZXNcbiAgICAgIH07XG4gICAgfTtcblxuICAgIHVuZG9SZWRvQWN0aW9uRnVuY3Rpb25zLmNyZWF0ZVRyYW5zY3JpcHRpb25SZWFjdGlvbiA9IGZ1bmN0aW9uKHBhcmFtKSB7XG4gICAgICB2YXIgZmlyc3RUaW1lID0gcGFyYW0uZmlyc3RUaW1lO1xuICAgICAgdmFyIGVsZXM7XG5cbiAgICAgIGlmIChmaXJzdFRpbWUpIHtcbiAgICAgICAgZWxlcyA9IGVsZW1lbnRVdGlsaXRpZXMuY3JlYXRlVHJhbnNjcmlwdGlvblJlYWN0aW9uKHBhcmFtLmdlbmVOYW1lLCBwYXJhbS5tUm5hTmFtZSwgcGFyYW0ucHJvY2Vzc1Bvc2l0aW9uLCBwYXJhbS5lZGdlTGVuZ3RoKVxuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIGVsZXMgPSBwYXJhbTtcbiAgICAgICAgY3kuYWRkKGVsZXMpO1xuXG4gICAgICAgIGN5LmVsZW1lbnRzKCkudW5zZWxlY3QoKTtcbiAgICAgICAgZWxlcy5zZWxlY3QoKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZWxlczogZWxlc1xuICAgICAgfTtcbiAgICB9O1xuXG4gICAgdW5kb1JlZG9BY3Rpb25GdW5jdGlvbnMuY3JlYXRlVHJhbnNsYXRpb25SZWFjdGlvbiA9IGZ1bmN0aW9uKHBhcmFtKSB7XG4gICAgICB2YXIgZmlyc3RUaW1lID0gcGFyYW0uZmlyc3RUaW1lO1xuICAgICAgdmFyIGVsZXM7XG5cbiAgICAgIGlmIChmaXJzdFRpbWUpIHtcbiAgICAgICAgZWxlcyA9IGVsZW1lbnRVdGlsaXRpZXMuY3JlYXRlVHJhbnNsYXRpb25SZWFjdGlvbihwYXJhbS5tUm5hTmFtZSwgcGFyYW0ucHJvdGVpbk5hbWUsIHBhcmFtLnByb2Nlc3NQb3NpdGlvbiwgcGFyYW0uZWRnZUxlbmd0aClcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICBlbGVzID0gcGFyYW07XG4gICAgICAgIGN5LmFkZChlbGVzKTtcblxuICAgICAgICBjeS5lbGVtZW50cygpLnVuc2VsZWN0KCk7XG4gICAgICAgIGVsZXMuc2VsZWN0KCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGVsZXM6IGVsZXNcbiAgICAgIH07XG4gICAgfTtcblxuICAgIC8vIFNlY3Rpb24gRW5kXG4gICAgLy8gZWFzeSBjcmVhdGlvbiBhY3Rpb24gZnVuY3Rpb25zXG5cbiAgICAvLyBTZWN0aW9uIFN0YXJ0XG4gICAgLy8gZ2VuZXJhbCBhY3Rpb24gZnVuY3Rpb25zXG5cbiAgICB1bmRvUmVkb0FjdGlvbkZ1bmN0aW9ucy5nZXROb2RlUG9zaXRpb25zID0gZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIHBvc2l0aW9ucyA9IHt9O1xuICAgICAgdmFyIG5vZGVzID0gY3kubm9kZXMoKTtcblxuICAgICAgbm9kZXMuZWFjaChmdW5jdGlvbihlbGUsIGkpIHtcbiAgICAgICAgaWYodHlwZW9mIGVsZSA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICAgIGVsZSA9IGk7XG4gICAgICAgIH1cblxuICAgICAgICBwb3NpdGlvbnNbZWxlLmlkKCldID0ge1xuICAgICAgICAgIHg6IGVsZS5wb3NpdGlvbihcInhcIiksXG4gICAgICAgICAgeTogZWxlLnBvc2l0aW9uKFwieVwiKVxuICAgICAgICB9O1xuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBwb3NpdGlvbnM7XG4gICAgfTtcblxuICAgIHVuZG9SZWRvQWN0aW9uRnVuY3Rpb25zLnJldHVyblRvUG9zaXRpb25zID0gZnVuY3Rpb24gKHBvc2l0aW9ucykge1xuICAgICAgdmFyIGN1cnJlbnRQb3NpdGlvbnMgPSB7fTtcbiAgICAgIGN5Lm5vZGVzKCkucG9zaXRpb25zKGZ1bmN0aW9uIChlbGUsIGkpIHtcbiAgICAgICAgaWYodHlwZW9mIGVsZSA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICAgIGVsZSA9IGk7XG4gICAgICAgIH1cblxuICAgICAgICBjdXJyZW50UG9zaXRpb25zW2VsZS5pZCgpXSA9IHtcbiAgICAgICAgICB4OiBlbGUucG9zaXRpb24oXCJ4XCIpLFxuICAgICAgICAgIHk6IGVsZS5wb3NpdGlvbihcInlcIilcbiAgICAgICAgfTtcblxuICAgICAgICB2YXIgcG9zID0gcG9zaXRpb25zW2VsZS5pZCgpXTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB4OiBwb3MueCxcbiAgICAgICAgICB5OiBwb3MueVxuICAgICAgICB9O1xuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBjdXJyZW50UG9zaXRpb25zO1xuICAgIH07XG5cbiAgICB1bmRvUmVkb0FjdGlvbkZ1bmN0aW9ucy5yZXNpemVOb2RlcyA9IGZ1bmN0aW9uIChwYXJhbSkge1xuICAgICAgdmFyIHJlc3VsdCA9IHtcbiAgICAgICAgcGVyZm9ybU9wZXJhdGlvbjogdHJ1ZVxuICAgICAgfTtcblxuICAgICAgdmFyIG5vZGVzID0gcGFyYW0ubm9kZXM7XG5cbiAgICAgIHJlc3VsdC5zaXplTWFwID0ge307XG4gICAgICByZXN1bHQudXNlQXNwZWN0UmF0aW8gPSBmYWxzZTtcbiAgICAgIHJlc3VsdC5wcmVzZXJ2ZVJlbGF0aXZlUG9zID0gcGFyYW0ucHJlc2VydmVSZWxhdGl2ZVBvcztcblxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2Rlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgbm9kZSA9IG5vZGVzW2ldO1xuICAgICAgICBpZihub2RlLmlzUGFyZW50KCkpe1xuICAgICAgICAgIHJlc3VsdC5zaXplTWFwW25vZGUuaWQoKV0gPSB7XG4gICAgICAgICAgICB3OiBub2RlLmRhdGEoXCJtaW5XaWR0aFwiKSB8fCAwLFxuICAgICAgICAgICAgaDogbm9kZS5kYXRhKFwibWluSGVpZ2h0XCIpIHx8IDAsXG4gICAgICAgICAgICBiaWFzTCA6IG5vZGUuZGF0YShcIm1pbldpZHRoQmlhc0xlZnRcIikgfHwgMCxcbiAgICAgICAgICAgIGJpYXNSIDogbm9kZS5kYXRhKFwibWluV2lkdGhCaWFzUmlnaHRcIikgfHwgMCxcbiAgICAgICAgICAgIGJpYXNUIDogbm9kZS5kYXRhKFwibWluSGVpZ2h0Qmlhc1RvcFwiKSB8fCAwLFxuICAgICAgICAgICAgYmlhc0IgOiBub2RlLmRhdGEoXCJtaW5IZWlnaHRCaWFzQm90dG9tXCIpIHx8IDBcbiAgICAgICAgICAgLy8gdzogbm9kZS5jc3MoXCJtaW5XaWR0aFwiKSAhPSAwPyAgbm9kZS5kYXRhKFwibWluV2lkdGhcIikgOiBub2RlLmNoaWxkcmVuKCkuYm91bmRpbmdCb3goKS53LFxuICAgICAgICAgICAgLy9oOiBub2RlLmNzcyhcIm1pbi1oZWlnaHRcIikgIT0gMD8gIG5vZGUuZGF0YShcIm1pbkhlaWdodFwiKSA6IG5vZGUuY2hpbGRyZW4oKS5ib3VuZGluZ0JveCgpLmhcbiAgICAgICAgICB9O1xuICAgICAgICB9ZWxzZXtcbiAgICAgICAgICByZXN1bHQuc2l6ZU1hcFtub2RlLmlkKCldID0ge1xuICAgICAgICAgICAgdzogbm9kZS53aWR0aCgpLFxuICAgICAgICAgICAgaDogbm9kZS5oZWlnaHQoKVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICB9XG5cbiAgICAgIHJlc3VsdC5ub2RlcyA9IG5vZGVzO1xuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBub2RlID0gbm9kZXNbaV07XG5cbiAgICAgICAgaWYgKHBhcmFtLnBlcmZvcm1PcGVyYXRpb24pIHtcbiAgICAgICAgICBpZiAocGFyYW0uc2l6ZU1hcCkge1xuICAgICAgICAgICAgLyogaWYgKHBhcmFtLnByZXNlcnZlUmVsYXRpdmVQb3MgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgdmFyIG9sZFdpZHRoID0gbm9kZS5kYXRhKFwiYmJveFwiKS53O1xuICAgICAgICAgICAgICB2YXIgb2xkSGVpZ2h0ID0gbm9kZS5kYXRhKFwiYmJveFwiKS5oO1xuICAgICAgICAgICAgfSAqL1xuXG4gICAgICAgICAgICBpZihub2RlLmlzUGFyZW50KCkpe1xuICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgbm9kZS5kYXRhKFwibWluSGVpZ2h0XCIgLCBwYXJhbS5zaXplTWFwW25vZGUuaWQoKV0uaCk7XG4gICAgICAgICAgICAgIG5vZGUuZGF0YShcIm1pbldpZHRoXCIgLCBwYXJhbS5zaXplTWFwW25vZGUuaWQoKV0udyk7XG4gICAgICAgICAgICAgIG5vZGUuZGF0YShcIm1pbldpZHRoQmlhc0xlZnRcIiwgcGFyYW0uc2l6ZU1hcFtub2RlLmlkKCldLmJpYXNMKTtcbiAgICAgICAgICAgICAgbm9kZS5kYXRhKFwibWluV2lkdGhCaWFzUmlnaHRcIiwgcGFyYW0uc2l6ZU1hcFtub2RlLmlkKCldLmJpYXNSKTtcbiAgICAgICAgICAgICAgbm9kZS5kYXRhKFwibWluSGVpZ2h0Qmlhc1RvcFwiLCBwYXJhbS5zaXplTWFwW25vZGUuaWQoKV0uYmlhc1QpO1xuICAgICAgICAgICAgICBub2RlLmRhdGEoXCJtaW5IZWlnaHRCaWFzQm90dG9tXCIsIHBhcmFtLnNpemVNYXBbbm9kZS5pZCgpXS5iaWFzQik7XG5cbiAgICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgICBub2RlLmRhdGEoXCJiYm94XCIpLncgPSBwYXJhbS5zaXplTWFwW25vZGUuaWQoKV0udztcbiAgICAgICAgICAgICAgbm9kZS5kYXRhKFwiYmJveFwiKS5oID0gcGFyYW0uc2l6ZU1hcFtub2RlLmlkKCldLmg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgIFxuXG4gICAgICAgICAgICAvKiBpZiAocGFyYW0ucHJlc2VydmVSZWxhdGl2ZVBvcyA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICB2YXIgc3RhdGVzYW5kaW5mb3MgPSBub2RlLmRhdGEoJ3N0YXRlc2FuZGluZm9zJyk7XG4gICAgICAgICAgICAgIHZhciB0b3BCb3R0b20gPSBzdGF0ZXNhbmRpbmZvcy5maWx0ZXIoYm94ID0+IChib3guYW5jaG9yU2lkZSA9PT0gXCJ0b3BcIiB8fCBib3guYW5jaG9yU2lkZSA9PT0gXCJib3R0b21cIikpO1xuICAgICAgICAgICAgICB2YXIgcmlnaHRMZWZ0ID0gc3RhdGVzYW5kaW5mb3MuZmlsdGVyKGJveCA9PiAoYm94LmFuY2hvclNpZGUgPT09IFwicmlnaHRcIiB8fCBib3guYW5jaG9yU2lkZSA9PT0gXCJsZWZ0XCIpKTtcblxuICAgICAgICAgICAgICB0b3BCb3R0b20uZm9yRWFjaChmdW5jdGlvbihib3gpe1xuICAgICAgICAgICAgICAgIGlmIChib3guYmJveC54IDwgMCkge1xuICAgICAgICAgICAgICAgICAgYm94LmJib3gueCA9IDA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGJveC5iYm94LnggPiBvbGRXaWR0aCkge1xuICAgICAgICAgICAgICAgICAgYm94LmJib3gueCA9IG9sZFdpZHRoO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBib3guYmJveC54ID0gbm9kZS5kYXRhKFwiYmJveFwiKS53ICogYm94LmJib3gueCAvIG9sZFdpZHRoO1xuICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICByaWdodExlZnQuZm9yRWFjaChmdW5jdGlvbihib3gpe1xuICAgICAgICAgICAgICAgIGlmIChib3guYmJveC55IDwgMCkge1xuICAgICAgICAgICAgICAgICAgYm94LmJib3gueSA9IDA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGJveC5iYm94LnkgPiBvbGRIZWlnaHQpIHtcbiAgICAgICAgICAgICAgICAgIGJveC5iYm94LnkgPSBvbGRIZWlnaHQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJveC5iYm94LnkgPSBub2RlLmRhdGEoXCJiYm94XCIpLmggKiBib3guYmJveC55IC8gb2xkSGVpZ2h0O1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gKi9cbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBlbGVtZW50VXRpbGl0aWVzLnJlc2l6ZU5vZGVzKHBhcmFtLm5vZGVzLCBwYXJhbS53aWR0aCwgcGFyYW0uaGVpZ2h0LCBwYXJhbS51c2VBc3BlY3RSYXRpbywgcGFyYW0ucHJlc2VydmVSZWxhdGl2ZVBvcyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjeS5zdHlsZSgpLnVwZGF0ZSgpO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuXG4gICAgdW5kb1JlZG9BY3Rpb25GdW5jdGlvbnMuY2hhbmdlTm9kZUxhYmVsID0gZnVuY3Rpb24gKHBhcmFtKSB7XG4gICAgICB2YXIgcmVzdWx0ID0ge1xuICAgICAgfTtcbiAgICAgIHZhciBub2RlcyA9IHBhcmFtLm5vZGVzO1xuICAgICAgcmVzdWx0Lm5vZGVzID0gbm9kZXM7XG4gICAgICByZXN1bHQubGFiZWwgPSB7fTtcblxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2Rlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgbm9kZSA9IG5vZGVzW2ldO1xuICAgICAgICByZXN1bHQubGFiZWxbbm9kZS5pZCgpXSA9IG5vZGUuX3ByaXZhdGUuZGF0YS5sYWJlbDtcbiAgICAgIH1cblxuICAgICAgaWYgKHBhcmFtLmZpcnN0VGltZSkge1xuICAgICAgICBub2Rlcy5kYXRhKCdsYWJlbCcsIHBhcmFtLmxhYmVsKTtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgdmFyIG5vZGUgPSBub2Rlc1tpXTtcbiAgICAgICAgICBub2RlLl9wcml2YXRlLmRhdGEubGFiZWwgPSBwYXJhbS5sYWJlbFtub2RlLmlkKCldO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfTtcblxuICAgIHVuZG9SZWRvQWN0aW9uRnVuY3Rpb25zLnVwZGF0ZUluZm9ib3hTdHlsZSA9IGZ1bmN0aW9uIChwYXJhbSkge1xuICAgICAgdmFyIHJlc3VsdCA9IHtcbiAgICAgIH07XG4gICAgICB2YXIgc3R5bGUgPSBwYXJhbS5ub2RlLmRhdGEoJ3N0YXRlc2FuZGluZm9zJylbcGFyYW0uaW5kZXhdLnN0eWxlO1xuICAgICAgcmVzdWx0Lm5ld1Byb3BzID0gJC5leHRlbmQoIHt9LCBzdHlsZSApO1xuICAgICAgcmVzdWx0Lm5vZGUgPSBwYXJhbS5ub2RlO1xuICAgICAgcmVzdWx0LmluZGV4ID0gcGFyYW0uaW5kZXg7XG5cbiAgICAgIGVsZW1lbnRVdGlsaXRpZXMudXBkYXRlSW5mb2JveFN0eWxlKCBwYXJhbS5ub2RlLCBwYXJhbS5pbmRleCwgcGFyYW0ubmV3UHJvcHMgKTtcblxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuXG4gICAgdW5kb1JlZG9BY3Rpb25GdW5jdGlvbnMudXBkYXRlSW5mb2JveE9iaiA9IGZ1bmN0aW9uIChwYXJhbSkge1xuICAgICAgdmFyIHJlc3VsdCA9IHtcbiAgICAgIH07XG4gICAgICB2YXIgb2JqID0gcGFyYW0ubm9kZS5kYXRhKCdzdGF0ZXNhbmRpbmZvcycpW3BhcmFtLmluZGV4XTtcbiAgICAgIHJlc3VsdC5uZXdQcm9wcyA9ICQuZXh0ZW5kKCB7fSwgb2JqICk7XG4gICAgICByZXN1bHQubm9kZSA9IHBhcmFtLm5vZGU7XG4gICAgICByZXN1bHQuaW5kZXggPSBwYXJhbS5pbmRleDtcblxuICAgICAgZWxlbWVudFV0aWxpdGllcy51cGRhdGVJbmZvYm94T2JqKCBwYXJhbS5ub2RlLCBwYXJhbS5pbmRleCwgcGFyYW0ubmV3UHJvcHMgKTtcblxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuXG4gICAgdW5kb1JlZG9BY3Rpb25GdW5jdGlvbnMuY2hhbmdlRGF0YSA9IGZ1bmN0aW9uIChwYXJhbSkge1xuICAgICAgdmFyIHJlc3VsdCA9IHtcbiAgICAgIH07XG4gICAgICB2YXIgZWxlcyA9IHBhcmFtLmVsZXM7XG4gICAgICByZXN1bHQubmFtZSA9IHBhcmFtLm5hbWU7XG4gICAgICByZXN1bHQudmFsdWVNYXAgPSB7fTtcbiAgICAgIHJlc3VsdC5lbGVzID0gZWxlcztcblxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBlbGUgPSBlbGVzW2ldO1xuICAgICAgICByZXN1bHQudmFsdWVNYXBbZWxlLmlkKCldID0gZWxlLmRhdGEocGFyYW0ubmFtZSk7XG4gICAgICB9XG5cbiAgICAgIGVsZW1lbnRVdGlsaXRpZXMuY2hhbmdlRGF0YShwYXJhbS5lbGVzLCBwYXJhbS5uYW1lLCBwYXJhbS52YWx1ZU1hcCk7XG5cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfTtcblxuICAgIHVuZG9SZWRvQWN0aW9uRnVuY3Rpb25zLnVwZGF0ZVNldEZpZWxkID0gZnVuY3Rpb24oIHBhcmFtICkge1xuICAgICAgdmFyIHVwZGF0ZXMgPSBlbGVtZW50VXRpbGl0aWVzLnVwZGF0ZVNldEZpZWxkKCBwYXJhbS5lbGUsIHBhcmFtLmZpZWxkTmFtZSwgcGFyYW0udG9EZWxldGUsIHBhcmFtLnRvQWRkLCBwYXJhbS5jYWxsYmFjayApO1xuXG4gICAgICB2YXIgcmVzdWx0ID0ge1xuICAgICAgICBlbGU6IHBhcmFtLmVsZSxcbiAgICAgICAgZmllbGROYW1lOiBwYXJhbS5maWVsZE5hbWUsXG4gICAgICAgIGNhbGxiYWNrOiBwYXJhbS5jYWxsYmFjayxcbiAgICAgICAgdG9EZWxldGU6IHVwZGF0ZXMuYWRkZWQsXG4gICAgICAgIHRvQWRkOiB1cGRhdGVzLmRlbGV0ZWRcbiAgICAgIH07XG5cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfTtcblxuICAgIHVuZG9SZWRvQWN0aW9uRnVuY3Rpb25zLmNoYW5nZUNzcyA9IGZ1bmN0aW9uIChwYXJhbSkge1xuICAgICAgdmFyIHJlc3VsdCA9IHtcbiAgICAgIH07XG4gICAgICB2YXIgZWxlcyA9IHBhcmFtLmVsZXM7XG4gICAgICByZXN1bHQubmFtZSA9IHBhcmFtLm5hbWU7XG4gICAgICByZXN1bHQudmFsdWVNYXAgPSB7fTtcbiAgICAgIHJlc3VsdC5lbGVzID0gZWxlcztcblxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBlbGUgPSBlbGVzW2ldO1xuICAgICAgICByZXN1bHQudmFsdWVNYXBbZWxlLmlkKCldID0gZWxlLmNzcyhwYXJhbS5uYW1lKTtcbiAgICAgIH1cblxuICAgICAgZWxlbWVudFV0aWxpdGllcy5jaGFuZ2VDc3MocGFyYW0uZWxlcywgcGFyYW0ubmFtZSwgcGFyYW0udmFsdWVNYXApO1xuXG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH07XG5cbiAgICB1bmRvUmVkb0FjdGlvbkZ1bmN0aW9ucy5jaGFuZ2VGb250UHJvcGVydGllcyA9IGZ1bmN0aW9uIChwYXJhbSkge1xuICAgICAgdmFyIHJlc3VsdCA9IHtcbiAgICAgIH07XG5cbiAgICAgIHZhciBlbGVzID0gcGFyYW0uZWxlcztcbiAgICAgIHJlc3VsdC5kYXRhID0ge307XG4gICAgICByZXN1bHQuZWxlcyA9IGVsZXM7XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZWxlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgZWxlID0gZWxlc1tpXTtcblxuICAgICAgICByZXN1bHQuZGF0YVtlbGUuaWQoKV0gPSB7fTtcblxuICAgICAgICB2YXIgZGF0YSA9IHBhcmFtLmZpcnN0VGltZSA/IHBhcmFtLmRhdGEgOiBwYXJhbS5kYXRhW2VsZS5pZCgpXTtcblxuICAgICAgICBmb3IgKHZhciBwcm9wIGluIGRhdGEpIHtcbiAgICAgICAgICByZXN1bHQuZGF0YVtlbGUuaWQoKV1bcHJvcF0gPSBlbGUuZGF0YShwcm9wKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAocGFyYW0uZmlyc3RUaW1lKSB7XG4gICAgICAgIGVsZW1lbnRVdGlsaXRpZXMuY2hhbmdlRm9udFByb3BlcnRpZXMoZWxlcywgZGF0YSk7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgdmFyIGVsZSA9IGVsZXNbaV07XG5cbiAgICAgICAgICBlbGVtZW50VXRpbGl0aWVzLmNoYW5nZUZvbnRQcm9wZXJ0aWVzKGVsZSwgZGF0YSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuXG4gICAgLypcbiAgICAgKiBTaG93IGVsZXMgYW5kIHBlcmZvcm0gbGF5b3V0LlxuICAgICAqL1xuICAgIHVuZG9SZWRvQWN0aW9uRnVuY3Rpb25zLnNob3dBbmRQZXJmb3JtTGF5b3V0ID0gZnVuY3Rpb24gKHBhcmFtKSB7XG4gICAgICB2YXIgZWxlcyA9IHBhcmFtLmVsZXM7XG5cbiAgICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICAgIHJlc3VsdC5wb3NpdGlvbnMgPSB1bmRvUmVkb0FjdGlvbkZ1bmN0aW9ucy5nZXROb2RlUG9zaXRpb25zKCk7XG5cbiAgICAgIGlmIChwYXJhbS5maXJzdFRpbWUpIHtcbiAgICAgICAgcmVzdWx0LmVsZXMgPSBlbGVtZW50VXRpbGl0aWVzLnNob3dBbmRQZXJmb3JtTGF5b3V0KHBhcmFtLmVsZXMsIHBhcmFtLmxheW91dHBhcmFtKTtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICByZXN1bHQuZWxlcyA9IGN5LnZpZXdVdGlsaXRpZXMoKS5zaG93KGVsZXMpOyAvLyBTaG93IGdpdmVuIGVsZXNcbiAgICAgICAgdW5kb1JlZG9BY3Rpb25GdW5jdGlvbnMucmV0dXJuVG9Qb3NpdGlvbnMocGFyYW0ucG9zaXRpb25zKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuXG4gICAgdW5kb1JlZG9BY3Rpb25GdW5jdGlvbnMudW5kb1Nob3dBbmRQZXJmb3JtTGF5b3V0ID0gZnVuY3Rpb24gKHBhcmFtKSB7XG4gICAgICB2YXIgZWxlcyA9IHBhcmFtLmVsZXM7XG5cbiAgICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICAgIHJlc3VsdC5wb3NpdGlvbnMgPSB1bmRvUmVkb0FjdGlvbkZ1bmN0aW9ucy5nZXROb2RlUG9zaXRpb25zKCk7XG4gICAgICByZXN1bHQuZWxlcyA9IGN5LnZpZXdVdGlsaXRpZXMoKS5oaWRlKGVsZXMpOyAvLyBIaWRlIHByZXZpb3VzbHkgdW5oaWRkZW4gZWxlcztcblxuICAgICAgdW5kb1JlZG9BY3Rpb25GdW5jdGlvbnMucmV0dXJuVG9Qb3NpdGlvbnMocGFyYW0ucG9zaXRpb25zKTtcblxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuXG4gICAgLypcbiAgICAgKiBIaWRlIGVsZXMgYW5kIHBlcmZvcm0gbGF5b3V0LlxuICAgICAqL1xuICAgIHVuZG9SZWRvQWN0aW9uRnVuY3Rpb25zLmhpZGVBbmRQZXJmb3JtTGF5b3V0ID0gZnVuY3Rpb24gKHBhcmFtKSB7XG4gICAgICAgIHZhciBlbGVzID0gcGFyYW0uZWxlcztcblxuICAgICAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgICAgIHJlc3VsdC5wb3NpdGlvbnMgPSB1bmRvUmVkb0FjdGlvbkZ1bmN0aW9ucy5nZXROb2RlUG9zaXRpb25zKCk7XG5cbiAgICAgICAgaWYgKHBhcmFtLmZpcnN0VGltZSkge1xuICAgICAgICAgICAgcmVzdWx0LmVsZXMgPSBlbGVtZW50VXRpbGl0aWVzLmhpZGVBbmRQZXJmb3JtTGF5b3V0KHBhcmFtLmVsZXMsIHBhcmFtLmxheW91dHBhcmFtKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJlc3VsdC5lbGVzID0gY3kudmlld1V0aWxpdGllcygpLmhpZGUoZWxlcyk7IC8vIEhpZGUgZ2l2ZW4gZWxlc1xuICAgICAgICAgICAgdW5kb1JlZG9BY3Rpb25GdW5jdGlvbnMucmV0dXJuVG9Qb3NpdGlvbnMocGFyYW0ucG9zaXRpb25zKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfTtcblxuICAgIHVuZG9SZWRvQWN0aW9uRnVuY3Rpb25zLnVuZG9IaWRlQW5kUGVyZm9ybUxheW91dCA9IGZ1bmN0aW9uIChwYXJhbSkge1xuICAgICAgICB2YXIgZWxlcyA9IHBhcmFtLmVsZXM7XG5cbiAgICAgICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgICAgICByZXN1bHQucG9zaXRpb25zID0gdW5kb1JlZG9BY3Rpb25GdW5jdGlvbnMuZ2V0Tm9kZVBvc2l0aW9ucygpO1xuICAgICAgICByZXN1bHQuZWxlcyA9IGN5LnZpZXdVdGlsaXRpZXMoKS5zaG93KGVsZXMpOyAvLyBTaG93IHByZXZpb3VzbHkgaGlkZGVuIGVsZXNcblxuICAgICAgICB1bmRvUmVkb0FjdGlvbkZ1bmN0aW9ucy5yZXR1cm5Ub1Bvc2l0aW9ucyhwYXJhbS5wb3NpdGlvbnMpO1xuXG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfTtcblxuICAgIC8qXG4gICAgICogRGVsZXRlIGVsZXMgYW5kIHBlcmZvcm0gbGF5b3V0LlxuICAgICAqL1xuICAgIHVuZG9SZWRvQWN0aW9uRnVuY3Rpb25zLmRlbGV0ZUFuZFBlcmZvcm1MYXlvdXQgPSBmdW5jdGlvbiAocGFyYW0pIHtcbiAgICAgIHZhciBlbGVzID0gcGFyYW0uZWxlcztcblxuICAgICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgICAgcmVzdWx0LnBvc2l0aW9ucyA9IHVuZG9SZWRvQWN0aW9uRnVuY3Rpb25zLmdldE5vZGVQb3NpdGlvbnMoKTtcblxuICAgICAgaWYgKHBhcmFtLmZpcnN0VGltZSkge1xuICAgICAgICAgIHJlc3VsdC5lbGVzID0gZWxlbWVudFV0aWxpdGllcy5kZWxldGVBbmRQZXJmb3JtTGF5b3V0KHBhcmFtLmVsZXMsIHBhcmFtLmxheW91dHBhcmFtKTtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICAgIHJlc3VsdC5lbGVzID0gZWxlcy5yZW1vdmUoKTtcbiAgICAgICAgICB1bmRvUmVkb0FjdGlvbkZ1bmN0aW9ucy5yZXR1cm5Ub1Bvc2l0aW9ucyhwYXJhbS5wb3NpdGlvbnMpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIHVuZG9SZWRvQWN0aW9uRnVuY3Rpb25zLnVuZG9EZWxldGVBbmRQZXJmb3JtTGF5b3V0ID0gZnVuY3Rpb24gKHBhcmFtKSB7XG4gICAgICB2YXIgZWxlcyA9IHBhcmFtLmVsZXM7XG5cbiAgICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICAgIHJlc3VsdC5wb3NpdGlvbnMgPSB1bmRvUmVkb0FjdGlvbkZ1bmN0aW9ucy5nZXROb2RlUG9zaXRpb25zKCk7XG4gICAgICByZXN1bHQuZWxlcyA9IGVsZW1lbnRVdGlsaXRpZXMucmVzdG9yZUVsZXMoZWxlcyk7IFxuXG4gICAgICB1bmRvUmVkb0FjdGlvbkZ1bmN0aW9ucy5yZXR1cm5Ub1Bvc2l0aW9ucyhwYXJhbS5wb3NpdGlvbnMpO1xuXG4gICAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gICAgLy8gU2VjdGlvbiBFbmRcbiAgICAvLyBnZW5lcmFsIGFjdGlvbiBmdW5jdGlvbnNcblxuICAgIC8vIFNlY3Rpb24gU3RhcnRcbiAgICAvLyBzYmduIGFjdGlvbiBmdW5jdGlvbnNcblxuICAgIHVuZG9SZWRvQWN0aW9uRnVuY3Rpb25zLmNoYW5nZVN0YXRlT3JJbmZvQm94ID0gZnVuY3Rpb24gKHBhcmFtKSB7XG4gICAgICB2YXIgcmVzdWx0ID0ge1xuICAgICAgfTtcbiAgICAgIHJlc3VsdC50eXBlID0gcGFyYW0udHlwZTtcbiAgICAgIHJlc3VsdC5ub2RlcyA9IHBhcmFtLm5vZGVzO1xuICAgICAgcmVzdWx0LmluZGV4ID0gcGFyYW0uaW5kZXg7XG4gICAgICB2YXIgZGF0YSA9IHBhcmFtLmRhdGE7XG5cbiAgICAgIHZhciB0ZW1wRGF0YSA9IGVsZW1lbnRVdGlsaXRpZXMuc2F2ZVVuaXRzKHBhcmFtLm5vZGVzKTtcbiAgICAgIHJlc3VsdC52YWx1ZSA9IGVsZW1lbnRVdGlsaXRpZXMuY2hhbmdlU3RhdGVPckluZm9Cb3gocGFyYW0ubm9kZXMsIHBhcmFtLmluZGV4LCBwYXJhbS52YWx1ZSwgcGFyYW0udHlwZSk7XG4gICAgICAvKiB2YXIgbG9jYXRpb25zID0gZWxlbWVudFV0aWxpdGllcy5jaGVja0ZpdChwYXJhbS5ub2Rlcyk7XG4gICAgICBpZiAobG9jYXRpb25zICE9PSB1bmRlZmluZWQgJiYgbG9jYXRpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgZWxlbWVudFV0aWxpdGllcy5maXRVbml0cyhwYXJhbS5ub2RlcywgbG9jYXRpb25zKTtcbiAgICAgIH0gKi9cbiAgICAgIGlmIChkYXRhICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgZWxlbWVudFV0aWxpdGllcy5yZXN0b3JlVW5pdHMocGFyYW0ubm9kZXMsIGRhdGEpO1xuICAgICAgfVxuXG4gICAgICBjeS5mb3JjZVJlbmRlcigpO1xuICAgICAgcmVzdWx0LmRhdGEgPSB0ZW1wRGF0YTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfTtcblxuICAgIHVuZG9SZWRvQWN0aW9uRnVuY3Rpb25zLmFkZFN0YXRlT3JJbmZvQm94ID0gZnVuY3Rpb24gKHBhcmFtKSB7XG4gICAgICB2YXIgb2JqID0gcGFyYW0ub2JqO1xuICAgICAgdmFyIG5vZGVzID0gcGFyYW0ubm9kZXM7XG4gICAgICB2YXIgZGF0YSA9IHBhcmFtLmRhdGE7XG5cbiAgICAgIHZhciB0ZW1wRGF0YSA9IGVsZW1lbnRVdGlsaXRpZXMuc2F2ZVVuaXRzKG5vZGVzKTtcbiAgICAgIHZhciBsb2NhdGlvbk9iaiA9IGVsZW1lbnRVdGlsaXRpZXMuYWRkU3RhdGVPckluZm9Cb3gobm9kZXMsIG9iaik7XG4gICAgIC8qICB2YXIgbG9jYXRpb25zID0gZWxlbWVudFV0aWxpdGllcy5jaGVja0ZpdChub2Rlcyk7XG4gICAgICBpZiAobG9jYXRpb25zICE9PSB1bmRlZmluZWQgJiYgbG9jYXRpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgZWxlbWVudFV0aWxpdGllcy5maXRVbml0cyhub2RlcywgbG9jYXRpb25zKTtcbiAgICAgIH0gKi9cbiAgICAgIGlmIChkYXRhICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgZWxlbWVudFV0aWxpdGllcy5yZXN0b3JlVW5pdHMobm9kZXMsIGRhdGEpO1xuICAgICAgfVxuXG4gICAgICBjeS5mb3JjZVJlbmRlcigpO1xuXG4gICAgICB2YXIgcmVzdWx0ID0ge1xuICAgICAgICBub2Rlczogbm9kZXMsXG4gICAgICAgIGxvY2F0aW9uT2JqOiBsb2NhdGlvbk9iaixcbiAgICAgICAgb2JqOiBvYmosXG4gICAgICAgIGRhdGE6IHRlbXBEYXRhXG4gICAgICB9O1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuXG4gICAgdW5kb1JlZG9BY3Rpb25GdW5jdGlvbnMucmVtb3ZlU3RhdGVPckluZm9Cb3ggPSBmdW5jdGlvbiAocGFyYW0pIHtcbiAgICAgIHZhciBsb2NhdGlvbk9iaiA9IHBhcmFtLmxvY2F0aW9uT2JqO1xuICAgICAgdmFyIG5vZGVzID0gcGFyYW0ubm9kZXM7XG4gICAgICB2YXIgZGF0YSA9IHBhcmFtLmRhdGE7XG5cbiAgICAgIHZhciB0ZW1wRGF0YSA9IGVsZW1lbnRVdGlsaXRpZXMuc2F2ZVVuaXRzKG5vZGVzKTtcbiAgICAgIHZhciBvYmogPSBlbGVtZW50VXRpbGl0aWVzLnJlbW92ZVN0YXRlT3JJbmZvQm94KG5vZGVzLCBsb2NhdGlvbk9iaik7XG4gICAgICBpZiAoZGF0YSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGVsZW1lbnRVdGlsaXRpZXMucmVzdG9yZVVuaXRzKG5vZGVzLCBkYXRhKTtcbiAgICAgIH1cblxuICAgICAgY3kuZm9yY2VSZW5kZXIoKTtcblxuICAgICAgdmFyIHJlc3VsdCA9IHtcbiAgICAgICAgbm9kZXM6IG5vZGVzLFxuICAgICAgICBvYmo6IG9iaixcbiAgICAgICAgZGF0YTogdGVtcERhdGFcbiAgICAgIH07XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH07XG5cbiAgICB1bmRvUmVkb0FjdGlvbkZ1bmN0aW9ucy5maXRVbml0cyA9IGZ1bmN0aW9uIChwYXJhbSkge1xuICAgICAgdmFyIG5vZGUgPSBwYXJhbS5ub2RlO1xuICAgICAgdmFyIGxvY2F0aW9ucyA9IHBhcmFtLmxvY2F0aW9ucztcbiAgICAgIHZhciBvYmogPSBlbGVtZW50VXRpbGl0aWVzLmZpdFVuaXRzKG5vZGUsIGxvY2F0aW9ucyk7XG5cbiAgICAgIGN5LmZvcmNlUmVuZGVyKCk7XG5cbiAgICAgIHZhciByZXN1bHQgPSB7XG4gICAgICAgIG5vZGU6IG5vZGUsXG4gICAgICAgIG9iajogb2JqLFxuICAgICAgICBsb2NhdGlvbnM6IGxvY2F0aW9uc1xuICAgICAgfTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfTtcblxuICAgIHVuZG9SZWRvQWN0aW9uRnVuY3Rpb25zLnJlc3RvcmVVbml0cyA9IGZ1bmN0aW9uIChwYXJhbSkge1xuICAgICAgdmFyIG5vZGUgPSBwYXJhbS5ub2RlO1xuICAgICAgdmFyIGxvY2F0aW9ucyA9IHBhcmFtLmxvY2F0aW9ucztcbiAgICAgIHZhciBvYmogPSBwYXJhbS5vYmo7XG4gICAgICB2YXIgaW5kZXggPSAwO1xuICAgICAgbm9kZS5kYXRhKCdzdGF0ZXNhbmRpbmZvcycpLmZvckVhY2goIGZ1bmN0aW9uIChlbGUpIHtcbiAgICAgICAgdmFyIGJveCA9IG9ialtpbmRleCsrXTtcbiAgICAgICAgZWxlLmJib3gueCA9IGJveC54O1xuICAgICAgICBlbGUuYmJveC55ID0gYm94Lnk7XG4gICAgICAgIHZhciBvbGRTaWRlID0gZWxlLmFuY2hvclNpZGU7XG4gICAgICAgIGVsZS5hbmNob3JTaWRlID0gYm94LmFuY2hvclNpZGU7XG4gICAgICAgIGVsZW1lbnRVdGlsaXRpZXMubW9kaWZ5VW5pdHMobm9kZSwgZWxlLCBvbGRTaWRlKTtcbiAgICAgIH0pO1xuXG4gICAgICBjeS5mb3JjZVJlbmRlcigpO1xuXG4gICAgICB2YXIgcmVzdWx0ID0ge1xuICAgICAgICBub2RlOiBub2RlLFxuICAgICAgICBsb2NhdGlvbnM6IGxvY2F0aW9uc1xuICAgICAgfTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfTtcblxuICAgIHVuZG9SZWRvQWN0aW9uRnVuY3Rpb25zLnNldE11bHRpbWVyU3RhdHVzID0gZnVuY3Rpb24gKHBhcmFtKSB7XG4gICAgICB2YXIgZmlyc3RUaW1lID0gcGFyYW0uZmlyc3RUaW1lO1xuICAgICAgdmFyIG5vZGVzID0gcGFyYW0ubm9kZXM7XG4gICAgICB2YXIgc3RhdHVzID0gcGFyYW0uc3RhdHVzO1xuICAgICAgdmFyIHJlc3VsdFN0YXR1cyA9IHt9O1xuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBub2RlID0gbm9kZXNbaV07XG4gICAgICAgIHZhciBpc011bHRpbWVyID0gbm9kZS5kYXRhKCdjbGFzcycpLmVuZHNXaXRoKCcgbXVsdGltZXInKTtcblxuICAgICAgICByZXN1bHRTdGF0dXNbbm9kZS5pZCgpXSA9IGlzTXVsdGltZXI7XG4gICAgICB9XG5cbiAgICAgIC8vIElmIHRoaXMgaXMgdGhlIGZpcnN0IHRpbWUgY2hhbmdlIHRoZSBzdGF0dXMgb2YgYWxsIG5vZGVzIGF0IG9uY2UuXG4gICAgICAvLyBJZiBub3QgY2hhbmdlIHN0YXR1cyBvZiBlYWNoIHNlcGVyYXRlbHkgdG8gdGhlIHZhbHVlcyBtYXBwZWQgdG8gdGhlaXIgaWQuXG4gICAgICBpZiAoZmlyc3RUaW1lKSB7XG4gICAgICAgIGVsZW1lbnRVdGlsaXRpZXMuc2V0TXVsdGltZXJTdGF0dXMobm9kZXMsIHN0YXR1cyk7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2Rlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIHZhciBub2RlID0gbm9kZXNbaV07XG4gICAgICAgICAgZWxlbWVudFV0aWxpdGllcy5zZXRNdWx0aW1lclN0YXR1cyhub2RlLCBzdGF0dXNbbm9kZS5pZCgpXSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgIC8vICBpZiAoIWZpcnN0VGltZSAmJiBfLmlzRXF1YWwobm9kZXMsIGN5Lm5vZGVzKCc6c2VsZWN0ZWQnKSkpIHtcbiAgICAvLyAgICAkKCcjaW5zcGVjdG9yLWlzLW11bHRpbWVyJykuYXR0cihcImNoZWNrZWRcIiwgISQoJyNpbnNwZWN0b3ItaXMtbXVsdGltZXInKS5hdHRyKFwiY2hlY2tlZFwiKSk7XG4gICAgLy8gIH1cblxuICAgICAgdmFyIHJlc3VsdCA9IHtcbiAgICAgICAgc3RhdHVzOiByZXN1bHRTdGF0dXMsXG4gICAgICAgIG5vZGVzOiBub2Rlc1xuICAgICAgfTtcblxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuXG4gICAgdW5kb1JlZG9BY3Rpb25GdW5jdGlvbnMuc2V0Q2xvbmVNYXJrZXJTdGF0dXMgPSBmdW5jdGlvbiAocGFyYW0pIHtcbiAgICAgIHZhciBub2RlcyA9IHBhcmFtLm5vZGVzO1xuICAgICAgdmFyIHN0YXR1cyA9IHBhcmFtLnN0YXR1cztcbiAgICAgIHZhciBmaXJzdFRpbWUgPSBwYXJhbS5maXJzdFRpbWU7XG4gICAgICB2YXIgcmVzdWx0U3RhdHVzID0ge307XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIG5vZGUgPSBub2Rlc1tpXTtcbiAgICAgICAgcmVzdWx0U3RhdHVzW25vZGUuaWQoKV0gPSBub2RlLmRhdGEoJ2Nsb25lbWFya2VyJyk7XG4gICAgICAgIHZhciBjdXJyZW50U3RhdHVzID0gZmlyc3RUaW1lID8gc3RhdHVzIDogc3RhdHVzW25vZGUuaWQoKV07XG4gICAgICAgIGVsZW1lbnRVdGlsaXRpZXMuc2V0Q2xvbmVNYXJrZXJTdGF0dXMobm9kZSwgY3VycmVudFN0YXR1cyk7XG4gICAgICB9XG5cbiAgICAvLyAgaWYgKCFmaXJzdFRpbWUgJiYgXy5pc0VxdWFsKG5vZGVzLCBjeS5ub2RlcygnOnNlbGVjdGVkJykpKSB7XG4gICAgLy8gICAgJCgnI2luc3BlY3Rvci1pcy1jbG9uZS1tYXJrZXInKS5hdHRyKFwiY2hlY2tlZFwiLCAhJCgnI2luc3BlY3Rvci1pcy1jbG9uZS1tYXJrZXInKS5hdHRyKFwiY2hlY2tlZFwiKSk7XG4gICAgLy8gIH1cblxuICAgICAgdmFyIHJlc3VsdCA9IHtcbiAgICAgICAgc3RhdHVzOiByZXN1bHRTdGF0dXMsXG4gICAgICAgIG5vZGVzOiBub2Rlc1xuICAgICAgfTtcblxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuXG4gICAgLy8gcGFyYW06IHtjbGFzczogc2JnbmNsYXNzLCBuYW1lOiBwcm9wZXJ0eU5hbWUsIHZhbHVlOiB2YWx1ZX1cbiAgICB1bmRvUmVkb0FjdGlvbkZ1bmN0aW9ucy5zZXREZWZhdWx0UHJvcGVydHkgPSBmdW5jdGlvbiAocGFyYW0pIHtcbiAgICAgIHZhciBzYmduY2xhc3MgPSBwYXJhbS5jbGFzcztcbiAgICAgIHZhciBuYW1lID0gcGFyYW0ubmFtZTtcbiAgICAgIHZhciB2YWx1ZSA9IHBhcmFtLnZhbHVlO1xuICAgICAgdmFyIGNsYXNzRGVmYXVsdHMgPSBlbGVtZW50VXRpbGl0aWVzLmdldERlZmF1bHRQcm9wZXJ0aWVzKHNiZ25jbGFzcyk7XG4gICAgICB2YXIgcmVzdWx0ID0ge1xuICAgICAgICBjbGFzczogc2JnbmNsYXNzLFxuICAgICAgICBuYW1lOiBuYW1lLFxuICAgICAgICB2YWx1ZTogY2xhc3NEZWZhdWx0cy5oYXNPd25Qcm9wZXJ0eShuYW1lKSA/IGNsYXNzRGVmYXVsdHNbbmFtZV0gOiB1bmRlZmluZWRcbiAgICAgIH07XG5cbiAgICAgIHZhciBwcm9wTWFwID0ge307XG4gICAgICBwcm9wTWFwWyBuYW1lIF0gPSB2YWx1ZTtcblxuICAgICAgZWxlbWVudFV0aWxpdGllcy5zZXREZWZhdWx0UHJvcGVydGllcyggc2JnbmNsYXNzLCBwcm9wTWFwICk7XG5cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfTtcblxuICAgIHVuZG9SZWRvQWN0aW9uRnVuY3Rpb25zLmFkZEJhY2tncm91bmRJbWFnZSA9IGZ1bmN0aW9uIChwYXJhbSkge1xuICAgICAgdmFyIGJnT2JqID0gcGFyYW0uYmdPYmo7XG4gICAgICB2YXIgbm9kZXMgPSBwYXJhbS5ub2RlcztcbiAgICAgIHZhciB1cGRhdGVJbmZvID0gcGFyYW0udXBkYXRlSW5mbztcbiAgICAgIHZhciBwcm9tcHRJbnZhbGlkSW1hZ2UgPSBwYXJhbS5wcm9tcHRJbnZhbGlkSW1hZ2U7XG4gICAgICB2YXIgdmFsaWRhdGVVUkwgPSBwYXJhbS52YWxpZGF0ZVVSTDtcblxuICAgICAgZWxlbWVudFV0aWxpdGllcy5hZGRCYWNrZ3JvdW5kSW1hZ2Uobm9kZXMsIGJnT2JqLCB1cGRhdGVJbmZvLCBwcm9tcHRJbnZhbGlkSW1hZ2UsIHZhbGlkYXRlVVJMKTtcblxuICAgICAgY3kuZm9yY2VSZW5kZXIoKTtcblxuICAgICAgdmFyIHJlc3VsdCA9IHtcbiAgICAgICAgbm9kZXM6IG5vZGVzLFxuICAgICAgICBiZ09iajogYmdPYmosXG4gICAgICAgIHVwZGF0ZUluZm86IHVwZGF0ZUluZm8sXG4gICAgICAgIHByb21wdEludmFsaWRJbWFnZTogcHJvbXB0SW52YWxpZEltYWdlLFxuICAgICAgICB2YWxpZGF0ZVVSTDogdmFsaWRhdGVVUkxcbiAgICAgIH07XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH07XG5cbiAgICB1bmRvUmVkb0FjdGlvbkZ1bmN0aW9ucy5yZW1vdmVCYWNrZ3JvdW5kSW1hZ2UgPSBmdW5jdGlvbiAocGFyYW0pIHtcbiAgICAgIHZhciBiZ09iaiA9IHBhcmFtLmJnT2JqO1xuICAgICAgdmFyIG5vZGVzID0gcGFyYW0ubm9kZXM7XG5cbiAgICAgIGVsZW1lbnRVdGlsaXRpZXMucmVtb3ZlQmFja2dyb3VuZEltYWdlKG5vZGVzLCBiZ09iaik7XG5cbiAgICAgIGN5LmZvcmNlUmVuZGVyKCk7XG5cbiAgICAgIHZhciByZXN1bHQgPSB7XG4gICAgICAgIG5vZGVzOiBub2RlcyxcbiAgICAgICAgYmdPYmo6IGJnT2JqXG4gICAgICB9O1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuXG4gICAgdW5kb1JlZG9BY3Rpb25GdW5jdGlvbnMudXBkYXRlQmFja2dyb3VuZEltYWdlID0gZnVuY3Rpb24gKHBhcmFtKSB7XG4gICAgICB2YXIgYmdPYmogPSBwYXJhbS5iZ09iajtcbiAgICAgIHZhciBub2RlcyA9IHBhcmFtLm5vZGVzO1xuXG4gICAgICB2YXIgb2xkQmdPYmogPSBlbGVtZW50VXRpbGl0aWVzLnVwZGF0ZUJhY2tncm91bmRJbWFnZShub2RlcywgYmdPYmopO1xuXG4gICAgICBjeS5mb3JjZVJlbmRlcigpO1xuXG4gICAgICB2YXIgcmVzdWx0ID0ge1xuICAgICAgICBub2Rlczogbm9kZXMsXG4gICAgICAgIGJnT2JqOiBvbGRCZ09ialxuICAgICAgfTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfTtcblxuICAgIHVuZG9SZWRvQWN0aW9uRnVuY3Rpb25zLmNoYW5nZUJhY2tncm91bmRJbWFnZSA9IGZ1bmN0aW9uIChwYXJhbSkge1xuICAgICAgdmFyIG9sZEltZyA9IHBhcmFtLm9sZEltZztcbiAgICAgIHZhciBuZXdJbWcgPSBwYXJhbS5uZXdJbWc7XG4gICAgICB2YXIgbm9kZXMgPSBwYXJhbS5ub2RlcztcbiAgICAgIHZhciBmaXJzdFRpbWUgPSBwYXJhbS5maXJzdFRpbWU7XG4gICAgICB2YXIgdXBkYXRlSW5mbyA9IHBhcmFtLnVwZGF0ZUluZm87XG4gICAgICB2YXIgcHJvbXB0SW52YWxpZEltYWdlID0gcGFyYW0ucHJvbXB0SW52YWxpZEltYWdlO1xuICAgICAgdmFyIHZhbGlkYXRlVVJMPSBwYXJhbS52YWxpZGF0ZVVSTDtcblxuICAgICAgdmFyIHJlc3VsdCA9IGVsZW1lbnRVdGlsaXRpZXMuY2hhbmdlQmFja2dyb3VuZEltYWdlKG5vZGVzLCBvbGRJbWcsIG5ld0ltZywgZmlyc3RUaW1lLCB1cGRhdGVJbmZvLCBwcm9tcHRJbnZhbGlkSW1hZ2UsIHZhbGlkYXRlVVJMKTtcblxuICAgICAgY3kuZm9yY2VSZW5kZXIoKTtcblxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuXG4gICAgLy8gU2VjdGlvbiBFbmRcbiAgICAvLyBzYmduIGFjdGlvbiBmdW5jdGlvbnNcbiAgICB1bmRvUmVkb0FjdGlvbkZ1bmN0aW9ucy5jb252ZXJ0SW50b1JldmVyc2libGVSZWFjdGlvbiA9IGZ1bmN0aW9uIChwYXJhbSkge1xuICAgICAgbGV0IGNvbGxlY3Rpb24gPSBjeS5jb2xsZWN0aW9uKCk7XG4gICAgICBsZXQgbWFwVHlwZSA9IGVsZW1lbnRVdGlsaXRpZXMuZ2V0TWFwVHlwZSgpO1xuICAgICAgZWxlbWVudFV0aWxpdGllcy5zZXRNYXBUeXBlKHBhcmFtLm1hcFR5cGUpO1xuICAgICAgJCgnI21hcC10eXBlJykudmFsKHBhcmFtLm1hcFR5cGUpO1xuXG4gICAgICBwYXJhbS5jb2xsZWN0aW9uLmZvckVhY2goZnVuY3Rpb24oZWRnZSkge1xuICAgICAgICB2YXIgc291cmNlTm9kZSA9IGVkZ2UuX3ByaXZhdGUuZGF0YS5zb3VyY2U7XG4gICAgICAgIHZhciB0YXJnZXROb2RlID0gZWRnZS5fcHJpdmF0ZS5kYXRhLnRhcmdldDtcblxuICAgICAgICBlZGdlLm1vdmUoe3NvdXJjZTogdGFyZ2V0Tm9kZSwgdGFyZ2V0OiBzb3VyY2VOb2RlfSk7XG5cbiAgICAgICAgbGV0IGNvbnZlcnRlZEVkZ2UgPSBjeS5nZXRFbGVtZW50QnlJZChlZGdlLmlkKCkpO1xuXG4gICAgICAgIGlmKGNvbnZlcnRlZEVkZ2UuZGF0YShcImN5ZWRnZWJlbmRlZGl0aW5nRGlzdGFuY2VzXCIpKXtcbiAgICAgICAgICBsZXQgZGlzdGFuY2UgPSBjb252ZXJ0ZWRFZGdlLmRhdGEoXCJjeWVkZ2ViZW5kZWRpdGluZ0Rpc3RhbmNlc1wiKTtcbiAgICAgICAgICBkaXN0YW5jZSA9IGRpc3RhbmNlLm1hcChmdW5jdGlvbihlbGVtZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gLTEqZWxlbWVudDtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBjb252ZXJ0ZWRFZGdlLmRhdGEoXCJjeWVkZ2ViZW5kZWRpdGluZ0Rpc3RhbmNlc1wiLCBkaXN0YW5jZS5yZXZlcnNlKCkpO1xuXG4gICAgICAgICAgbGV0IHdlaWdodCA9IGNvbnZlcnRlZEVkZ2UuZGF0YShcImN5ZWRnZWJlbmRlZGl0aW5nV2VpZ2h0c1wiKTtcbiAgICAgICAgICB3ZWlnaHQgPSB3ZWlnaHQubWFwKGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgICAgICAgICAgIHJldHVybiAxLWVsZW1lbnQ7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgY29udmVydGVkRWRnZS5kYXRhKFwiY3llZGdlYmVuZGVkaXRpbmdXZWlnaHRzXCIsIHdlaWdodC5yZXZlcnNlKCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYoY29udmVydGVkRWRnZS5kYXRhKFwiY3llZGdlY29udHJvbGVkaXRpbmdEaXN0YW5jZXNcIikpe1xuICAgICAgICAgIGxldCBkaXN0YW5jZSA9IGNvbnZlcnRlZEVkZ2UuZGF0YShcImN5ZWRnZWNvbnRyb2xlZGl0aW5nRGlzdGFuY2VzXCIpO1xuICAgICAgICAgIGRpc3RhbmNlID0gZGlzdGFuY2UubWFwKGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgICAgICAgICAgIHJldHVybiAtMSplbGVtZW50O1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIGNvbnZlcnRlZEVkZ2UuZGF0YShcImN5ZWRnZWNvbnRyb2xlZGl0aW5nRGlzdGFuY2VzXCIsIGRpc3RhbmNlLnJldmVyc2UoKSk7XG5cbiAgICAgICAgICBsZXQgd2VpZ2h0ID0gY29udmVydGVkRWRnZS5kYXRhKFwiY3llZGdlY29udHJvbGVkaXRpbmdXZWlndGhzXCIpO1xuICAgICAgICAgIHdlaWdodCA9IHdlaWdodC5tYXAoZnVuY3Rpb24oZWxlbWVudCkge1xuICAgICAgICAgICAgcmV0dXJuIDEtZWxlbWVudDtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBjb252ZXJ0ZWRFZGdlLmRhdGEoXCJjeWVkZ2Vjb250cm9sZWRpdGluZ1dlaWd0aHNcIiwgd2VpZ2h0LnJldmVyc2UoKSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29udmVydGVkRWRnZS5fcHJpdmF0ZS5kYXRhLmNsYXNzID09PSBcImNvbnN1bXB0aW9uXCIpIHtcbiAgICAgICAgICBjb252ZXJ0ZWRFZGdlLl9wcml2YXRlLmRhdGEuY2xhc3MgPSBcInByb2R1Y3Rpb25cIjtcbiAgICAgICAgICBjb252ZXJ0ZWRFZGdlLl9wcml2YXRlLmRhdGEucG9ydHNvdXJjZSA9IHRhcmdldE5vZGUgKyBcIi4xXCI7XG4gICAgICAgICAgY29udmVydGVkRWRnZS5fcHJpdmF0ZS5kYXRhLnBvcnR0YXJnZXQgPSBzb3VyY2VOb2RlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGNvbnZlcnRlZEVkZ2UuX3ByaXZhdGUuZGF0YS5jbGFzcyA9PT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgICAgICAgICBjb252ZXJ0ZWRFZGdlLl9wcml2YXRlLmRhdGEuY2xhc3MgPSBcImNvbnN1bXB0aW9uXCI7XG4gICAgICAgICAgY29udmVydGVkRWRnZS5fcHJpdmF0ZS5kYXRhLnBvcnRzb3VyY2UgPSB0YXJnZXROb2RlO1xuICAgICAgICAgIGNvbnZlcnRlZEVkZ2UuX3ByaXZhdGUuZGF0YS5wb3J0dGFyZ2V0ID0gc291cmNlTm9kZSArIFwiLjFcIjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbGxlY3Rpb24gPSBjb2xsZWN0aW9uLmFkZChjb252ZXJ0ZWRFZGdlKTtcbiAgICAgICAgY3kuc3R5bGUoKS51cGRhdGUoKTtcbiAgICAgIH0pO1xuXG4gICAgICB2YXIgcmVzdWx0ID0ge1xuICAgICAgICBjb2xsZWN0aW9uOiBjb2xsZWN0aW9uLFxuICAgICAgICBtYXBUeXBlOiBtYXBUeXBlLFxuICAgICAgICBwcm9jZXNzSWQ6IHBhcmFtLnByb2Nlc3NJZFxuICAgICAgfTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgdW5kb1JlZG9BY3Rpb25GdW5jdGlvbnMubW92ZUVkZ2UgPSBmdW5jdGlvbiAocGFyYW0pIHtcbiAgICAgIHZhciByZXN1bHQgPSB7XG4gICAgICB9O1xuICAgICAgdmFyIGVkZ2UgPSBwYXJhbS5lZGdlO1xuICAgICAgcmVzdWx0Lm5hbWUgPSBwYXJhbS5uYW1lOyAgICAgIFxuICAgICBcblxuICAgICAgcmVzdWx0LnNvdXJjZSA9IGVkZ2Uuc291cmNlKCkuaWQoKTtcbiAgICAgIHJlc3VsdC50YXJnZXQgPSBlZGdlLnRhcmdldCgpLmlkKCk7ICAgICAgXG4gICAgICByZXN1bHQucG9ydHNvdXJjZSAgPWVkZ2UuZGF0YShcInBvcnRzb3VyY2VcIik7XG4gICAgICByZXN1bHQucG9ydHRhcmdldCA9IGVkZ2UuZGF0YShcInBvcnR0YXJnZXRcIik7XG4gICAgICBlbGVtZW50VXRpbGl0aWVzLmNoYW5nZURhdGEoZWRnZSwgJ3NvdXJjZScsIHBhcmFtLnNvdXJjZSk7XG4gICAgICBlbGVtZW50VXRpbGl0aWVzLmNoYW5nZURhdGEoZWRnZSwgJ3RhcmdldCcsIHBhcmFtLnRhcmdldCk7XG4gICAgICBlbGVtZW50VXRpbGl0aWVzLmNoYW5nZURhdGEoZWRnZSwgJ3BvcnRzb3VyY2UnLCBwYXJhbS5wb3J0c291cmNlKTtcbiAgICAgIGVsZW1lbnRVdGlsaXRpZXMuY2hhbmdlRGF0YShlZGdlLCAncG9ydHRhcmdldCcsIHBhcmFtLnBvcnR0YXJnZXQpOyBcbiAgICAgIGVkZ2UgPSBlZGdlLm1vdmUoe1xuICAgICAgICB0YXJnZXQ6IHBhcmFtLnRhcmdldCxcbiAgICAgICAgc291cmNlIDogcGFyYW0uc291cmNlXG4gICAgXG4gICAgIH0pO1xuXG4gICAgIHJlc3VsdC5lZGdlID0gZWRnZTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfTtcblxuICAgIHVuZG9SZWRvQWN0aW9uRnVuY3Rpb25zLmZpeEVycm9yID0gZnVuY3Rpb24ocGFyYW0pe1xuICAgICAgXG4gICAgICB2YXIgZXJyb3JDb2RlID0gcGFyYW0uZXJyb3JDb2RlO1xuICAgICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgICAgcmVzdWx0LmVycm9yQ29kZSA9IGVycm9yQ29kZTtcbiAgICAgIGlmKGVycm9yQ29kZSA9PSBcInBkMTAxMDFcIiB8fCBlcnJvckNvZGUgPT0gJ3BkMTAxMDInKXtcblxuICAgICAgICByZXN1bHQuZWRnZSA9IGVsZW1lbnRVdGlsaXRpZXMucmV2ZXJzZUVkZ2UocGFyYW0uZWRnZSk7XG5cbiAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9ZWxzZSBpZihlcnJvckNvZGUgPT0gXCJwZDEwMTAzXCIgfHwgZXJyb3JDb2RlID09ICdwZDEwMTA3Jyl7XG5cbiAgICAgICBcbiAgICAgICAgXG4gICAgICAgIHBhcmFtLm5ld05vZGVzLmZvckVhY2goZnVuY3Rpb24obmV3Tm9kZSl7XG4gICAgICAgICBlbGVtZW50VXRpbGl0aWVzLmFkZE5vZGUobmV3Tm9kZS54LCBuZXdOb2RlLnksIG5ld05vZGUuY2xhc3MsIG5ld05vZGUuaWQsIHVuZGVmaW5lZCk7XG5cbiAgICAgICAgICBcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcGFyYW0ubmV3RWRnZXMuZm9yRWFjaChmdW5jdGlvbihuZXdFZGdlKXsgICAgICAgICAgXG4gICAgICAgICAgZWxlbWVudFV0aWxpdGllcy5hZGRFZGdlKG5ld0VkZ2Uuc291cmNlLG5ld0VkZ2UudGFyZ2V0LG5ld0VkZ2UuY2xhc3MpO1xuICAgICAgICB9KTtcblxuICAgICAgICBwYXJhbS5vbGRFZGdlcy5mb3JFYWNoKGZ1bmN0aW9uKG9sZEVkZ2Upe1xuICAgICAgICAgIGN5LmVsZW1lbnRzKCkudW5zZWxlY3QoKTtcbiAgICAgICAgICAvL3JldHVybiBcbiAgICAgICAgICBvbGRFZGdlLnJlbW92ZSgpO1xuICAgICAgICB9KTtcblxuICAgICAgICBwYXJhbS5ub2RlLnJlbW92ZSgpO1xuXG4gICAgICAgIHJldHVybiBwYXJhbTtcblxuICAgICAgfWVsc2UgaWYoZXJyb3JDb2RlID09IFwicGQxMDEwNVwiIHx8IGVycm9yQ29kZSA9PSAncGQxMDEwNicpe1xuICAgXG4gICAgICAgIHJlc3VsdC5lZGdlID0gZWxlbWVudFV0aWxpdGllcy5yZXZlcnNlRWRnZShwYXJhbS5lZGdlKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH1lbHNlIGlmKGVycm9yQ29kZSA9PSBcInBkMTAxNDBcIil7XG4gICAgICAgIHBhcmFtLm5vZGUucmVtb3ZlKCk7XG4gICAgICAgIHJldHVybiBwYXJhbTtcbiAgICAgIH1lbHNlIGlmKGVycm9yQ29kZSA9PSBcInBkMTAxMDRcIikge1xuICAgICAgICBcbiAgICAgICAgcGFyYW0uZWRnZXMuZm9yRWFjaChmdW5jdGlvbihlZGdlKXtcbiAgICAgICAgICBlZGdlLnJlbW92ZSgpO1xuICAgICAgICB9KTtcbiAgICAgICAgcGFyYW0ubm9kZXMuZm9yRWFjaChmdW5jdGlvbihub2RlKXtcbiAgICAgICAgICBub2RlLnJlbW92ZSgpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHBhcmFtO1xuICAgICAgfWVsc2UgaWYoZXJyb3JDb2RlID09IFwicGQxMDEwOFwiKXtcbiAgICAgICAgcGFyYW0uZWRnZXMuZm9yRWFjaChmdW5jdGlvbihlZGdlKXtcbiAgICAgICAgICBlZGdlLnJlbW92ZSgpO1xuICAgICAgICB9KTtcbiAgICAgICAgcGFyYW0ubm9kZXMuZm9yRWFjaChmdW5jdGlvbihub2RlKXtcbiAgICAgICAgICBub2RlLnJlbW92ZSgpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHBhcmFtO1xuICAgICAgfWVsc2UgaWYoZXJyb3JDb2RlID09IFwicGQxMDExMVwiKXtcbiAgICAgICAgcGFyYW0uZWRnZXMuZm9yRWFjaChmdW5jdGlvbihlZGdlKXtcbiAgICAgICAgICBlZGdlLnJlbW92ZSgpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHBhcmFtO1xuICAgICAgfWVsc2UgaWYoZXJyb3JDb2RlID09IFwicGQxMDEyNlwiKXtcbiAgICAgICAgcGFyYW0uZWRnZXMuZm9yRWFjaChmdW5jdGlvbihlZGdlKXtcbiAgICAgICAgICBlZGdlLnJlbW92ZSgpO1xuICAgICAgICB9KTtcbiAgICAgICAgcGFyYW0ubm9kZXMuZm9yRWFjaChmdW5jdGlvbihub2RlKXtcbiAgICAgICAgICBub2RlLnJlbW92ZSgpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHBhcmFtO1xuICAgICAgfWVsc2UgaWYoZXJyb3JDb2RlID09IFwicGQxMDEwOVwiIHx8IGVycm9yQ29kZSA9PSBcInBkMTAxMjRcIikge1xuICAgICAgICBcbiAgICAgICAgcmVzdWx0Lm5ld1NvdXJjZSA9IHBhcmFtLmVkZ2UuZGF0YSgpLnNvdXJjZTtcbiAgICAgICAgcmVzdWx0Lm5ld1RhcmdldCA9IHBhcmFtLmVkZ2UuZGF0YSgpLnRhcmdldDtcbiAgICAgICAgcmVzdWx0LnBvcnRzb3VyY2UgPSBwYXJhbS5lZGdlLmRhdGEoKS5wb3J0c291cmNlO1xuICAgICAgICB2YXIgY2xvbmVkRWRnZSA9IHBhcmFtLmVkZ2UuY2xvbmUoKTtcbiAgICAgICBcbiAgICAgICAgdmFyIGVkZ2VQYXJhbXMgPSB7Y2xhc3MgOiBjbG9uZWRFZGdlLmRhdGEoKS5jbGFzcywgbGFuZ3VhZ2UgOmNsb25lZEVkZ2UuZGF0YSgpLmxhbmd1YWdlfTtcbiAgICAgICAgY2xvbmVkRWRnZS5kYXRhKCkuc291cmNlID0gcGFyYW0ubmV3U291cmNlO1xuICAgICAgICBjbG9uZWRFZGdlLmRhdGEoKS50YXJnZXQgPSBwYXJhbS5uZXdUYXJnZXQ7XG4gICAgICAgIGN5LnJlbW92ZShwYXJhbS5lZGdlKTtcbiAgICAgICAgcmVzdWx0LmVkZ2UgPSBlbGVtZW50VXRpbGl0aWVzLmFkZEVkZ2UocGFyYW0ubmV3U291cmNlLHBhcmFtLm5ld1RhcmdldCxlZGdlUGFyYW1zLCBjbG9uZWRFZGdlLmRhdGEoKS5pZCk7ICAgICAgXG4gICAgICAgIHJldHVybiByZXN1bHQ7XG5cbiAgICAgIH1lbHNlIGlmKGVycm9yQ29kZSA9PSBcInBkMTAxMTJcIikgeyAgICBcbiAgICAgICAgXG4gICAgICAgIHBhcmFtLmNhbGxiYWNrID0gZWxlbWVudFV0aWxpdGllcy5tYWludGFpblBvaW50ZXI7ICBcbiAgICAgICAgLy8gSWYgdGhpcyBpcyBmaXJzdCB0aW1lIHdlIHNob3VsZCBtb3ZlIHRoZSBub2RlIHRvIGl0cyBuZXcgcGFyZW50IGFuZCByZWxvY2F0ZSBpdCBieSBnaXZlbiBwb3NEaWZmIHBhcmFtc1xuICAgICAgICAvLyBlbHNlIHdlIHNob3VsZCByZW1vdmUgdGhlIG1vdmVkIGVsZXMgYW5kIHJlc3RvcmUgdGhlIGVsZXMgdG8gcmVzdG9yZVxuICAgICAgICBpZiAocGFyYW0uZmlyc3RUaW1lKSB7XG4gICAgICAgICAgdmFyIG5ld1BhcmVudElkID0gcGFyYW0ucGFyZW50RGF0YSA9PSB1bmRlZmluZWQgPyBudWxsIDogcGFyYW0ucGFyZW50RGF0YTtcbiAgICAgICAgICAvLyBUaGVzZSBlbGVzIGluY2x1ZGVzIHRoZSBub2RlcyBhbmQgdGhlaXIgY29ubmVjdGVkIGVkZ2VzIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gbm9kZXMubW92ZSgpLlxuICAgICAgICAgIC8vIFRoZXkgc2hvdWxkIGJlIHJlc3RvcmVkIGluIHVuZG9cbiAgICAgICAgICB2YXIgd2l0aERlc2NlbmRhbnQgPSBwYXJhbS5ub2Rlcy51bmlvbihwYXJhbS5ub2Rlcy5kZXNjZW5kYW50cygpKTtcbiAgICAgICAgICByZXN1bHQuZWxlc1RvUmVzdG9yZSA9IHdpdGhEZXNjZW5kYW50LnVuaW9uKHdpdGhEZXNjZW5kYW50LmNvbm5lY3RlZEVkZ2VzKCkpO1xuICAgICAgICAgIC8vIFRoZXNlIGFyZSB0aGUgZWxlcyBjcmVhdGVkIGJ5IG5vZGVzLm1vdmUoKSwgdGhleSBzaG91bGQgYmUgcmVtb3ZlZCBpbiB1bmRvLlxuICAgICAgICAgIHJlc3VsdC5tb3ZlZEVsZXMgPSBwYXJhbS5ub2Rlcy5tb3ZlKHtcInBhcmVudFwiOiBuZXdQYXJlbnRJZH0pO1xuXG4gICAgICAgICAgdmFyIHBvc0RpZmYgPSB7XG4gICAgICAgICAgICB4OiBwYXJhbS5wb3NEaWZmWCxcbiAgICAgICAgICAgIHk6IHBhcmFtLnBvc0RpZmZZXG4gICAgICAgICAgfTtcblxuICAgICAgICAgIGVsZW1lbnRVdGlsaXRpZXMubW92ZU5vZGVzKHBvc0RpZmYsIHJlc3VsdC5tb3ZlZEVsZXMpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIHJlc3VsdC5lbGVzVG9SZXN0b3JlID0gcGFyYW0ubW92ZWRFbGVzLnJlbW92ZSgpO1xuICAgICAgICAgIHJlc3VsdC5tb3ZlZEVsZXMgPSBwYXJhbS5lbGVzVG9SZXN0b3JlLnJlc3RvcmUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwYXJhbS5jYWxsYmFjaykge1xuICAgICAgICAgIHJlc3VsdC5jYWxsYmFjayA9IHBhcmFtLmNhbGxiYWNrOyAvLyBrZWVwIHRoZSBwcm92aWRlZCBjYWxsYmFjayBzbyBpdCBjYW4gYmUgcmV1c2VkIGFmdGVyIHVuZG8vcmVkb1xuICAgICAgICAgIHBhcmFtLmNhbGxiYWNrKHJlc3VsdC5tb3ZlZEVsZXMpOyAvLyBhcHBseSB0aGUgY2FsbGJhY2sgb24gbmV3bHkgY3JlYXRlZCBlbGVtZW50c1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIFxuICAgICAgfWVsc2UgaWYoZXJyb3JDb2RlID09IFwicGQxMDEyNVwiKSB7XG5cbiAgICAgICByZXN1bHQuZWRnZSA9IHBhcmFtLmVkZ2UucmVtb3ZlKCk7ICAgICAgIFxuICAgICAgIHJlc3VsdC5uZXdFZGdlID17fTtcbiAgICAgICB2YXIgZWRnZWNsYXNzID0gcGFyYW0ubmV3RWRnZS5lZGdlUGFyYW1zLmNsYXNzID8gcGFyYW0ubmV3RWRnZS5lZGdlUGFyYW1zLmNsYXNzIDogcGFyYW0ubmV3RWRnZS5lZGdlUGFyYW1zO1xuICAgICAgIHZhciB2YWxpZGF0aW9uID0gZWxlbWVudFV0aWxpdGllcy52YWxpZGF0ZUFycm93RW5kcyhlZGdlY2xhc3MsIGN5LmdldEVsZW1lbnRCeUlkKHBhcmFtLm5ld0VkZ2Uuc291cmNlKSwgY3kuZ2V0RWxlbWVudEJ5SWQocGFyYW0ubmV3RWRnZS50YXJnZXQpKTtcblxuICAgICAgIGlmICh2YWxpZGF0aW9uID09PSAncmV2ZXJzZScpIHtcbiAgICAgICAgdmFyIHRlbXAgPSBwYXJhbS5uZXdFZGdlLnNvdXJjZTtcbiAgICAgICAgcGFyYW0ubmV3RWRnZS5zb3VyY2UgPSBwYXJhbS5uZXdFZGdlLnRhcmdldDtcbiAgICAgICAgcGFyYW0ubmV3RWRnZS50YXJnZXQgPSB0ZW1wO1xuICAgICAgfVxuICAgICAgIHJlc3VsdC5uZXdFZGdlLmlkID1lbGVtZW50VXRpbGl0aWVzLmFkZEVkZ2UocGFyYW0ubmV3RWRnZS5zb3VyY2UscGFyYW0ubmV3RWRnZS50YXJnZXQscGFyYW0ubmV3RWRnZS5lZGdlUGFyYW1zKS5pZCgpO1xuICAgICAgIHJlc3VsdC5uZXdFZGdlLnNvdXJjZSA9IHBhcmFtLm5ld0VkZ2Uuc291cmNlO1xuICAgICAgIHJlc3VsdC5uZXdFZGdlLnRhcmdldCA9IHBhcmFtLm5ld0VkZ2UudGFyZ2V0O1xuICAgICAgIHJlc3VsdC5uZXdFZGdlLmVkZ2VQYXJhbXMgPSBwYXJhbS5uZXdFZGdlLmVkZ2VQYXJhbXM7XG4gICAgICAgXG4gICAgICAgcmV0dXJuIHJlc3VsdDtcblxuICAgICAgICBcbiAgICAgIH1lbHNlIGlmKGVycm9yQ29kZSA9PSBcInBkMTAxNDJcIikge1xuICAgICAgICByZXN1bHQuZWRnZSA9IHBhcmFtLmVkZ2UucmVtb3ZlKCk7ICAgICAgIFxuICAgICAgICByZXN1bHQubmV3RWRnZSA9e307XG4gICAgICAgIHZhciBlZGdlY2xhc3MgPSBwYXJhbS5uZXdFZGdlLmVkZ2VQYXJhbXMuY2xhc3MgPyBwYXJhbS5uZXdFZGdlLmVkZ2VQYXJhbXMuY2xhc3MgOiBwYXJhbS5uZXdFZGdlLmVkZ2VQYXJhbXM7XG4gICAgICAgIHZhciB2YWxpZGF0aW9uID0gZWxlbWVudFV0aWxpdGllcy52YWxpZGF0ZUFycm93RW5kcyhlZGdlY2xhc3MsIGN5LmdldEVsZW1lbnRCeUlkKHBhcmFtLm5ld0VkZ2Uuc291cmNlKSwgY3kuZ2V0RWxlbWVudEJ5SWQocGFyYW0ubmV3RWRnZS50YXJnZXQpKTtcblxuICAgICAgICBpZiAodmFsaWRhdGlvbiA9PT0gJ3JldmVyc2UnKSB7XG4gICAgICAgICB2YXIgdGVtcCA9IHBhcmFtLm5ld0VkZ2Uuc291cmNlO1xuICAgICAgICAgcGFyYW0ubmV3RWRnZS5zb3VyY2UgPSBwYXJhbS5uZXdFZGdlLnRhcmdldDtcbiAgICAgICAgIHBhcmFtLm5ld0VkZ2UudGFyZ2V0ID0gdGVtcDtcbiAgICAgICB9XG4gICAgICAgIHJlc3VsdC5uZXdFZGdlLmlkID1lbGVtZW50VXRpbGl0aWVzLmFkZEVkZ2UocGFyYW0ubmV3RWRnZS5zb3VyY2UscGFyYW0ubmV3RWRnZS50YXJnZXQscGFyYW0ubmV3RWRnZS5lZGdlUGFyYW1zKS5pZCgpO1xuICAgICAgICByZXN1bHQubmV3RWRnZS5zb3VyY2UgPSBwYXJhbS5uZXdFZGdlLnNvdXJjZTtcbiAgICAgICAgcmVzdWx0Lm5ld0VkZ2UudGFyZ2V0ID0gcGFyYW0ubmV3RWRnZS50YXJnZXQ7XG4gICAgICAgIHJlc3VsdC5uZXdFZGdlLmVkZ2VQYXJhbXMgPSBwYXJhbS5uZXdFZGdlLmVkZ2VQYXJhbXM7XG4gICAgICAgIFxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfWVsc2Uge1xuXG4gICAgICAgIHJlc3VsdC5uZXdTb3VyY2UgPSBwYXJhbS5lZGdlLnNvdXJjZSgpLmlkKCk7XG4gICAgICAgIHJlc3VsdC5uZXdUYXJnZXQgPSBwYXJhbS5lZGdlLnRhcmdldCgpLmlkKCk7XG4gICAgICAgIHJlc3VsdC5wb3J0dGFyZ2V0ID0gcGFyYW0uZWRnZS5kYXRhKFwicG9ydHRhcmdldFwiKTtcbiAgICAgICAgcmVzdWx0LmVkZ2UgPSBwYXJhbS5lZGdlLm1vdmUoe1xuICAgICAgICAgIHRhcmdldDogcGFyYW0ubmV3VGFyZ2V0LFxuICAgICAgICAgIHNvdXJjZSA6IHBhcmFtLm5ld1NvdXJjZSAgICAgIFxuICAgICAgICB9KTtcblxuICAgICAgICBlbGVtZW50VXRpbGl0aWVzLmNoYW5nZURhdGEocmVzdWx0LmVkZ2UsICdwb3J0dGFyZ2V0JywgcGFyYW0ucG9ydHRhcmdldCk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIFxuICAgICAgfVxuICAgICAgXG4gIH1cbiAgXG4gIHVuZG9SZWRvQWN0aW9uRnVuY3Rpb25zLnVuZml4RXJyb3IgPSBmdW5jdGlvbihwYXJhbSl7XG4gICAgdmFyIGVycm9yQ29kZSA9IHBhcmFtLmVycm9yQ29kZTtcbiAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgcmVzdWx0LmVycm9yQ29kZSA9IGVycm9yQ29kZTtcbiAgICBpZihlcnJvckNvZGUgPT0gXCJwZDEwMTAxXCIgfHwgZXJyb3JDb2RlID09ICdwZDEwMTAyJyl7XG4gICAgIFxuICAgICAgICByZXN1bHQuZWRnZSA9IGVsZW1lbnRVdGlsaXRpZXMucmV2ZXJzZUVkZ2UocGFyYW0uZWRnZSk7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1lbHNlIGlmKGVycm9yQ29kZSA9PSBcInBkMTAxMDNcIiB8fCBlcnJvckNvZGUgPT0gJ3BkMTAxMDcnKXtcblxuICAgICAgcGFyYW0ubmV3Tm9kZXMuZm9yRWFjaChmdW5jdGlvbihuZXdOb2RlKXsgICAgXG4gICAgICAgIGN5LnJlbW92ZShjeS4kKCcjJytuZXdOb2RlLmlkKSkgICAgICBcbiAgICAgICAgXG4gICAgICB9KTtcblxuICAgICAgcGFyYW0ubm9kZS5yZXN0b3JlKCk7XG5cbiAgICAgIHBhcmFtLm9sZEVkZ2VzLmZvckVhY2goZnVuY3Rpb24ob2xkRWRnZSl7ICBcbiAgICAgICAgb2xkRWRnZS5yZXN0b3JlKCk7XG4gICAgICB9KTtcblxuICAgICAgY3kuYW5pbWF0ZSh7XG4gICAgICAgIGR1cmF0aW9uOiAxMDAsXG4gICAgICAgIGVhc2luZzogJ2Vhc2UnLFxuICAgICAgICBmaXQgOntlbGVzOnt9LHBhZGRpbmc6MjB9LCBcbiAgICAgICAgY29tcGxldGU6IGZ1bmN0aW9uKCl7XG4gICAgICAgICAgICAgIFxuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIHBhcmFtO1xuXG4gICAgfWVsc2UgaWYoZXJyb3JDb2RlID09IFwicGQxMDEwNVwiIHx8IGVycm9yQ29kZSA9PSAncGQxMDEwNicpeyAgXG5cbiAgICAgIHJlc3VsdC5lZGdlID0gZWxlbWVudFV0aWxpdGllcy5yZXZlcnNlRWRnZShwYXJhbS5lZGdlKTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG5cbiAgICB9ZWxzZSBpZihlcnJvckNvZGUgPT0gXCJwZDEwMTQwXCIpe1xuICAgICAgcGFyYW0ubm9kZS5yZXN0b3JlKCk7XG4gICAgICBjeS5hbmltYXRlKHtcbiAgICAgICAgZHVyYXRpb246IDEwMCxcbiAgICAgICAgZWFzaW5nOiAnZWFzZScsXG4gICAgICAgIGZpdCA6e2VsZXM6e30scGFkZGluZzoyMH0sIFxuICAgICAgICBjb21wbGV0ZTogZnVuY3Rpb24oKXtcbiAgICAgICAgICAgICAgXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHBhcmFtO1xuICAgIH1lbHNlIGlmKGVycm9yQ29kZSA9PSBcInBkMTAxMDRcIikge1xuICAgICAgXG4gICAgICBwYXJhbS5ub2Rlcy5mb3JFYWNoKGZ1bmN0aW9uKG5vZGUpe1xuICAgICAgICBub2RlLnJlc3RvcmUoKTtcbiAgICAgIH0pO1xuICAgICAgcGFyYW0uZWRnZXMuZm9yRWFjaChmdW5jdGlvbihlZGdlKXtcbiAgICAgICAgZWRnZS5yZXN0b3JlKCk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBwYXJhbTtcbiAgICB9ZWxzZSBpZihlcnJvckNvZGUgPT0gXCJwZDEwMTA4XCIpe1xuICAgICAgXG4gICAgICBwYXJhbS5ub2Rlcy5mb3JFYWNoKGZ1bmN0aW9uKG5vZGUpe1xuICAgICAgICBub2RlLnJlc3RvcmUoKTtcbiAgICAgIH0pO1xuICAgICAgcGFyYW0uZWRnZXMuZm9yRWFjaChmdW5jdGlvbihlZGdlKXtcbiAgICAgICAgZWRnZS5yZXN0b3JlKCk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBwYXJhbTtcbiAgICB9ZWxzZSBpZihlcnJvckNvZGUgPT0gXCJwZDEwMTExXCIpe1xuICAgICAgcGFyYW0uZWRnZXMuZm9yRWFjaChmdW5jdGlvbihlZGdlKXtcbiAgICAgICAgZWRnZS5yZXN0b3JlKCk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBwYXJhbTtcbiAgICB9ZWxzZSBpZihlcnJvckNvZGUgPT0gXCJwZDEwMTI2XCIpe1xuICAgICAgcGFyYW0ubm9kZXMuZm9yRWFjaChmdW5jdGlvbihub2RlKXtcbiAgICAgICAgbm9kZS5yZXN0b3JlKCk7XG4gICAgICB9KTtcbiAgICAgIHBhcmFtLmVkZ2VzLmZvckVhY2goZnVuY3Rpb24oZWRnZSl7XG4gICAgICAgIGVkZ2UucmVzdG9yZSgpO1xuICAgICAgfSk7ICAgICAgIFxuICAgICAgcmV0dXJuIHBhcmFtO1xuICAgIH1lbHNlIGlmKGVycm9yQ29kZSA9PSBcInBkMTAxMDlcIiB8fCBlcnJvckNvZGUgPT0gXCJwZDEwMTI0XCIpIHtcblxuICAgICAgcmVzdWx0Lm5ld1NvdXJjZSA9IHBhcmFtLmVkZ2Uuc291cmNlKCkuaWQoKTtcbiAgICAgIHJlc3VsdC5uZXdUYXJnZXQgPSBwYXJhbS5lZGdlLnRhcmdldCgpLmlkKCk7XG4gICAgICByZXN1bHQucG9ydHNvdXJjZSA9IHBhcmFtLnBvcnRzb3VyY2U7XG4gICAgICByZXN1bHQuZWRnZSA9IHBhcmFtLmVkZ2UubW92ZSh7XG4gICAgICAgIHRhcmdldDogcGFyYW0ubmV3VGFyZ2V0LFxuICAgICAgICBzb3VyY2UgOiBwYXJhbS5uZXdTb3VyY2UgICAgICBcbiAgICAgIH0pO1xuXG4gICAgICBlbGVtZW50VXRpbGl0aWVzLmNoYW5nZURhdGEocmVzdWx0LmVkZ2UsICdwb3J0c291cmNlJywgcGFyYW0ucG9ydHNvdXJjZSk7IFxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9ZWxzZSBpZihlcnJvckNvZGUgPT0gXCJwZDEwMTEyXCIpIHtcbiAgICAgXG4gICAgICAvLyBJZiB0aGlzIGlzIGZpcnN0IHRpbWUgd2Ugc2hvdWxkIG1vdmUgdGhlIG5vZGUgdG8gaXRzIG5ldyBwYXJlbnQgYW5kIHJlbG9jYXRlIGl0IGJ5IGdpdmVuIHBvc0RpZmYgcGFyYW1zXG4gICAgICAvLyBlbHNlIHdlIHNob3VsZCByZW1vdmUgdGhlIG1vdmVkIGVsZXMgYW5kIHJlc3RvcmUgdGhlIGVsZXMgdG8gcmVzdG9yZVxuICAgICAgaWYgKHBhcmFtLmZpcnN0VGltZSkge1xuICAgICAgICB2YXIgbmV3UGFyZW50SWQgPSBwYXJhbS5wYXJlbnREYXRhID09IHVuZGVmaW5lZCA/IG51bGwgOiBwYXJhbS5wYXJlbnREYXRhO1xuICAgICAgICAvLyBUaGVzZSBlbGVzIGluY2x1ZGVzIHRoZSBub2RlcyBhbmQgdGhlaXIgY29ubmVjdGVkIGVkZ2VzIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gbm9kZXMubW92ZSgpLlxuICAgICAgICAvLyBUaGV5IHNob3VsZCBiZSByZXN0b3JlZCBpbiB1bmRvXG4gICAgICAgIHZhciB3aXRoRGVzY2VuZGFudCA9IHBhcmFtLm5vZGVzLnVuaW9uKHBhcmFtLm5vZGVzLmRlc2NlbmRhbnRzKCkpO1xuICAgICAgICByZXN1bHQuZWxlc1RvUmVzdG9yZSA9IHdpdGhEZXNjZW5kYW50LnVuaW9uKHdpdGhEZXNjZW5kYW50LmNvbm5lY3RlZEVkZ2VzKCkpO1xuICAgICAgICAvLyBUaGVzZSBhcmUgdGhlIGVsZXMgY3JlYXRlZCBieSBub2Rlcy5tb3ZlKCksIHRoZXkgc2hvdWxkIGJlIHJlbW92ZWQgaW4gdW5kby5cbiAgICAgICAgcmVzdWx0Lm1vdmVkRWxlcyA9IHBhcmFtLm5vZGVzLm1vdmUoe1wicGFyZW50XCI6IG5ld1BhcmVudElkfSk7XG5cbiAgICAgICAgdmFyIHBvc0RpZmYgPSB7XG4gICAgICAgICAgeDogcGFyYW0ucG9zRGlmZlgsXG4gICAgICAgICAgeTogcGFyYW0ucG9zRGlmZllcbiAgICAgICAgfTtcblxuICAgICAgICBlbGVtZW50VXRpbGl0aWVzLm1vdmVOb2Rlcyhwb3NEaWZmLCByZXN1bHQubW92ZWRFbGVzKTtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICByZXN1bHQuZWxlc1RvUmVzdG9yZSA9IHBhcmFtLm1vdmVkRWxlcy5yZW1vdmUoKTtcbiAgICAgICAgcmVzdWx0Lm1vdmVkRWxlcyA9IHBhcmFtLmVsZXNUb1Jlc3RvcmUucmVzdG9yZSgpO1xuICAgICAgfVxuXG4gICAgICBpZiAocGFyYW0uY2FsbGJhY2spIHtcbiAgICAgICAgcmVzdWx0LmNhbGxiYWNrID0gcGFyYW0uY2FsbGJhY2s7IC8vIGtlZXAgdGhlIHByb3ZpZGVkIGNhbGxiYWNrIHNvIGl0IGNhbiBiZSByZXVzZWQgYWZ0ZXIgdW5kby9yZWRvXG4gICAgICAgIHBhcmFtLmNhbGxiYWNrKHJlc3VsdC5tb3ZlZEVsZXMpOyAvLyBhcHBseSB0aGUgY2FsbGJhY2sgb24gbmV3bHkgY3JlYXRlZCBlbGVtZW50c1xuICAgICAgfVxuXG4gICAgIFxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIFxuICAgIH1lbHNlIGlmKGVycm9yQ29kZSA9PSBcInBkMTAxMjVcIikge1xuXG4gICAgICBjeS4kKCcjJytwYXJhbS5uZXdFZGdlLmlkKS5yZW1vdmUoKTtcbiAgICAgIHBhcmFtLmVkZ2UgPSBwYXJhbS5lZGdlLnJlc3RvcmUoKTtcblxuICAgIFxuICAgICAgcmV0dXJuIHBhcmFtO1xuICAgICAgXG4gICAgfWVsc2UgaWYoZXJyb3JDb2RlID09IFwicGQxMDE0MlwiKSB7XG4gICAgICBjeS4kKCcjJytwYXJhbS5uZXdFZGdlLmlkKS5yZW1vdmUoKTtcbiAgICAgIHBhcmFtLmVkZ2UgPSBwYXJhbS5lZGdlLnJlc3RvcmUoKTtcblxuICAgIFxuICAgICAgcmV0dXJuIHBhcmFtO1xuICAgIH1lbHNlIHtcblxuICAgICAgcmVzdWx0Lm5ld1NvdXJjZSA9IHBhcmFtLmVkZ2Uuc291cmNlKCkuaWQoKTtcbiAgICAgIHJlc3VsdC5uZXdUYXJnZXQgPSBwYXJhbS5lZGdlLnRhcmdldCgpLmlkKCk7XG4gICAgICByZXN1bHQucG9ydHRhcmdldCA9IHBhcmFtLmVkZ2UuZGF0YShcInBvcnR0YXJnZXRcIik7XG4gICAgICByZXN1bHQuZWRnZSA9IHBhcmFtLmVkZ2UubW92ZSh7XG4gICAgICAgIHRhcmdldDogcGFyYW0ubmV3VGFyZ2V0LFxuICAgICAgICBzb3VyY2UgOiBwYXJhbS5uZXdTb3VyY2UgICAgICBcbiAgICAgIH0pO1xuXG4gICAgICBlbGVtZW50VXRpbGl0aWVzLmNoYW5nZURhdGEocmVzdWx0LmVkZ2UsICdwb3J0dGFyZ2V0JywgcGFyYW0ucG9ydHRhcmdldCk7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuXG4gICAgICBcbiAgICB9XG4gICAgXG4gIH1cblxuICB1bmRvUmVkb0FjdGlvbkZ1bmN0aW9ucy5jbG9uZUhpZ2hEZWdyZWVOb2RlID0gZnVuY3Rpb24obm9kZSl7XG5cbiAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgdmFyIG9sZFggPSBub2RlLnBvc2l0aW9uKCkueDtcbiAgICB2YXIgb2xkWSA9IG5vZGUucG9zaXRpb24oKS55O1xuICAgIFxuICAgIFxuICAgIHZhciBjbGFjdWxhdGVOZXdDbG9uZVBvc2l0aW9uID0gZnVuY3Rpb24oc291cmNlRW5kUG9pbnRYLHNvdXJjZUVuZFBvaW50WSx0YXJnZXRFbmRQb2ludFgsdGFyZ2V0RW5kUG9pbnRZLGRlc2lyZWREaXN0YW5jZSxkaXJlY3Rpb24pe1xuICAgICAgdmFyIGRpc3RhbmNlID0gTWF0aC5zcXJ0KE1hdGgucG93KHRhcmdldEVuZFBvaW50WS1zb3VyY2VFbmRQb2ludFksMikrIE1hdGgucG93KHRhcmdldEVuZFBvaW50WC1zb3VyY2VFbmRQb2ludFgsMikpO1xuICAgICAgdmFyIHJhdGlvID0gZGVzaXJlZERpc3RhbmNlL2Rpc3RhbmNlO1xuICAgICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgICAgaWYoZGlyZWN0aW9uID09IFwic291cmNlXCIpeyBcbiAgICAgICAgcmVzdWx0LmN4ID0gKCgxLXJhdGlvKSAqIHNvdXJjZUVuZFBvaW50WCkgICsgKHJhdGlvICogdGFyZ2V0RW5kUG9pbnRYKTtcbiAgICAgICAgcmVzdWx0LmN5ID0gKCgxLXJhdGlvKSAqIHNvdXJjZUVuZFBvaW50WSkgICsgKHJhdGlvICogdGFyZ2V0RW5kUG9pbnRZKTtcbiAgICAgIH1lbHNleyAgICAgIFxuICAgICAgICByZXN1bHQuY3ggPSAoKDEtcmF0aW8pICogdGFyZ2V0RW5kUG9pbnRYKSAgKyAocmF0aW8gKiBzb3VyY2VFbmRQb2ludFgpO1xuICAgICAgICByZXN1bHQuY3kgPSAoKDEtcmF0aW8pICogdGFyZ2V0RW5kUG9pbnRZKSAgKyAocmF0aW8gKiBzb3VyY2VFbmRQb2ludFkpO1xuICAgICAgfVxuICAgICAgXG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH07ICAgXG4gICAgdmFyIGVkZ2VzID0gbm9kZS5jb25uZWN0ZWRFZGdlcygpO1xuICAgIHZhciBkZXNpcmVkRGlzdGFuY2UgPSAobm9kZS5oZWlnaHQoKSA+IG5vZGUud2lkdGgoKT8gbm9kZS5oZWlnaHQoKTogbm9kZS53aWR0aCgpKSogMC4xO1xuICAgIGZvcih2YXIgaSA9IDEgOyBpIDwgZWRnZXMubGVuZ3RoIDsgaSsrKXtcbiAgICAgIHZhciBlZGdlID0gZWRnZXNbaV07XG4gICAgICB2YXIgaW5kZXggPSBpO1xuICAgICAgdmFyIGVkZ2VDbG9uZSA9IGVkZ2UuY2xvbmUoKTtcbiAgICAgIHZhciBzdGFydFBvc2l0aW9uID0gZWRnZS5zb3VyY2UoKS5pZCgpID09IG5vZGUuaWQoKSA/IFwic291cmNlXCIgOiBcInRhcmdldFwiOyAgICBcbiAgICAgIHZhciBuZXdQb3NpdGlvbiA9IGNsYWN1bGF0ZU5ld0Nsb25lUG9zaXRpb24oZWRnZS5zb3VyY2VFbmRwb2ludCgpLngsZWRnZS5zb3VyY2VFbmRwb2ludCgpLnksZWRnZS50YXJnZXRFbmRwb2ludCgpLngsZWRnZS50YXJnZXRFbmRwb2ludCgpLnksZGVzaXJlZERpc3RhbmNlLHN0YXJ0UG9zaXRpb24pOyBcbiAgICAgIHZhciBuZXdOb2RlSWQgPSBub2RlLmlkKCkrJ2Nsb25lLScraW5kZXg7XG4gICAgICAvL2VkZ2VDbG9uZS5kYXRhKCkuaWQgPSBlZGdlQ2xvbmUuZGF0YSgpLmlkKyBcIi1cIituZXdOb2RlSWQ7XG4gICAgICBpZihlZGdlLnNvdXJjZSgpLmlkKCkgPT0gbm9kZS5pZCgpKXsgICAgICAgIFxuICAgICAgICBlZGdlQ2xvbmUuZGF0YSgpLnNvdXJjZSA9IG5ld05vZGVJZDtcbiAgICAgICAgZWRnZUNsb25lLmRhdGEoKS5wb3J0c291cmNlID0gbmV3Tm9kZUlkOyAgICBcbiAgICAgIH1lbHNle1xuICAgICAgICAgIFxuICAgICAgICBlZGdlQ2xvbmUuZGF0YSgpLnRhcmdldCA9IG5ld05vZGVJZDtcbiAgICAgICAgZWRnZUNsb25lLmRhdGEoKS5wb3J0dGFyZ2V0ID0gbmV3Tm9kZUlkOyAgICBcbiAgICAgIH1cbiAgICAgIHZhciBuZXdOb2RlID0gbm9kZS5jbG9uZSgpO1xuICAgICAgbmV3Tm9kZS5kYXRhKCkuaWQgPSBuZXdOb2RlSWQ7XG4gICAgICBjeS5hZGQobmV3Tm9kZSk7XG4gICAgIFxuICAgICAgZWRnZS5yZW1vdmUoKTtcbiAgICAgIGN5LmFkZChlZGdlQ2xvbmUpO1xuICAgICAgbmV3Tm9kZS5wb3NpdGlvbih7XG4gICAgICAgIHg6IG5ld1Bvc2l0aW9uLmN4LFxuICAgICAgICB5OiBuZXdQb3NpdGlvbi5jeVxuICAgICAgfSk7XG4gICAgICBlbGVtZW50VXRpbGl0aWVzLnNldENsb25lTWFya2VyU3RhdHVzKG5ld05vZGUsIHRydWUpO1xuICAgICAgXG4gICAgfSAgXG4gICAgXG4gICAgdmFyIG5ld1Bvc2l0aW9uID0gY2xhY3VsYXRlTmV3Q2xvbmVQb3NpdGlvbihcbiAgICAgIGVkZ2VzWzBdLnNvdXJjZUVuZHBvaW50KCkueCxcbiAgICAgIGVkZ2VzWzBdLnNvdXJjZUVuZHBvaW50KCkueSxcbiAgICAgIGVkZ2VzWzBdLnRhcmdldEVuZHBvaW50KCkueCxcbiAgICAgIGVkZ2VzWzBdLnRhcmdldEVuZHBvaW50KCkueSxcbiAgICAgIGRlc2lyZWREaXN0YW5jZSxlZGdlc1swXS5zb3VyY2UoKS5pZCgpID09IG5vZGUuaWQoKSA/IFwic291cmNlXCIgOiBcInRhcmdldFwiXG4gICAgICApO1xuICBcbiAgICB2YXIgY2xvbmVFZGdlID0gZWRnZXNbMF0uY2xvbmUoKTtcbiAgICAvL2Nsb25lRWRnZS5kYXRhKCkuaWQgPSBjbG9uZUVkZ2UuZGF0YSgpLmlkKyBcIi1cIitub2RlLmlkKCkrJ2Nsb25lLTAnO1xuICAgIFxuICAgIGVkZ2VzWzBdLnJlbW92ZSgpO1xuICAgIGN5LmFkZChjbG9uZUVkZ2UpO1xuICAgIGVsZW1lbnRVdGlsaXRpZXMuc2V0Q2xvbmVNYXJrZXJTdGF0dXMobm9kZSx0cnVlKTtcbiAgICBub2RlLnBvc2l0aW9uKHtcbiAgICAgIHg6IG5ld1Bvc2l0aW9uLmN4LFxuICAgICAgeTogbmV3UG9zaXRpb24uY3lcbiAgICB9KTtcbiAgXG4gICAgcmVzdWx0Lm9sZFggPSBvbGRYOyAgICBcbiAgICByZXN1bHQub2xkWSA9IG9sZFk7XG4gICAgcmVzdWx0Lm5vZGUgPSBub2RlO1xuICAgIHJlc3VsdC5udW1iZXJPZkVkZ2VzID0gZWRnZXMubGVuZ3RoO1xuICAgIHJldHVybiByZXN1bHQ7XG5cbiAgfVxuXG4gIHVuZG9SZWRvQWN0aW9uRnVuY3Rpb25zLnVuQ2xvbmVIaWdoRGVncmVlTm9kZSA9IGZ1bmN0aW9uKHBhcmFtKXtcblxuICAgIHZhciBub2RlID0gcGFyYW0ubm9kZTtcbiAgICBlbGVtZW50VXRpbGl0aWVzLnNldENsb25lTWFya2VyU3RhdHVzKG5vZGUsZmFsc2UpO1xuICAgIG5vZGUucG9zaXRpb24oe1xuICAgICAgeDogcGFyYW0ub2xkWCxcbiAgICAgIHk6IHBhcmFtLm9sZFlcbiAgICB9KTtcbiAgXG4gICAgZm9yKHZhciBpID0gMSA7IGkgPCBwYXJhbS5udW1iZXJPZkVkZ2VzIDsgaSsrKXtcbiAgICAgIHZhciBjbG9uZUlkID0gbm9kZS5pZCgpKydjbG9uZS0nK2k7XG4gICAgICB2YXIgY2xvbmUgPSBjeS4kKFwiI1wiK2Nsb25lSWQpO1xuICAgICAgdmFyIGNsb25lRWRnZSA9IGNsb25lLmNvbm5lY3RlZEVkZ2VzKClbMF07XG4gICAgICB2YXIgZWRnZSA9IGNsb25lRWRnZS5jbG9uZSgpO1xuICAgICAgXG4gICAgXG4gICAgICBpZihlZGdlLmRhdGEoKS5zb3VyY2UgPT0gY2xvbmVJZCl7ICAgICAgICBcbiAgICAgICAgZWRnZS5kYXRhKCkuc291cmNlID0gbm9kZS5pZCgpO1xuICAgICAgICBlZGdlLmRhdGEoKS5wb3J0c291cmNlID0gIG5vZGUuaWQoKTsgICAgXG4gICAgICB9ZWxzZXsgICAgICAgICAgXG4gICAgICAgIGVkZ2UuZGF0YSgpLnRhcmdldCA9ICBub2RlLmlkKCk7XG4gICAgICAgIGVkZ2UuZGF0YSgpLnBvcnR0YXJnZXQgPSAgbm9kZS5pZCgpOyAgICBcbiAgICAgIH1cblxuICAgICAgY2xvbmVFZGdlLnJlbW92ZSgpO1xuICAgICAgY2xvbmUucmVtb3ZlKCk7XG4gICAgICBcbiAgICAgIGN5LmFkZChlZGdlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbm9kZTtcbiAgfVxuXG4gIHVuZG9SZWRvQWN0aW9uRnVuY3Rpb25zLmNoYW5nZU1hcFR5cGUgPSBmdW5jdGlvbihwYXJhbSl7XG4gICAgdmFyIHJlc3VsdCA9e307XG4gICAgdmFyIGN1cnJlbnRNYXBUeXBlID0gZWxlbWVudFV0aWxpdGllcy5nZXRNYXBUeXBlKCk7XG4gICAgZWxlbWVudFV0aWxpdGllcy5zZXRNYXBUeXBlKHBhcmFtLm1hcFR5cGUpO1xuICAgIHJlc3VsdC5tYXBUeXBlID0gY3VycmVudE1hcFR5cGU7XG4gICAgcmVzdWx0LmNhbGxiYWNrID0gcGFyYW0uY2FsbGJhY2s7XG4gICAgcGFyYW0uY2FsbGJhY2soKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgfVxuXG4gIHJldHVybiB1bmRvUmVkb0FjdGlvbkZ1bmN0aW9uc0V4dGVuZGVyO1xufTtcbiIsIi8qKlxuICogTG9kYXNoIChDdXN0b20gQnVpbGQpIDxodHRwczovL2xvZGFzaC5jb20vPlxuICogQnVpbGQ6IGBsb2Rhc2ggbW9kdWxhcml6ZSBleHBvcnRzPVwibnBtXCIgLW8gLi9gXG4gKiBDb3B5cmlnaHQgSlMgRm91bmRhdGlvbiBhbmQgb3RoZXIgY29udHJpYnV0b3JzIDxodHRwczovL2pzLmZvdW5kYXRpb24vPlxuICogUmVsZWFzZWQgdW5kZXIgTUlUIGxpY2Vuc2UgPGh0dHBzOi8vbG9kYXNoLmNvbS9saWNlbnNlPlxuICogQmFzZWQgb24gVW5kZXJzY29yZS5qcyAxLjguMyA8aHR0cDovL3VuZGVyc2NvcmVqcy5vcmcvTElDRU5TRT5cbiAqIENvcHlyaWdodCBKZXJlbXkgQXNoa2VuYXMsIERvY3VtZW50Q2xvdWQgYW5kIEludmVzdGlnYXRpdmUgUmVwb3J0ZXJzICYgRWRpdG9yc1xuICovXG5cbi8qKiBVc2VkIGFzIHRoZSBzaXplIHRvIGVuYWJsZSBsYXJnZSBhcnJheSBvcHRpbWl6YXRpb25zLiAqL1xudmFyIExBUkdFX0FSUkFZX1NJWkUgPSAyMDA7XG5cbi8qKiBVc2VkIHRvIHN0YW5kLWluIGZvciBgdW5kZWZpbmVkYCBoYXNoIHZhbHVlcy4gKi9cbnZhciBIQVNIX1VOREVGSU5FRCA9ICdfX2xvZGFzaF9oYXNoX3VuZGVmaW5lZF9fJztcblxuLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgdmFsdWUgY29tcGFyaXNvbnMuICovXG52YXIgQ09NUEFSRV9QQVJUSUFMX0ZMQUcgPSAxLFxuICAgIENPTVBBUkVfVU5PUkRFUkVEX0ZMQUcgPSAyO1xuXG4vKiogVXNlZCBhcyByZWZlcmVuY2VzIGZvciB2YXJpb3VzIGBOdW1iZXJgIGNvbnN0YW50cy4gKi9cbnZhciBNQVhfU0FGRV9JTlRFR0VSID0gOTAwNzE5OTI1NDc0MDk5MTtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIGFyZ3NUYWcgPSAnW29iamVjdCBBcmd1bWVudHNdJyxcbiAgICBhcnJheVRhZyA9ICdbb2JqZWN0IEFycmF5XScsXG4gICAgYXN5bmNUYWcgPSAnW29iamVjdCBBc3luY0Z1bmN0aW9uXScsXG4gICAgYm9vbFRhZyA9ICdbb2JqZWN0IEJvb2xlYW5dJyxcbiAgICBkYXRlVGFnID0gJ1tvYmplY3QgRGF0ZV0nLFxuICAgIGVycm9yVGFnID0gJ1tvYmplY3QgRXJyb3JdJyxcbiAgICBmdW5jVGFnID0gJ1tvYmplY3QgRnVuY3Rpb25dJyxcbiAgICBnZW5UYWcgPSAnW29iamVjdCBHZW5lcmF0b3JGdW5jdGlvbl0nLFxuICAgIG1hcFRhZyA9ICdbb2JqZWN0IE1hcF0nLFxuICAgIG51bWJlclRhZyA9ICdbb2JqZWN0IE51bWJlcl0nLFxuICAgIG51bGxUYWcgPSAnW29iamVjdCBOdWxsXScsXG4gICAgb2JqZWN0VGFnID0gJ1tvYmplY3QgT2JqZWN0XScsXG4gICAgcHJvbWlzZVRhZyA9ICdbb2JqZWN0IFByb21pc2VdJyxcbiAgICBwcm94eVRhZyA9ICdbb2JqZWN0IFByb3h5XScsXG4gICAgcmVnZXhwVGFnID0gJ1tvYmplY3QgUmVnRXhwXScsXG4gICAgc2V0VGFnID0gJ1tvYmplY3QgU2V0XScsXG4gICAgc3RyaW5nVGFnID0gJ1tvYmplY3QgU3RyaW5nXScsXG4gICAgc3ltYm9sVGFnID0gJ1tvYmplY3QgU3ltYm9sXScsXG4gICAgdW5kZWZpbmVkVGFnID0gJ1tvYmplY3QgVW5kZWZpbmVkXScsXG4gICAgd2Vha01hcFRhZyA9ICdbb2JqZWN0IFdlYWtNYXBdJztcblxudmFyIGFycmF5QnVmZmVyVGFnID0gJ1tvYmplY3QgQXJyYXlCdWZmZXJdJyxcbiAgICBkYXRhVmlld1RhZyA9ICdbb2JqZWN0IERhdGFWaWV3XScsXG4gICAgZmxvYXQzMlRhZyA9ICdbb2JqZWN0IEZsb2F0MzJBcnJheV0nLFxuICAgIGZsb2F0NjRUYWcgPSAnW29iamVjdCBGbG9hdDY0QXJyYXldJyxcbiAgICBpbnQ4VGFnID0gJ1tvYmplY3QgSW50OEFycmF5XScsXG4gICAgaW50MTZUYWcgPSAnW29iamVjdCBJbnQxNkFycmF5XScsXG4gICAgaW50MzJUYWcgPSAnW29iamVjdCBJbnQzMkFycmF5XScsXG4gICAgdWludDhUYWcgPSAnW29iamVjdCBVaW50OEFycmF5XScsXG4gICAgdWludDhDbGFtcGVkVGFnID0gJ1tvYmplY3QgVWludDhDbGFtcGVkQXJyYXldJyxcbiAgICB1aW50MTZUYWcgPSAnW29iamVjdCBVaW50MTZBcnJheV0nLFxuICAgIHVpbnQzMlRhZyA9ICdbb2JqZWN0IFVpbnQzMkFycmF5XSc7XG5cbi8qKlxuICogVXNlZCB0byBtYXRjaCBgUmVnRXhwYFxuICogW3N5bnRheCBjaGFyYWN0ZXJzXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1wYXR0ZXJucykuXG4gKi9cbnZhciByZVJlZ0V4cENoYXIgPSAvW1xcXFxeJC4qKz8oKVtcXF17fXxdL2c7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBob3N0IGNvbnN0cnVjdG9ycyAoU2FmYXJpKS4gKi9cbnZhciByZUlzSG9zdEN0b3IgPSAvXlxcW29iamVjdCAuKz9Db25zdHJ1Y3RvclxcXSQvO1xuXG4vKiogVXNlZCB0byBkZXRlY3QgdW5zaWduZWQgaW50ZWdlciB2YWx1ZXMuICovXG52YXIgcmVJc1VpbnQgPSAvXig/OjB8WzEtOV1cXGQqKSQvO1xuXG4vKiogVXNlZCB0byBpZGVudGlmeSBgdG9TdHJpbmdUYWdgIHZhbHVlcyBvZiB0eXBlZCBhcnJheXMuICovXG52YXIgdHlwZWRBcnJheVRhZ3MgPSB7fTtcbnR5cGVkQXJyYXlUYWdzW2Zsb2F0MzJUYWddID0gdHlwZWRBcnJheVRhZ3NbZmxvYXQ2NFRhZ10gPVxudHlwZWRBcnJheVRhZ3NbaW50OFRhZ10gPSB0eXBlZEFycmF5VGFnc1tpbnQxNlRhZ10gPVxudHlwZWRBcnJheVRhZ3NbaW50MzJUYWddID0gdHlwZWRBcnJheVRhZ3NbdWludDhUYWddID1cbnR5cGVkQXJyYXlUYWdzW3VpbnQ4Q2xhbXBlZFRhZ10gPSB0eXBlZEFycmF5VGFnc1t1aW50MTZUYWddID1cbnR5cGVkQXJyYXlUYWdzW3VpbnQzMlRhZ10gPSB0cnVlO1xudHlwZWRBcnJheVRhZ3NbYXJnc1RhZ10gPSB0eXBlZEFycmF5VGFnc1thcnJheVRhZ10gPVxudHlwZWRBcnJheVRhZ3NbYXJyYXlCdWZmZXJUYWddID0gdHlwZWRBcnJheVRhZ3NbYm9vbFRhZ10gPVxudHlwZWRBcnJheVRhZ3NbZGF0YVZpZXdUYWddID0gdHlwZWRBcnJheVRhZ3NbZGF0ZVRhZ10gPVxudHlwZWRBcnJheVRhZ3NbZXJyb3JUYWddID0gdHlwZWRBcnJheVRhZ3NbZnVuY1RhZ10gPVxudHlwZWRBcnJheVRhZ3NbbWFwVGFnXSA9IHR5cGVkQXJyYXlUYWdzW251bWJlclRhZ10gPVxudHlwZWRBcnJheVRhZ3Nbb2JqZWN0VGFnXSA9IHR5cGVkQXJyYXlUYWdzW3JlZ2V4cFRhZ10gPVxudHlwZWRBcnJheVRhZ3Nbc2V0VGFnXSA9IHR5cGVkQXJyYXlUYWdzW3N0cmluZ1RhZ10gPVxudHlwZWRBcnJheVRhZ3Nbd2Vha01hcFRhZ10gPSBmYWxzZTtcblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBnbG9iYWxgIGZyb20gTm9kZS5qcy4gKi9cbnZhciBmcmVlR2xvYmFsID0gdHlwZW9mIGdsb2JhbCA9PSAnb2JqZWN0JyAmJiBnbG9iYWwgJiYgZ2xvYmFsLk9iamVjdCA9PT0gT2JqZWN0ICYmIGdsb2JhbDtcblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBzZWxmYC4gKi9cbnZhciBmcmVlU2VsZiA9IHR5cGVvZiBzZWxmID09ICdvYmplY3QnICYmIHNlbGYgJiYgc2VsZi5PYmplY3QgPT09IE9iamVjdCAmJiBzZWxmO1xuXG4vKiogVXNlZCBhcyBhIHJlZmVyZW5jZSB0byB0aGUgZ2xvYmFsIG9iamVjdC4gKi9cbnZhciByb290ID0gZnJlZUdsb2JhbCB8fCBmcmVlU2VsZiB8fCBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYGV4cG9ydHNgLiAqL1xudmFyIGZyZWVFeHBvcnRzID0gdHlwZW9mIGV4cG9ydHMgPT0gJ29iamVjdCcgJiYgZXhwb3J0cyAmJiAhZXhwb3J0cy5ub2RlVHlwZSAmJiBleHBvcnRzO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYG1vZHVsZWAuICovXG52YXIgZnJlZU1vZHVsZSA9IGZyZWVFeHBvcnRzICYmIHR5cGVvZiBtb2R1bGUgPT0gJ29iamVjdCcgJiYgbW9kdWxlICYmICFtb2R1bGUubm9kZVR5cGUgJiYgbW9kdWxlO1xuXG4vKiogRGV0ZWN0IHRoZSBwb3B1bGFyIENvbW1vbkpTIGV4dGVuc2lvbiBgbW9kdWxlLmV4cG9ydHNgLiAqL1xudmFyIG1vZHVsZUV4cG9ydHMgPSBmcmVlTW9kdWxlICYmIGZyZWVNb2R1bGUuZXhwb3J0cyA9PT0gZnJlZUV4cG9ydHM7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgcHJvY2Vzc2AgZnJvbSBOb2RlLmpzLiAqL1xudmFyIGZyZWVQcm9jZXNzID0gbW9kdWxlRXhwb3J0cyAmJiBmcmVlR2xvYmFsLnByb2Nlc3M7XG5cbi8qKiBVc2VkIHRvIGFjY2VzcyBmYXN0ZXIgTm9kZS5qcyBoZWxwZXJzLiAqL1xudmFyIG5vZGVVdGlsID0gKGZ1bmN0aW9uKCkge1xuICB0cnkge1xuICAgIHJldHVybiBmcmVlUHJvY2VzcyAmJiBmcmVlUHJvY2Vzcy5iaW5kaW5nICYmIGZyZWVQcm9jZXNzLmJpbmRpbmcoJ3V0aWwnKTtcbiAgfSBjYXRjaCAoZSkge31cbn0oKSk7XG5cbi8qIE5vZGUuanMgaGVscGVyIHJlZmVyZW5jZXMuICovXG52YXIgbm9kZUlzVHlwZWRBcnJheSA9IG5vZGVVdGlsICYmIG5vZGVVdGlsLmlzVHlwZWRBcnJheTtcblxuLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8uZmlsdGVyYCBmb3IgYXJyYXlzIHdpdGhvdXQgc3VwcG9ydCBmb3JcbiAqIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IFthcnJheV0gVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHByZWRpY2F0ZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgZmlsdGVyZWQgYXJyYXkuXG4gKi9cbmZ1bmN0aW9uIGFycmF5RmlsdGVyKGFycmF5LCBwcmVkaWNhdGUpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aCxcbiAgICAgIHJlc0luZGV4ID0gMCxcbiAgICAgIHJlc3VsdCA9IFtdO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdmFyIHZhbHVlID0gYXJyYXlbaW5kZXhdO1xuICAgIGlmIChwcmVkaWNhdGUodmFsdWUsIGluZGV4LCBhcnJheSkpIHtcbiAgICAgIHJlc3VsdFtyZXNJbmRleCsrXSA9IHZhbHVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIEFwcGVuZHMgdGhlIGVsZW1lbnRzIG9mIGB2YWx1ZXNgIHRvIGBhcnJheWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBtb2RpZnkuXG4gKiBAcGFyYW0ge0FycmF5fSB2YWx1ZXMgVGhlIHZhbHVlcyB0byBhcHBlbmQuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgYGFycmF5YC5cbiAqL1xuZnVuY3Rpb24gYXJyYXlQdXNoKGFycmF5LCB2YWx1ZXMpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSB2YWx1ZXMubGVuZ3RoLFxuICAgICAgb2Zmc2V0ID0gYXJyYXkubGVuZ3RoO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgYXJyYXlbb2Zmc2V0ICsgaW5kZXhdID0gdmFsdWVzW2luZGV4XTtcbiAgfVxuICByZXR1cm4gYXJyYXk7XG59XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBfLnNvbWVgIGZvciBhcnJheXMgd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZVxuICogc2hvcnRoYW5kcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gW2FycmF5XSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gcHJlZGljYXRlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW55IGVsZW1lbnQgcGFzc2VzIHRoZSBwcmVkaWNhdGUgY2hlY2ssXG4gKiAgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBhcnJheVNvbWUoYXJyYXksIHByZWRpY2F0ZSkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgaWYgKHByZWRpY2F0ZShhcnJheVtpbmRleF0sIGluZGV4LCBhcnJheSkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8udGltZXNgIHdpdGhvdXQgc3VwcG9ydCBmb3IgaXRlcmF0ZWUgc2hvcnRoYW5kc1xuICogb3IgbWF4IGFycmF5IGxlbmd0aCBjaGVja3MuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7bnVtYmVyfSBuIFRoZSBudW1iZXIgb2YgdGltZXMgdG8gaW52b2tlIGBpdGVyYXRlZWAuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiByZXN1bHRzLlxuICovXG5mdW5jdGlvbiBiYXNlVGltZXMobiwgaXRlcmF0ZWUpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICByZXN1bHQgPSBBcnJheShuKTtcblxuICB3aGlsZSAoKytpbmRleCA8IG4pIHtcbiAgICByZXN1bHRbaW5kZXhdID0gaXRlcmF0ZWUoaW5kZXgpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8udW5hcnlgIHdpdGhvdXQgc3VwcG9ydCBmb3Igc3RvcmluZyBtZXRhZGF0YS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gY2FwIGFyZ3VtZW50cyBmb3IuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBjYXBwZWQgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGJhc2VVbmFyeShmdW5jKSB7XG4gIHJldHVybiBmdW5jdGlvbih2YWx1ZSkge1xuICAgIHJldHVybiBmdW5jKHZhbHVlKTtcbiAgfTtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgYSBgY2FjaGVgIHZhbHVlIGZvciBga2V5YCBleGlzdHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBjYWNoZSBUaGUgY2FjaGUgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIGVudHJ5IHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGFuIGVudHJ5IGZvciBga2V5YCBleGlzdHMsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gY2FjaGVIYXMoY2FjaGUsIGtleSkge1xuICByZXR1cm4gY2FjaGUuaGFzKGtleSk7XG59XG5cbi8qKlxuICogR2V0cyB0aGUgdmFsdWUgYXQgYGtleWAgb2YgYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb2JqZWN0XSBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcHJvcGVydHkgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIGdldFZhbHVlKG9iamVjdCwga2V5KSB7XG4gIHJldHVybiBvYmplY3QgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IG9iamVjdFtrZXldO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGBtYXBgIHRvIGl0cyBrZXktdmFsdWUgcGFpcnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBtYXAgVGhlIG1hcCB0byBjb252ZXJ0LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBrZXktdmFsdWUgcGFpcnMuXG4gKi9cbmZ1bmN0aW9uIG1hcFRvQXJyYXkobWFwKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgcmVzdWx0ID0gQXJyYXkobWFwLnNpemUpO1xuXG4gIG1hcC5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlLCBrZXkpIHtcbiAgICByZXN1bHRbKytpbmRleF0gPSBba2V5LCB2YWx1ZV07XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSB1bmFyeSBmdW5jdGlvbiB0aGF0IGludm9rZXMgYGZ1bmNgIHdpdGggaXRzIGFyZ3VtZW50IHRyYW5zZm9ybWVkLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byB3cmFwLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gdHJhbnNmb3JtIFRoZSBhcmd1bWVudCB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gb3ZlckFyZyhmdW5jLCB0cmFuc2Zvcm0pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKGFyZykge1xuICAgIHJldHVybiBmdW5jKHRyYW5zZm9ybShhcmcpKTtcbiAgfTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBgc2V0YCB0byBhbiBhcnJheSBvZiBpdHMgdmFsdWVzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gc2V0IFRoZSBzZXQgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgdmFsdWVzLlxuICovXG5mdW5jdGlvbiBzZXRUb0FycmF5KHNldCkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIHJlc3VsdCA9IEFycmF5KHNldC5zaXplKTtcblxuICBzZXQuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSkge1xuICAgIHJlc3VsdFsrK2luZGV4XSA9IHZhbHVlO1xuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIGFycmF5UHJvdG8gPSBBcnJheS5wcm90b3R5cGUsXG4gICAgZnVuY1Byb3RvID0gRnVuY3Rpb24ucHJvdG90eXBlLFxuICAgIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IG92ZXJyZWFjaGluZyBjb3JlLWpzIHNoaW1zLiAqL1xudmFyIGNvcmVKc0RhdGEgPSByb290WydfX2NvcmUtanNfc2hhcmVkX18nXTtcblxuLyoqIFVzZWQgdG8gcmVzb2x2ZSB0aGUgZGVjb21waWxlZCBzb3VyY2Ugb2YgZnVuY3Rpb25zLiAqL1xudmFyIGZ1bmNUb1N0cmluZyA9IGZ1bmNQcm90by50b1N0cmluZztcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IG1ldGhvZHMgbWFzcXVlcmFkaW5nIGFzIG5hdGl2ZS4gKi9cbnZhciBtYXNrU3JjS2V5ID0gKGZ1bmN0aW9uKCkge1xuICB2YXIgdWlkID0gL1teLl0rJC8uZXhlYyhjb3JlSnNEYXRhICYmIGNvcmVKc0RhdGEua2V5cyAmJiBjb3JlSnNEYXRhLmtleXMuSUVfUFJPVE8gfHwgJycpO1xuICByZXR1cm4gdWlkID8gKCdTeW1ib2woc3JjKV8xLicgKyB1aWQpIDogJyc7XG59KCkpO1xuXG4vKipcbiAqIFVzZWQgdG8gcmVzb2x2ZSB0aGVcbiAqIFtgdG9TdHJpbmdUYWdgXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1vYmplY3QucHJvdG90eXBlLnRvc3RyaW5nKVxuICogb2YgdmFsdWVzLlxuICovXG52YXIgbmF0aXZlT2JqZWN0VG9TdHJpbmcgPSBvYmplY3RQcm90by50b1N0cmluZztcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IGlmIGEgbWV0aG9kIGlzIG5hdGl2ZS4gKi9cbnZhciByZUlzTmF0aXZlID0gUmVnRXhwKCdeJyArXG4gIGZ1bmNUb1N0cmluZy5jYWxsKGhhc093blByb3BlcnR5KS5yZXBsYWNlKHJlUmVnRXhwQ2hhciwgJ1xcXFwkJicpXG4gIC5yZXBsYWNlKC9oYXNPd25Qcm9wZXJ0eXwoZnVuY3Rpb24pLio/KD89XFxcXFxcKCl8IGZvciAuKz8oPz1cXFxcXFxdKS9nLCAnJDEuKj8nKSArICckJ1xuKTtcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgQnVmZmVyID0gbW9kdWxlRXhwb3J0cyA/IHJvb3QuQnVmZmVyIDogdW5kZWZpbmVkLFxuICAgIFN5bWJvbCA9IHJvb3QuU3ltYm9sLFxuICAgIFVpbnQ4QXJyYXkgPSByb290LlVpbnQ4QXJyYXksXG4gICAgcHJvcGVydHlJc0VudW1lcmFibGUgPSBvYmplY3RQcm90by5wcm9wZXJ0eUlzRW51bWVyYWJsZSxcbiAgICBzcGxpY2UgPSBhcnJheVByb3RvLnNwbGljZSxcbiAgICBzeW1Ub1N0cmluZ1RhZyA9IFN5bWJvbCA/IFN5bWJvbC50b1N0cmluZ1RhZyA6IHVuZGVmaW5lZDtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgZm9yIHRob3NlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBvdGhlciBgbG9kYXNoYCBtZXRob2RzLiAqL1xudmFyIG5hdGl2ZUdldFN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzLFxuICAgIG5hdGl2ZUlzQnVmZmVyID0gQnVmZmVyID8gQnVmZmVyLmlzQnVmZmVyIDogdW5kZWZpbmVkLFxuICAgIG5hdGl2ZUtleXMgPSBvdmVyQXJnKE9iamVjdC5rZXlzLCBPYmplY3QpO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyB0aGF0IGFyZSB2ZXJpZmllZCB0byBiZSBuYXRpdmUuICovXG52YXIgRGF0YVZpZXcgPSBnZXROYXRpdmUocm9vdCwgJ0RhdGFWaWV3JyksXG4gICAgTWFwID0gZ2V0TmF0aXZlKHJvb3QsICdNYXAnKSxcbiAgICBQcm9taXNlID0gZ2V0TmF0aXZlKHJvb3QsICdQcm9taXNlJyksXG4gICAgU2V0ID0gZ2V0TmF0aXZlKHJvb3QsICdTZXQnKSxcbiAgICBXZWFrTWFwID0gZ2V0TmF0aXZlKHJvb3QsICdXZWFrTWFwJyksXG4gICAgbmF0aXZlQ3JlYXRlID0gZ2V0TmF0aXZlKE9iamVjdCwgJ2NyZWF0ZScpO1xuXG4vKiogVXNlZCB0byBkZXRlY3QgbWFwcywgc2V0cywgYW5kIHdlYWttYXBzLiAqL1xudmFyIGRhdGFWaWV3Q3RvclN0cmluZyA9IHRvU291cmNlKERhdGFWaWV3KSxcbiAgICBtYXBDdG9yU3RyaW5nID0gdG9Tb3VyY2UoTWFwKSxcbiAgICBwcm9taXNlQ3RvclN0cmluZyA9IHRvU291cmNlKFByb21pc2UpLFxuICAgIHNldEN0b3JTdHJpbmcgPSB0b1NvdXJjZShTZXQpLFxuICAgIHdlYWtNYXBDdG9yU3RyaW5nID0gdG9Tb3VyY2UoV2Vha01hcCk7XG5cbi8qKiBVc2VkIHRvIGNvbnZlcnQgc3ltYm9scyB0byBwcmltaXRpdmVzIGFuZCBzdHJpbmdzLiAqL1xudmFyIHN5bWJvbFByb3RvID0gU3ltYm9sID8gU3ltYm9sLnByb3RvdHlwZSA6IHVuZGVmaW5lZCxcbiAgICBzeW1ib2xWYWx1ZU9mID0gc3ltYm9sUHJvdG8gPyBzeW1ib2xQcm90by52YWx1ZU9mIDogdW5kZWZpbmVkO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBoYXNoIG9iamVjdC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge0FycmF5fSBbZW50cmllc10gVGhlIGtleS12YWx1ZSBwYWlycyB0byBjYWNoZS5cbiAqL1xuZnVuY3Rpb24gSGFzaChlbnRyaWVzKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gZW50cmllcyA9PSBudWxsID8gMCA6IGVudHJpZXMubGVuZ3RoO1xuXG4gIHRoaXMuY2xlYXIoKTtcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIgZW50cnkgPSBlbnRyaWVzW2luZGV4XTtcbiAgICB0aGlzLnNldChlbnRyeVswXSwgZW50cnlbMV0pO1xuICB9XG59XG5cbi8qKlxuICogUmVtb3ZlcyBhbGwga2V5LXZhbHVlIGVudHJpZXMgZnJvbSB0aGUgaGFzaC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgY2xlYXJcbiAqIEBtZW1iZXJPZiBIYXNoXG4gKi9cbmZ1bmN0aW9uIGhhc2hDbGVhcigpIHtcbiAgdGhpcy5fX2RhdGFfXyA9IG5hdGl2ZUNyZWF0ZSA/IG5hdGl2ZUNyZWF0ZShudWxsKSA6IHt9O1xuICB0aGlzLnNpemUgPSAwO1xufVxuXG4vKipcbiAqIFJlbW92ZXMgYGtleWAgYW5kIGl0cyB2YWx1ZSBmcm9tIHRoZSBoYXNoLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBkZWxldGVcbiAqIEBtZW1iZXJPZiBIYXNoXG4gKiBAcGFyYW0ge09iamVjdH0gaGFzaCBUaGUgaGFzaCB0byBtb2RpZnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHJlbW92ZS5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgZW50cnkgd2FzIHJlbW92ZWQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaGFzaERlbGV0ZShrZXkpIHtcbiAgdmFyIHJlc3VsdCA9IHRoaXMuaGFzKGtleSkgJiYgZGVsZXRlIHRoaXMuX19kYXRhX19ba2V5XTtcbiAgdGhpcy5zaXplIC09IHJlc3VsdCA/IDEgOiAwO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIEdldHMgdGhlIGhhc2ggdmFsdWUgZm9yIGBrZXlgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBnZXRcbiAqIEBtZW1iZXJPZiBIYXNoXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBlbnRyeSB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gaGFzaEdldChrZXkpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fO1xuICBpZiAobmF0aXZlQ3JlYXRlKSB7XG4gICAgdmFyIHJlc3VsdCA9IGRhdGFba2V5XTtcbiAgICByZXR1cm4gcmVzdWx0ID09PSBIQVNIX1VOREVGSU5FRCA/IHVuZGVmaW5lZCA6IHJlc3VsdDtcbiAgfVxuICByZXR1cm4gaGFzT3duUHJvcGVydHkuY2FsbChkYXRhLCBrZXkpID8gZGF0YVtrZXldIDogdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBhIGhhc2ggdmFsdWUgZm9yIGBrZXlgIGV4aXN0cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgaGFzXG4gKiBAbWVtYmVyT2YgSGFzaFxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBlbnRyeSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbiBlbnRyeSBmb3IgYGtleWAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGhhc2hIYXMoa2V5KSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXztcbiAgcmV0dXJuIG5hdGl2ZUNyZWF0ZSA/IChkYXRhW2tleV0gIT09IHVuZGVmaW5lZCkgOiBoYXNPd25Qcm9wZXJ0eS5jYWxsKGRhdGEsIGtleSk7XG59XG5cbi8qKlxuICogU2V0cyB0aGUgaGFzaCBga2V5YCB0byBgdmFsdWVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBzZXRcbiAqIEBtZW1iZXJPZiBIYXNoXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHNldC5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNldC5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGhhc2ggaW5zdGFuY2UuXG4gKi9cbmZ1bmN0aW9uIGhhc2hTZXQoa2V5LCB2YWx1ZSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX187XG4gIHRoaXMuc2l6ZSArPSB0aGlzLmhhcyhrZXkpID8gMCA6IDE7XG4gIGRhdGFba2V5XSA9IChuYXRpdmVDcmVhdGUgJiYgdmFsdWUgPT09IHVuZGVmaW5lZCkgPyBIQVNIX1VOREVGSU5FRCA6IHZhbHVlO1xuICByZXR1cm4gdGhpcztcbn1cblxuLy8gQWRkIG1ldGhvZHMgdG8gYEhhc2hgLlxuSGFzaC5wcm90b3R5cGUuY2xlYXIgPSBoYXNoQ2xlYXI7XG5IYXNoLnByb3RvdHlwZVsnZGVsZXRlJ10gPSBoYXNoRGVsZXRlO1xuSGFzaC5wcm90b3R5cGUuZ2V0ID0gaGFzaEdldDtcbkhhc2gucHJvdG90eXBlLmhhcyA9IGhhc2hIYXM7XG5IYXNoLnByb3RvdHlwZS5zZXQgPSBoYXNoU2V0O1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gbGlzdCBjYWNoZSBvYmplY3QuXG4gKlxuICogQHByaXZhdGVcbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtBcnJheX0gW2VudHJpZXNdIFRoZSBrZXktdmFsdWUgcGFpcnMgdG8gY2FjaGUuXG4gKi9cbmZ1bmN0aW9uIExpc3RDYWNoZShlbnRyaWVzKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gZW50cmllcyA9PSBudWxsID8gMCA6IGVudHJpZXMubGVuZ3RoO1xuXG4gIHRoaXMuY2xlYXIoKTtcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIgZW50cnkgPSBlbnRyaWVzW2luZGV4XTtcbiAgICB0aGlzLnNldChlbnRyeVswXSwgZW50cnlbMV0pO1xuICB9XG59XG5cbi8qKlxuICogUmVtb3ZlcyBhbGwga2V5LXZhbHVlIGVudHJpZXMgZnJvbSB0aGUgbGlzdCBjYWNoZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgY2xlYXJcbiAqIEBtZW1iZXJPZiBMaXN0Q2FjaGVcbiAqL1xuZnVuY3Rpb24gbGlzdENhY2hlQ2xlYXIoKSB7XG4gIHRoaXMuX19kYXRhX18gPSBbXTtcbiAgdGhpcy5zaXplID0gMDtcbn1cblxuLyoqXG4gKiBSZW1vdmVzIGBrZXlgIGFuZCBpdHMgdmFsdWUgZnJvbSB0aGUgbGlzdCBjYWNoZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZGVsZXRlXG4gKiBAbWVtYmVyT2YgTGlzdENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHJlbW92ZS5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgZW50cnkgd2FzIHJlbW92ZWQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gbGlzdENhY2hlRGVsZXRlKGtleSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX18sXG4gICAgICBpbmRleCA9IGFzc29jSW5kZXhPZihkYXRhLCBrZXkpO1xuXG4gIGlmIChpbmRleCA8IDApIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdmFyIGxhc3RJbmRleCA9IGRhdGEubGVuZ3RoIC0gMTtcbiAgaWYgKGluZGV4ID09IGxhc3RJbmRleCkge1xuICAgIGRhdGEucG9wKCk7XG4gIH0gZWxzZSB7XG4gICAgc3BsaWNlLmNhbGwoZGF0YSwgaW5kZXgsIDEpO1xuICB9XG4gIC0tdGhpcy5zaXplO1xuICByZXR1cm4gdHJ1ZTtcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBsaXN0IGNhY2hlIHZhbHVlIGZvciBga2V5YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZ2V0XG4gKiBAbWVtYmVyT2YgTGlzdENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBlbnRyeSB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gbGlzdENhY2hlR2V0KGtleSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX18sXG4gICAgICBpbmRleCA9IGFzc29jSW5kZXhPZihkYXRhLCBrZXkpO1xuXG4gIHJldHVybiBpbmRleCA8IDAgPyB1bmRlZmluZWQgOiBkYXRhW2luZGV4XVsxXTtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgYSBsaXN0IGNhY2hlIHZhbHVlIGZvciBga2V5YCBleGlzdHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGhhc1xuICogQG1lbWJlck9mIExpc3RDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBlbnRyeSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbiBlbnRyeSBmb3IgYGtleWAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGxpc3RDYWNoZUhhcyhrZXkpIHtcbiAgcmV0dXJuIGFzc29jSW5kZXhPZih0aGlzLl9fZGF0YV9fLCBrZXkpID4gLTE7XG59XG5cbi8qKlxuICogU2V0cyB0aGUgbGlzdCBjYWNoZSBga2V5YCB0byBgdmFsdWVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBzZXRcbiAqIEBtZW1iZXJPZiBMaXN0Q2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gc2V0LlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2V0LlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbGlzdCBjYWNoZSBpbnN0YW5jZS5cbiAqL1xuZnVuY3Rpb24gbGlzdENhY2hlU2V0KGtleSwgdmFsdWUpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fLFxuICAgICAgaW5kZXggPSBhc3NvY0luZGV4T2YoZGF0YSwga2V5KTtcblxuICBpZiAoaW5kZXggPCAwKSB7XG4gICAgKyt0aGlzLnNpemU7XG4gICAgZGF0YS5wdXNoKFtrZXksIHZhbHVlXSk7XG4gIH0gZWxzZSB7XG4gICAgZGF0YVtpbmRleF1bMV0gPSB2YWx1ZTtcbiAgfVxuICByZXR1cm4gdGhpcztcbn1cblxuLy8gQWRkIG1ldGhvZHMgdG8gYExpc3RDYWNoZWAuXG5MaXN0Q2FjaGUucHJvdG90eXBlLmNsZWFyID0gbGlzdENhY2hlQ2xlYXI7XG5MaXN0Q2FjaGUucHJvdG90eXBlWydkZWxldGUnXSA9IGxpc3RDYWNoZURlbGV0ZTtcbkxpc3RDYWNoZS5wcm90b3R5cGUuZ2V0ID0gbGlzdENhY2hlR2V0O1xuTGlzdENhY2hlLnByb3RvdHlwZS5oYXMgPSBsaXN0Q2FjaGVIYXM7XG5MaXN0Q2FjaGUucHJvdG90eXBlLnNldCA9IGxpc3RDYWNoZVNldDtcblxuLyoqXG4gKiBDcmVhdGVzIGEgbWFwIGNhY2hlIG9iamVjdCB0byBzdG9yZSBrZXktdmFsdWUgcGFpcnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtBcnJheX0gW2VudHJpZXNdIFRoZSBrZXktdmFsdWUgcGFpcnMgdG8gY2FjaGUuXG4gKi9cbmZ1bmN0aW9uIE1hcENhY2hlKGVudHJpZXMpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBlbnRyaWVzID09IG51bGwgPyAwIDogZW50cmllcy5sZW5ndGg7XG5cbiAgdGhpcy5jbGVhcigpO1xuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciBlbnRyeSA9IGVudHJpZXNbaW5kZXhdO1xuICAgIHRoaXMuc2V0KGVudHJ5WzBdLCBlbnRyeVsxXSk7XG4gIH1cbn1cblxuLyoqXG4gKiBSZW1vdmVzIGFsbCBrZXktdmFsdWUgZW50cmllcyBmcm9tIHRoZSBtYXAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGNsZWFyXG4gKiBAbWVtYmVyT2YgTWFwQ2FjaGVcbiAqL1xuZnVuY3Rpb24gbWFwQ2FjaGVDbGVhcigpIHtcbiAgdGhpcy5zaXplID0gMDtcbiAgdGhpcy5fX2RhdGFfXyA9IHtcbiAgICAnaGFzaCc6IG5ldyBIYXNoLFxuICAgICdtYXAnOiBuZXcgKE1hcCB8fCBMaXN0Q2FjaGUpLFxuICAgICdzdHJpbmcnOiBuZXcgSGFzaFxuICB9O1xufVxuXG4vKipcbiAqIFJlbW92ZXMgYGtleWAgYW5kIGl0cyB2YWx1ZSBmcm9tIHRoZSBtYXAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGRlbGV0ZVxuICogQG1lbWJlck9mIE1hcENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHJlbW92ZS5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgZW50cnkgd2FzIHJlbW92ZWQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gbWFwQ2FjaGVEZWxldGUoa2V5KSB7XG4gIHZhciByZXN1bHQgPSBnZXRNYXBEYXRhKHRoaXMsIGtleSlbJ2RlbGV0ZSddKGtleSk7XG4gIHRoaXMuc2l6ZSAtPSByZXN1bHQgPyAxIDogMDtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBtYXAgdmFsdWUgZm9yIGBrZXlgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBnZXRcbiAqIEBtZW1iZXJPZiBNYXBDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBnZXQuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZW50cnkgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIG1hcENhY2hlR2V0KGtleSkge1xuICByZXR1cm4gZ2V0TWFwRGF0YSh0aGlzLCBrZXkpLmdldChrZXkpO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBhIG1hcCB2YWx1ZSBmb3IgYGtleWAgZXhpc3RzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBoYXNcbiAqIEBtZW1iZXJPZiBNYXBDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBlbnRyeSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbiBlbnRyeSBmb3IgYGtleWAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIG1hcENhY2hlSGFzKGtleSkge1xuICByZXR1cm4gZ2V0TWFwRGF0YSh0aGlzLCBrZXkpLmhhcyhrZXkpO1xufVxuXG4vKipcbiAqIFNldHMgdGhlIG1hcCBga2V5YCB0byBgdmFsdWVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBzZXRcbiAqIEBtZW1iZXJPZiBNYXBDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBtYXAgY2FjaGUgaW5zdGFuY2UuXG4gKi9cbmZ1bmN0aW9uIG1hcENhY2hlU2V0KGtleSwgdmFsdWUpIHtcbiAgdmFyIGRhdGEgPSBnZXRNYXBEYXRhKHRoaXMsIGtleSksXG4gICAgICBzaXplID0gZGF0YS5zaXplO1xuXG4gIGRhdGEuc2V0KGtleSwgdmFsdWUpO1xuICB0aGlzLnNpemUgKz0gZGF0YS5zaXplID09IHNpemUgPyAwIDogMTtcbiAgcmV0dXJuIHRoaXM7XG59XG5cbi8vIEFkZCBtZXRob2RzIHRvIGBNYXBDYWNoZWAuXG5NYXBDYWNoZS5wcm90b3R5cGUuY2xlYXIgPSBtYXBDYWNoZUNsZWFyO1xuTWFwQ2FjaGUucHJvdG90eXBlWydkZWxldGUnXSA9IG1hcENhY2hlRGVsZXRlO1xuTWFwQ2FjaGUucHJvdG90eXBlLmdldCA9IG1hcENhY2hlR2V0O1xuTWFwQ2FjaGUucHJvdG90eXBlLmhhcyA9IG1hcENhY2hlSGFzO1xuTWFwQ2FjaGUucHJvdG90eXBlLnNldCA9IG1hcENhY2hlU2V0O1xuXG4vKipcbiAqXG4gKiBDcmVhdGVzIGFuIGFycmF5IGNhY2hlIG9iamVjdCB0byBzdG9yZSB1bmlxdWUgdmFsdWVzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7QXJyYXl9IFt2YWx1ZXNdIFRoZSB2YWx1ZXMgdG8gY2FjaGUuXG4gKi9cbmZ1bmN0aW9uIFNldENhY2hlKHZhbHVlcykge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IHZhbHVlcyA9PSBudWxsID8gMCA6IHZhbHVlcy5sZW5ndGg7XG5cbiAgdGhpcy5fX2RhdGFfXyA9IG5ldyBNYXBDYWNoZTtcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB0aGlzLmFkZCh2YWx1ZXNbaW5kZXhdKTtcbiAgfVxufVxuXG4vKipcbiAqIEFkZHMgYHZhbHVlYCB0byB0aGUgYXJyYXkgY2FjaGUuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGFkZFxuICogQG1lbWJlck9mIFNldENhY2hlXG4gKiBAYWxpYXMgcHVzaFxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2FjaGUuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBjYWNoZSBpbnN0YW5jZS5cbiAqL1xuZnVuY3Rpb24gc2V0Q2FjaGVBZGQodmFsdWUpIHtcbiAgdGhpcy5fX2RhdGFfXy5zZXQodmFsdWUsIEhBU0hfVU5ERUZJTkVEKTtcbiAgcmV0dXJuIHRoaXM7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgaW4gdGhlIGFycmF5IGNhY2hlLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBoYXNcbiAqIEBtZW1iZXJPZiBTZXRDYWNoZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2VhcmNoIGZvci5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgZm91bmQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gc2V0Q2FjaGVIYXModmFsdWUpIHtcbiAgcmV0dXJuIHRoaXMuX19kYXRhX18uaGFzKHZhbHVlKTtcbn1cblxuLy8gQWRkIG1ldGhvZHMgdG8gYFNldENhY2hlYC5cblNldENhY2hlLnByb3RvdHlwZS5hZGQgPSBTZXRDYWNoZS5wcm90b3R5cGUucHVzaCA9IHNldENhY2hlQWRkO1xuU2V0Q2FjaGUucHJvdG90eXBlLmhhcyA9IHNldENhY2hlSGFzO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBzdGFjayBjYWNoZSBvYmplY3QgdG8gc3RvcmUga2V5LXZhbHVlIHBhaXJzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7QXJyYXl9IFtlbnRyaWVzXSBUaGUga2V5LXZhbHVlIHBhaXJzIHRvIGNhY2hlLlxuICovXG5mdW5jdGlvbiBTdGFjayhlbnRyaWVzKSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXyA9IG5ldyBMaXN0Q2FjaGUoZW50cmllcyk7XG4gIHRoaXMuc2l6ZSA9IGRhdGEuc2l6ZTtcbn1cblxuLyoqXG4gKiBSZW1vdmVzIGFsbCBrZXktdmFsdWUgZW50cmllcyBmcm9tIHRoZSBzdGFjay5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgY2xlYXJcbiAqIEBtZW1iZXJPZiBTdGFja1xuICovXG5mdW5jdGlvbiBzdGFja0NsZWFyKCkge1xuICB0aGlzLl9fZGF0YV9fID0gbmV3IExpc3RDYWNoZTtcbiAgdGhpcy5zaXplID0gMDtcbn1cblxuLyoqXG4gKiBSZW1vdmVzIGBrZXlgIGFuZCBpdHMgdmFsdWUgZnJvbSB0aGUgc3RhY2suXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGRlbGV0ZVxuICogQG1lbWJlck9mIFN0YWNrXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHJlbW92ZS5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgZW50cnkgd2FzIHJlbW92ZWQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gc3RhY2tEZWxldGUoa2V5KSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXyxcbiAgICAgIHJlc3VsdCA9IGRhdGFbJ2RlbGV0ZSddKGtleSk7XG5cbiAgdGhpcy5zaXplID0gZGF0YS5zaXplO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIEdldHMgdGhlIHN0YWNrIHZhbHVlIGZvciBga2V5YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZ2V0XG4gKiBAbWVtYmVyT2YgU3RhY2tcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gZ2V0LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGVudHJ5IHZhbHVlLlxuICovXG5mdW5jdGlvbiBzdGFja0dldChrZXkpIHtcbiAgcmV0dXJuIHRoaXMuX19kYXRhX18uZ2V0KGtleSk7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgc3RhY2sgdmFsdWUgZm9yIGBrZXlgIGV4aXN0cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgaGFzXG4gKiBAbWVtYmVyT2YgU3RhY2tcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgZW50cnkgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW4gZW50cnkgZm9yIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBzdGFja0hhcyhrZXkpIHtcbiAgcmV0dXJuIHRoaXMuX19kYXRhX18uaGFzKGtleSk7XG59XG5cbi8qKlxuICogU2V0cyB0aGUgc3RhY2sgYGtleWAgdG8gYHZhbHVlYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgc2V0XG4gKiBAbWVtYmVyT2YgU3RhY2tcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gc2V0LlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2V0LlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgc3RhY2sgY2FjaGUgaW5zdGFuY2UuXG4gKi9cbmZ1bmN0aW9uIHN0YWNrU2V0KGtleSwgdmFsdWUpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fO1xuICBpZiAoZGF0YSBpbnN0YW5jZW9mIExpc3RDYWNoZSkge1xuICAgIHZhciBwYWlycyA9IGRhdGEuX19kYXRhX187XG4gICAgaWYgKCFNYXAgfHwgKHBhaXJzLmxlbmd0aCA8IExBUkdFX0FSUkFZX1NJWkUgLSAxKSkge1xuICAgICAgcGFpcnMucHVzaChba2V5LCB2YWx1ZV0pO1xuICAgICAgdGhpcy5zaXplID0gKytkYXRhLnNpemU7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgZGF0YSA9IHRoaXMuX19kYXRhX18gPSBuZXcgTWFwQ2FjaGUocGFpcnMpO1xuICB9XG4gIGRhdGEuc2V0KGtleSwgdmFsdWUpO1xuICB0aGlzLnNpemUgPSBkYXRhLnNpemU7XG4gIHJldHVybiB0aGlzO1xufVxuXG4vLyBBZGQgbWV0aG9kcyB0byBgU3RhY2tgLlxuU3RhY2sucHJvdG90eXBlLmNsZWFyID0gc3RhY2tDbGVhcjtcblN0YWNrLnByb3RvdHlwZVsnZGVsZXRlJ10gPSBzdGFja0RlbGV0ZTtcblN0YWNrLnByb3RvdHlwZS5nZXQgPSBzdGFja0dldDtcblN0YWNrLnByb3RvdHlwZS5oYXMgPSBzdGFja0hhcztcblN0YWNrLnByb3RvdHlwZS5zZXQgPSBzdGFja1NldDtcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IG9mIHRoZSBlbnVtZXJhYmxlIHByb3BlcnR5IG5hbWVzIG9mIHRoZSBhcnJheS1saWtlIGB2YWx1ZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtib29sZWFufSBpbmhlcml0ZWQgU3BlY2lmeSByZXR1cm5pbmcgaW5oZXJpdGVkIHByb3BlcnR5IG5hbWVzLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cbiAqL1xuZnVuY3Rpb24gYXJyYXlMaWtlS2V5cyh2YWx1ZSwgaW5oZXJpdGVkKSB7XG4gIHZhciBpc0FyciA9IGlzQXJyYXkodmFsdWUpLFxuICAgICAgaXNBcmcgPSAhaXNBcnIgJiYgaXNBcmd1bWVudHModmFsdWUpLFxuICAgICAgaXNCdWZmID0gIWlzQXJyICYmICFpc0FyZyAmJiBpc0J1ZmZlcih2YWx1ZSksXG4gICAgICBpc1R5cGUgPSAhaXNBcnIgJiYgIWlzQXJnICYmICFpc0J1ZmYgJiYgaXNUeXBlZEFycmF5KHZhbHVlKSxcbiAgICAgIHNraXBJbmRleGVzID0gaXNBcnIgfHwgaXNBcmcgfHwgaXNCdWZmIHx8IGlzVHlwZSxcbiAgICAgIHJlc3VsdCA9IHNraXBJbmRleGVzID8gYmFzZVRpbWVzKHZhbHVlLmxlbmd0aCwgU3RyaW5nKSA6IFtdLFxuICAgICAgbGVuZ3RoID0gcmVzdWx0Lmxlbmd0aDtcblxuICBmb3IgKHZhciBrZXkgaW4gdmFsdWUpIHtcbiAgICBpZiAoKGluaGVyaXRlZCB8fCBoYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLCBrZXkpKSAmJlxuICAgICAgICAhKHNraXBJbmRleGVzICYmIChcbiAgICAgICAgICAgLy8gU2FmYXJpIDkgaGFzIGVudW1lcmFibGUgYGFyZ3VtZW50cy5sZW5ndGhgIGluIHN0cmljdCBtb2RlLlxuICAgICAgICAgICBrZXkgPT0gJ2xlbmd0aCcgfHxcbiAgICAgICAgICAgLy8gTm9kZS5qcyAwLjEwIGhhcyBlbnVtZXJhYmxlIG5vbi1pbmRleCBwcm9wZXJ0aWVzIG9uIGJ1ZmZlcnMuXG4gICAgICAgICAgIChpc0J1ZmYgJiYgKGtleSA9PSAnb2Zmc2V0JyB8fCBrZXkgPT0gJ3BhcmVudCcpKSB8fFxuICAgICAgICAgICAvLyBQaGFudG9tSlMgMiBoYXMgZW51bWVyYWJsZSBub24taW5kZXggcHJvcGVydGllcyBvbiB0eXBlZCBhcnJheXMuXG4gICAgICAgICAgIChpc1R5cGUgJiYgKGtleSA9PSAnYnVmZmVyJyB8fCBrZXkgPT0gJ2J5dGVMZW5ndGgnIHx8IGtleSA9PSAnYnl0ZU9mZnNldCcpKSB8fFxuICAgICAgICAgICAvLyBTa2lwIGluZGV4IHByb3BlcnRpZXMuXG4gICAgICAgICAgIGlzSW5kZXgoa2V5LCBsZW5ndGgpXG4gICAgICAgICkpKSB7XG4gICAgICByZXN1bHQucHVzaChrZXkpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIEdldHMgdGhlIGluZGV4IGF0IHdoaWNoIHRoZSBga2V5YCBpcyBmb3VuZCBpbiBgYXJyYXlgIG9mIGtleS12YWx1ZSBwYWlycy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gKiBAcGFyYW0geyp9IGtleSBUaGUga2V5IHRvIHNlYXJjaCBmb3IuXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgbWF0Y2hlZCB2YWx1ZSwgZWxzZSBgLTFgLlxuICovXG5mdW5jdGlvbiBhc3NvY0luZGV4T2YoYXJyYXksIGtleSkge1xuICB2YXIgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuICB3aGlsZSAobGVuZ3RoLS0pIHtcbiAgICBpZiAoZXEoYXJyYXlbbGVuZ3RoXVswXSwga2V5KSkge1xuICAgICAgcmV0dXJuIGxlbmd0aDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIC0xO1xufVxuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBnZXRBbGxLZXlzYCBhbmQgYGdldEFsbEtleXNJbmAgd2hpY2ggdXNlc1xuICogYGtleXNGdW5jYCBhbmQgYHN5bWJvbHNGdW5jYCB0byBnZXQgdGhlIGVudW1lcmFibGUgcHJvcGVydHkgbmFtZXMgYW5kXG4gKiBzeW1ib2xzIG9mIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBrZXlzRnVuYyBUaGUgZnVuY3Rpb24gdG8gZ2V0IHRoZSBrZXlzIG9mIGBvYmplY3RgLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gc3ltYm9sc0Z1bmMgVGhlIGZ1bmN0aW9uIHRvIGdldCB0aGUgc3ltYm9scyBvZiBgb2JqZWN0YC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMgYW5kIHN5bWJvbHMuXG4gKi9cbmZ1bmN0aW9uIGJhc2VHZXRBbGxLZXlzKG9iamVjdCwga2V5c0Z1bmMsIHN5bWJvbHNGdW5jKSB7XG4gIHZhciByZXN1bHQgPSBrZXlzRnVuYyhvYmplY3QpO1xuICByZXR1cm4gaXNBcnJheShvYmplY3QpID8gcmVzdWx0IDogYXJyYXlQdXNoKHJlc3VsdCwgc3ltYm9sc0Z1bmMob2JqZWN0KSk7XG59XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYGdldFRhZ2Agd2l0aG91dCBmYWxsYmFja3MgZm9yIGJ1Z2d5IGVudmlyb25tZW50cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBgdG9TdHJpbmdUYWdgLlxuICovXG5mdW5jdGlvbiBiYXNlR2V0VGFnKHZhbHVlKSB7XG4gIGlmICh2YWx1ZSA9PSBudWxsKSB7XG4gICAgcmV0dXJuIHZhbHVlID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWRUYWcgOiBudWxsVGFnO1xuICB9XG4gIHJldHVybiAoc3ltVG9TdHJpbmdUYWcgJiYgc3ltVG9TdHJpbmdUYWcgaW4gT2JqZWN0KHZhbHVlKSlcbiAgICA/IGdldFJhd1RhZyh2YWx1ZSlcbiAgICA6IG9iamVjdFRvU3RyaW5nKHZhbHVlKTtcbn1cblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc0FyZ3VtZW50c2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYW4gYGFyZ3VtZW50c2Agb2JqZWN0LFxuICovXG5mdW5jdGlvbiBiYXNlSXNBcmd1bWVudHModmFsdWUpIHtcbiAgcmV0dXJuIGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgYmFzZUdldFRhZyh2YWx1ZSkgPT0gYXJnc1RhZztcbn1cblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc0VxdWFsYCB3aGljaCBzdXBwb3J0cyBwYXJ0aWFsIGNvbXBhcmlzb25zXG4gKiBhbmQgdHJhY2tzIHRyYXZlcnNlZCBvYmplY3RzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb21wYXJlLlxuICogQHBhcmFtIHsqfSBvdGhlciBUaGUgb3RoZXIgdmFsdWUgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gYml0bWFzayBUaGUgYml0bWFzayBmbGFncy5cbiAqICAxIC0gVW5vcmRlcmVkIGNvbXBhcmlzb25cbiAqICAyIC0gUGFydGlhbCBjb21wYXJpc29uXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY3VzdG9taXplcl0gVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb21wYXJpc29ucy5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbc3RhY2tdIFRyYWNrcyB0cmF2ZXJzZWQgYHZhbHVlYCBhbmQgYG90aGVyYCBvYmplY3RzLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSB2YWx1ZXMgYXJlIGVxdWl2YWxlbnQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUlzRXF1YWwodmFsdWUsIG90aGVyLCBiaXRtYXNrLCBjdXN0b21pemVyLCBzdGFjaykge1xuICBpZiAodmFsdWUgPT09IG90aGVyKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgaWYgKHZhbHVlID09IG51bGwgfHwgb3RoZXIgPT0gbnVsbCB8fCAoIWlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgIWlzT2JqZWN0TGlrZShvdGhlcikpKSB7XG4gICAgcmV0dXJuIHZhbHVlICE9PSB2YWx1ZSAmJiBvdGhlciAhPT0gb3RoZXI7XG4gIH1cbiAgcmV0dXJuIGJhc2VJc0VxdWFsRGVlcCh2YWx1ZSwgb3RoZXIsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGJhc2VJc0VxdWFsLCBzdGFjayk7XG59XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlSXNFcXVhbGAgZm9yIGFycmF5cyBhbmQgb2JqZWN0cyB3aGljaCBwZXJmb3Jtc1xuICogZGVlcCBjb21wYXJpc29ucyBhbmQgdHJhY2tzIHRyYXZlcnNlZCBvYmplY3RzIGVuYWJsaW5nIG9iamVjdHMgd2l0aCBjaXJjdWxhclxuICogcmVmZXJlbmNlcyB0byBiZSBjb21wYXJlZC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0ge09iamVjdH0gb3RoZXIgVGhlIG90aGVyIG9iamVjdCB0byBjb21wYXJlLlxuICogQHBhcmFtIHtudW1iZXJ9IGJpdG1hc2sgVGhlIGJpdG1hc2sgZmxhZ3MuIFNlZSBgYmFzZUlzRXF1YWxgIGZvciBtb3JlIGRldGFpbHMuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjdXN0b21pemVyIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgY29tcGFyaXNvbnMuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBlcXVhbEZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGRldGVybWluZSBlcXVpdmFsZW50cyBvZiB2YWx1ZXMuXG4gKiBAcGFyYW0ge09iamVjdH0gW3N0YWNrXSBUcmFja3MgdHJhdmVyc2VkIGBvYmplY3RgIGFuZCBgb3RoZXJgIG9iamVjdHMuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIG9iamVjdHMgYXJlIGVxdWl2YWxlbnQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUlzRXF1YWxEZWVwKG9iamVjdCwgb3RoZXIsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGVxdWFsRnVuYywgc3RhY2spIHtcbiAgdmFyIG9iaklzQXJyID0gaXNBcnJheShvYmplY3QpLFxuICAgICAgb3RoSXNBcnIgPSBpc0FycmF5KG90aGVyKSxcbiAgICAgIG9ialRhZyA9IG9iaklzQXJyID8gYXJyYXlUYWcgOiBnZXRUYWcob2JqZWN0KSxcbiAgICAgIG90aFRhZyA9IG90aElzQXJyID8gYXJyYXlUYWcgOiBnZXRUYWcob3RoZXIpO1xuXG4gIG9ialRhZyA9IG9ialRhZyA9PSBhcmdzVGFnID8gb2JqZWN0VGFnIDogb2JqVGFnO1xuICBvdGhUYWcgPSBvdGhUYWcgPT0gYXJnc1RhZyA/IG9iamVjdFRhZyA6IG90aFRhZztcblxuICB2YXIgb2JqSXNPYmogPSBvYmpUYWcgPT0gb2JqZWN0VGFnLFxuICAgICAgb3RoSXNPYmogPSBvdGhUYWcgPT0gb2JqZWN0VGFnLFxuICAgICAgaXNTYW1lVGFnID0gb2JqVGFnID09IG90aFRhZztcblxuICBpZiAoaXNTYW1lVGFnICYmIGlzQnVmZmVyKG9iamVjdCkpIHtcbiAgICBpZiAoIWlzQnVmZmVyKG90aGVyKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBvYmpJc0FyciA9IHRydWU7XG4gICAgb2JqSXNPYmogPSBmYWxzZTtcbiAgfVxuICBpZiAoaXNTYW1lVGFnICYmICFvYmpJc09iaikge1xuICAgIHN0YWNrIHx8IChzdGFjayA9IG5ldyBTdGFjayk7XG4gICAgcmV0dXJuIChvYmpJc0FyciB8fCBpc1R5cGVkQXJyYXkob2JqZWN0KSlcbiAgICAgID8gZXF1YWxBcnJheXMob2JqZWN0LCBvdGhlciwgYml0bWFzaywgY3VzdG9taXplciwgZXF1YWxGdW5jLCBzdGFjaylcbiAgICAgIDogZXF1YWxCeVRhZyhvYmplY3QsIG90aGVyLCBvYmpUYWcsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGVxdWFsRnVuYywgc3RhY2spO1xuICB9XG4gIGlmICghKGJpdG1hc2sgJiBDT01QQVJFX1BBUlRJQUxfRkxBRykpIHtcbiAgICB2YXIgb2JqSXNXcmFwcGVkID0gb2JqSXNPYmogJiYgaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsICdfX3dyYXBwZWRfXycpLFxuICAgICAgICBvdGhJc1dyYXBwZWQgPSBvdGhJc09iaiAmJiBoYXNPd25Qcm9wZXJ0eS5jYWxsKG90aGVyLCAnX193cmFwcGVkX18nKTtcblxuICAgIGlmIChvYmpJc1dyYXBwZWQgfHwgb3RoSXNXcmFwcGVkKSB7XG4gICAgICB2YXIgb2JqVW53cmFwcGVkID0gb2JqSXNXcmFwcGVkID8gb2JqZWN0LnZhbHVlKCkgOiBvYmplY3QsXG4gICAgICAgICAgb3RoVW53cmFwcGVkID0gb3RoSXNXcmFwcGVkID8gb3RoZXIudmFsdWUoKSA6IG90aGVyO1xuXG4gICAgICBzdGFjayB8fCAoc3RhY2sgPSBuZXcgU3RhY2spO1xuICAgICAgcmV0dXJuIGVxdWFsRnVuYyhvYmpVbndyYXBwZWQsIG90aFVud3JhcHBlZCwgYml0bWFzaywgY3VzdG9taXplciwgc3RhY2spO1xuICAgIH1cbiAgfVxuICBpZiAoIWlzU2FtZVRhZykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBzdGFjayB8fCAoc3RhY2sgPSBuZXcgU3RhY2spO1xuICByZXR1cm4gZXF1YWxPYmplY3RzKG9iamVjdCwgb3RoZXIsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGVxdWFsRnVuYywgc3RhY2spO1xufVxuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzTmF0aXZlYCB3aXRob3V0IGJhZCBzaGltIGNoZWNrcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIG5hdGl2ZSBmdW5jdGlvbixcbiAqICBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VJc05hdGl2ZSh2YWx1ZSkge1xuICBpZiAoIWlzT2JqZWN0KHZhbHVlKSB8fCBpc01hc2tlZCh2YWx1ZSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdmFyIHBhdHRlcm4gPSBpc0Z1bmN0aW9uKHZhbHVlKSA/IHJlSXNOYXRpdmUgOiByZUlzSG9zdEN0b3I7XG4gIHJldHVybiBwYXR0ZXJuLnRlc3QodG9Tb3VyY2UodmFsdWUpKTtcbn1cblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc1R5cGVkQXJyYXlgIHdpdGhvdXQgTm9kZS5qcyBvcHRpbWl6YXRpb25zLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgdHlwZWQgYXJyYXksIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUlzVHlwZWRBcnJheSh2YWx1ZSkge1xuICByZXR1cm4gaXNPYmplY3RMaWtlKHZhbHVlKSAmJlxuICAgIGlzTGVuZ3RoKHZhbHVlLmxlbmd0aCkgJiYgISF0eXBlZEFycmF5VGFnc1tiYXNlR2V0VGFnKHZhbHVlKV07XG59XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8ua2V5c2Agd2hpY2ggZG9lc24ndCB0cmVhdCBzcGFyc2UgYXJyYXlzIGFzIGRlbnNlLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzLlxuICovXG5mdW5jdGlvbiBiYXNlS2V5cyhvYmplY3QpIHtcbiAgaWYgKCFpc1Byb3RvdHlwZShvYmplY3QpKSB7XG4gICAgcmV0dXJuIG5hdGl2ZUtleXMob2JqZWN0KTtcbiAgfVxuICB2YXIgcmVzdWx0ID0gW107XG4gIGZvciAodmFyIGtleSBpbiBPYmplY3Qob2JqZWN0KSkge1xuICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwga2V5KSAmJiBrZXkgIT0gJ2NvbnN0cnVjdG9yJykge1xuICAgICAgcmVzdWx0LnB1c2goa2V5KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYGJhc2VJc0VxdWFsRGVlcGAgZm9yIGFycmF5cyB3aXRoIHN1cHBvcnQgZm9yXG4gKiBwYXJ0aWFsIGRlZXAgY29tcGFyaXNvbnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBjb21wYXJlLlxuICogQHBhcmFtIHtBcnJheX0gb3RoZXIgVGhlIG90aGVyIGFycmF5IHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0ge251bWJlcn0gYml0bWFzayBUaGUgYml0bWFzayBmbGFncy4gU2VlIGBiYXNlSXNFcXVhbGAgZm9yIG1vcmUgZGV0YWlscy5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGN1c3RvbWl6ZXIgVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb21wYXJpc29ucy5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGVxdWFsRnVuYyBUaGUgZnVuY3Rpb24gdG8gZGV0ZXJtaW5lIGVxdWl2YWxlbnRzIG9mIHZhbHVlcy5cbiAqIEBwYXJhbSB7T2JqZWN0fSBzdGFjayBUcmFja3MgdHJhdmVyc2VkIGBhcnJheWAgYW5kIGBvdGhlcmAgb2JqZWN0cy5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgYXJyYXlzIGFyZSBlcXVpdmFsZW50LCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGVxdWFsQXJyYXlzKGFycmF5LCBvdGhlciwgYml0bWFzaywgY3VzdG9taXplciwgZXF1YWxGdW5jLCBzdGFjaykge1xuICB2YXIgaXNQYXJ0aWFsID0gYml0bWFzayAmIENPTVBBUkVfUEFSVElBTF9GTEFHLFxuICAgICAgYXJyTGVuZ3RoID0gYXJyYXkubGVuZ3RoLFxuICAgICAgb3RoTGVuZ3RoID0gb3RoZXIubGVuZ3RoO1xuXG4gIGlmIChhcnJMZW5ndGggIT0gb3RoTGVuZ3RoICYmICEoaXNQYXJ0aWFsICYmIG90aExlbmd0aCA+IGFyckxlbmd0aCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgLy8gQXNzdW1lIGN5Y2xpYyB2YWx1ZXMgYXJlIGVxdWFsLlxuICB2YXIgc3RhY2tlZCA9IHN0YWNrLmdldChhcnJheSk7XG4gIGlmIChzdGFja2VkICYmIHN0YWNrLmdldChvdGhlcikpIHtcbiAgICByZXR1cm4gc3RhY2tlZCA9PSBvdGhlcjtcbiAgfVxuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIHJlc3VsdCA9IHRydWUsXG4gICAgICBzZWVuID0gKGJpdG1hc2sgJiBDT01QQVJFX1VOT1JERVJFRF9GTEFHKSA/IG5ldyBTZXRDYWNoZSA6IHVuZGVmaW5lZDtcblxuICBzdGFjay5zZXQoYXJyYXksIG90aGVyKTtcbiAgc3RhY2suc2V0KG90aGVyLCBhcnJheSk7XG5cbiAgLy8gSWdub3JlIG5vbi1pbmRleCBwcm9wZXJ0aWVzLlxuICB3aGlsZSAoKytpbmRleCA8IGFyckxlbmd0aCkge1xuICAgIHZhciBhcnJWYWx1ZSA9IGFycmF5W2luZGV4XSxcbiAgICAgICAgb3RoVmFsdWUgPSBvdGhlcltpbmRleF07XG5cbiAgICBpZiAoY3VzdG9taXplcikge1xuICAgICAgdmFyIGNvbXBhcmVkID0gaXNQYXJ0aWFsXG4gICAgICAgID8gY3VzdG9taXplcihvdGhWYWx1ZSwgYXJyVmFsdWUsIGluZGV4LCBvdGhlciwgYXJyYXksIHN0YWNrKVxuICAgICAgICA6IGN1c3RvbWl6ZXIoYXJyVmFsdWUsIG90aFZhbHVlLCBpbmRleCwgYXJyYXksIG90aGVyLCBzdGFjayk7XG4gICAgfVxuICAgIGlmIChjb21wYXJlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAoY29tcGFyZWQpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICByZXN1bHQgPSBmYWxzZTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICAvLyBSZWN1cnNpdmVseSBjb21wYXJlIGFycmF5cyAoc3VzY2VwdGlibGUgdG8gY2FsbCBzdGFjayBsaW1pdHMpLlxuICAgIGlmIChzZWVuKSB7XG4gICAgICBpZiAoIWFycmF5U29tZShvdGhlciwgZnVuY3Rpb24ob3RoVmFsdWUsIG90aEluZGV4KSB7XG4gICAgICAgICAgICBpZiAoIWNhY2hlSGFzKHNlZW4sIG90aEluZGV4KSAmJlxuICAgICAgICAgICAgICAgIChhcnJWYWx1ZSA9PT0gb3RoVmFsdWUgfHwgZXF1YWxGdW5jKGFyclZhbHVlLCBvdGhWYWx1ZSwgYml0bWFzaywgY3VzdG9taXplciwgc3RhY2spKSkge1xuICAgICAgICAgICAgICByZXR1cm4gc2Vlbi5wdXNoKG90aEluZGV4KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSkge1xuICAgICAgICByZXN1bHQgPSBmYWxzZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICghKFxuICAgICAgICAgIGFyclZhbHVlID09PSBvdGhWYWx1ZSB8fFxuICAgICAgICAgICAgZXF1YWxGdW5jKGFyclZhbHVlLCBvdGhWYWx1ZSwgYml0bWFzaywgY3VzdG9taXplciwgc3RhY2spXG4gICAgICAgICkpIHtcbiAgICAgIHJlc3VsdCA9IGZhbHNlO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHN0YWNrWydkZWxldGUnXShhcnJheSk7XG4gIHN0YWNrWydkZWxldGUnXShvdGhlcik7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlSXNFcXVhbERlZXBgIGZvciBjb21wYXJpbmcgb2JqZWN0cyBvZlxuICogdGhlIHNhbWUgYHRvU3RyaW5nVGFnYC5cbiAqXG4gKiAqKk5vdGU6KiogVGhpcyBmdW5jdGlvbiBvbmx5IHN1cHBvcnRzIGNvbXBhcmluZyB2YWx1ZXMgd2l0aCB0YWdzIG9mXG4gKiBgQm9vbGVhbmAsIGBEYXRlYCwgYEVycm9yYCwgYE51bWJlcmAsIGBSZWdFeHBgLCBvciBgU3RyaW5nYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0ge09iamVjdH0gb3RoZXIgVGhlIG90aGVyIG9iamVjdCB0byBjb21wYXJlLlxuICogQHBhcmFtIHtzdHJpbmd9IHRhZyBUaGUgYHRvU3RyaW5nVGFnYCBvZiB0aGUgb2JqZWN0cyB0byBjb21wYXJlLlxuICogQHBhcmFtIHtudW1iZXJ9IGJpdG1hc2sgVGhlIGJpdG1hc2sgZmxhZ3MuIFNlZSBgYmFzZUlzRXF1YWxgIGZvciBtb3JlIGRldGFpbHMuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjdXN0b21pemVyIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgY29tcGFyaXNvbnMuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBlcXVhbEZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGRldGVybWluZSBlcXVpdmFsZW50cyBvZiB2YWx1ZXMuXG4gKiBAcGFyYW0ge09iamVjdH0gc3RhY2sgVHJhY2tzIHRyYXZlcnNlZCBgb2JqZWN0YCBhbmQgYG90aGVyYCBvYmplY3RzLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBvYmplY3RzIGFyZSBlcXVpdmFsZW50LCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGVxdWFsQnlUYWcob2JqZWN0LCBvdGhlciwgdGFnLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKSB7XG4gIHN3aXRjaCAodGFnKSB7XG4gICAgY2FzZSBkYXRhVmlld1RhZzpcbiAgICAgIGlmICgob2JqZWN0LmJ5dGVMZW5ndGggIT0gb3RoZXIuYnl0ZUxlbmd0aCkgfHxcbiAgICAgICAgICAob2JqZWN0LmJ5dGVPZmZzZXQgIT0gb3RoZXIuYnl0ZU9mZnNldCkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgb2JqZWN0ID0gb2JqZWN0LmJ1ZmZlcjtcbiAgICAgIG90aGVyID0gb3RoZXIuYnVmZmVyO1xuXG4gICAgY2FzZSBhcnJheUJ1ZmZlclRhZzpcbiAgICAgIGlmICgob2JqZWN0LmJ5dGVMZW5ndGggIT0gb3RoZXIuYnl0ZUxlbmd0aCkgfHxcbiAgICAgICAgICAhZXF1YWxGdW5jKG5ldyBVaW50OEFycmF5KG9iamVjdCksIG5ldyBVaW50OEFycmF5KG90aGVyKSkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG5cbiAgICBjYXNlIGJvb2xUYWc6XG4gICAgY2FzZSBkYXRlVGFnOlxuICAgIGNhc2UgbnVtYmVyVGFnOlxuICAgICAgLy8gQ29lcmNlIGJvb2xlYW5zIHRvIGAxYCBvciBgMGAgYW5kIGRhdGVzIHRvIG1pbGxpc2Vjb25kcy5cbiAgICAgIC8vIEludmFsaWQgZGF0ZXMgYXJlIGNvZXJjZWQgdG8gYE5hTmAuXG4gICAgICByZXR1cm4gZXEoK29iamVjdCwgK290aGVyKTtcblxuICAgIGNhc2UgZXJyb3JUYWc6XG4gICAgICByZXR1cm4gb2JqZWN0Lm5hbWUgPT0gb3RoZXIubmFtZSAmJiBvYmplY3QubWVzc2FnZSA9PSBvdGhlci5tZXNzYWdlO1xuXG4gICAgY2FzZSByZWdleHBUYWc6XG4gICAgY2FzZSBzdHJpbmdUYWc6XG4gICAgICAvLyBDb2VyY2UgcmVnZXhlcyB0byBzdHJpbmdzIGFuZCB0cmVhdCBzdHJpbmdzLCBwcmltaXRpdmVzIGFuZCBvYmplY3RzLFxuICAgICAgLy8gYXMgZXF1YWwuIFNlZSBodHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtcmVnZXhwLnByb3RvdHlwZS50b3N0cmluZ1xuICAgICAgLy8gZm9yIG1vcmUgZGV0YWlscy5cbiAgICAgIHJldHVybiBvYmplY3QgPT0gKG90aGVyICsgJycpO1xuXG4gICAgY2FzZSBtYXBUYWc6XG4gICAgICB2YXIgY29udmVydCA9IG1hcFRvQXJyYXk7XG5cbiAgICBjYXNlIHNldFRhZzpcbiAgICAgIHZhciBpc1BhcnRpYWwgPSBiaXRtYXNrICYgQ09NUEFSRV9QQVJUSUFMX0ZMQUc7XG4gICAgICBjb252ZXJ0IHx8IChjb252ZXJ0ID0gc2V0VG9BcnJheSk7XG5cbiAgICAgIGlmIChvYmplY3Quc2l6ZSAhPSBvdGhlci5zaXplICYmICFpc1BhcnRpYWwpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgLy8gQXNzdW1lIGN5Y2xpYyB2YWx1ZXMgYXJlIGVxdWFsLlxuICAgICAgdmFyIHN0YWNrZWQgPSBzdGFjay5nZXQob2JqZWN0KTtcbiAgICAgIGlmIChzdGFja2VkKSB7XG4gICAgICAgIHJldHVybiBzdGFja2VkID09IG90aGVyO1xuICAgICAgfVxuICAgICAgYml0bWFzayB8PSBDT01QQVJFX1VOT1JERVJFRF9GTEFHO1xuXG4gICAgICAvLyBSZWN1cnNpdmVseSBjb21wYXJlIG9iamVjdHMgKHN1c2NlcHRpYmxlIHRvIGNhbGwgc3RhY2sgbGltaXRzKS5cbiAgICAgIHN0YWNrLnNldChvYmplY3QsIG90aGVyKTtcbiAgICAgIHZhciByZXN1bHQgPSBlcXVhbEFycmF5cyhjb252ZXJ0KG9iamVjdCksIGNvbnZlcnQob3RoZXIpLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKTtcbiAgICAgIHN0YWNrWydkZWxldGUnXShvYmplY3QpO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcblxuICAgIGNhc2Ugc3ltYm9sVGFnOlxuICAgICAgaWYgKHN5bWJvbFZhbHVlT2YpIHtcbiAgICAgICAgcmV0dXJuIHN5bWJvbFZhbHVlT2YuY2FsbChvYmplY3QpID09IHN5bWJvbFZhbHVlT2YuY2FsbChvdGhlcik7XG4gICAgICB9XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZUlzRXF1YWxEZWVwYCBmb3Igb2JqZWN0cyB3aXRoIHN1cHBvcnQgZm9yXG4gKiBwYXJ0aWFsIGRlZXAgY29tcGFyaXNvbnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBjb21wYXJlLlxuICogQHBhcmFtIHtPYmplY3R9IG90aGVyIFRoZSBvdGhlciBvYmplY3QgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLiBTZWUgYGJhc2VJc0VxdWFsYCBmb3IgbW9yZSBkZXRhaWxzLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gY3VzdG9taXplciBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNvbXBhcmlzb25zLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZXF1YWxGdW5jIFRoZSBmdW5jdGlvbiB0byBkZXRlcm1pbmUgZXF1aXZhbGVudHMgb2YgdmFsdWVzLlxuICogQHBhcmFtIHtPYmplY3R9IHN0YWNrIFRyYWNrcyB0cmF2ZXJzZWQgYG9iamVjdGAgYW5kIGBvdGhlcmAgb2JqZWN0cy5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgb2JqZWN0cyBhcmUgZXF1aXZhbGVudCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBlcXVhbE9iamVjdHMob2JqZWN0LCBvdGhlciwgYml0bWFzaywgY3VzdG9taXplciwgZXF1YWxGdW5jLCBzdGFjaykge1xuICB2YXIgaXNQYXJ0aWFsID0gYml0bWFzayAmIENPTVBBUkVfUEFSVElBTF9GTEFHLFxuICAgICAgb2JqUHJvcHMgPSBnZXRBbGxLZXlzKG9iamVjdCksXG4gICAgICBvYmpMZW5ndGggPSBvYmpQcm9wcy5sZW5ndGgsXG4gICAgICBvdGhQcm9wcyA9IGdldEFsbEtleXMob3RoZXIpLFxuICAgICAgb3RoTGVuZ3RoID0gb3RoUHJvcHMubGVuZ3RoO1xuXG4gIGlmIChvYmpMZW5ndGggIT0gb3RoTGVuZ3RoICYmICFpc1BhcnRpYWwpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdmFyIGluZGV4ID0gb2JqTGVuZ3RoO1xuICB3aGlsZSAoaW5kZXgtLSkge1xuICAgIHZhciBrZXkgPSBvYmpQcm9wc1tpbmRleF07XG4gICAgaWYgKCEoaXNQYXJ0aWFsID8ga2V5IGluIG90aGVyIDogaGFzT3duUHJvcGVydHkuY2FsbChvdGhlciwga2V5KSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbiAgLy8gQXNzdW1lIGN5Y2xpYyB2YWx1ZXMgYXJlIGVxdWFsLlxuICB2YXIgc3RhY2tlZCA9IHN0YWNrLmdldChvYmplY3QpO1xuICBpZiAoc3RhY2tlZCAmJiBzdGFjay5nZXQob3RoZXIpKSB7XG4gICAgcmV0dXJuIHN0YWNrZWQgPT0gb3RoZXI7XG4gIH1cbiAgdmFyIHJlc3VsdCA9IHRydWU7XG4gIHN0YWNrLnNldChvYmplY3QsIG90aGVyKTtcbiAgc3RhY2suc2V0KG90aGVyLCBvYmplY3QpO1xuXG4gIHZhciBza2lwQ3RvciA9IGlzUGFydGlhbDtcbiAgd2hpbGUgKCsraW5kZXggPCBvYmpMZW5ndGgpIHtcbiAgICBrZXkgPSBvYmpQcm9wc1tpbmRleF07XG4gICAgdmFyIG9ialZhbHVlID0gb2JqZWN0W2tleV0sXG4gICAgICAgIG90aFZhbHVlID0gb3RoZXJba2V5XTtcblxuICAgIGlmIChjdXN0b21pemVyKSB7XG4gICAgICB2YXIgY29tcGFyZWQgPSBpc1BhcnRpYWxcbiAgICAgICAgPyBjdXN0b21pemVyKG90aFZhbHVlLCBvYmpWYWx1ZSwga2V5LCBvdGhlciwgb2JqZWN0LCBzdGFjaylcbiAgICAgICAgOiBjdXN0b21pemVyKG9ialZhbHVlLCBvdGhWYWx1ZSwga2V5LCBvYmplY3QsIG90aGVyLCBzdGFjayk7XG4gICAgfVxuICAgIC8vIFJlY3Vyc2l2ZWx5IGNvbXBhcmUgb2JqZWN0cyAoc3VzY2VwdGlibGUgdG8gY2FsbCBzdGFjayBsaW1pdHMpLlxuICAgIGlmICghKGNvbXBhcmVkID09PSB1bmRlZmluZWRcbiAgICAgICAgICA/IChvYmpWYWx1ZSA9PT0gb3RoVmFsdWUgfHwgZXF1YWxGdW5jKG9ialZhbHVlLCBvdGhWYWx1ZSwgYml0bWFzaywgY3VzdG9taXplciwgc3RhY2spKVxuICAgICAgICAgIDogY29tcGFyZWRcbiAgICAgICAgKSkge1xuICAgICAgcmVzdWx0ID0gZmFsc2U7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgc2tpcEN0b3IgfHwgKHNraXBDdG9yID0ga2V5ID09ICdjb25zdHJ1Y3RvcicpO1xuICB9XG4gIGlmIChyZXN1bHQgJiYgIXNraXBDdG9yKSB7XG4gICAgdmFyIG9iakN0b3IgPSBvYmplY3QuY29uc3RydWN0b3IsXG4gICAgICAgIG90aEN0b3IgPSBvdGhlci5jb25zdHJ1Y3RvcjtcblxuICAgIC8vIE5vbiBgT2JqZWN0YCBvYmplY3QgaW5zdGFuY2VzIHdpdGggZGlmZmVyZW50IGNvbnN0cnVjdG9ycyBhcmUgbm90IGVxdWFsLlxuICAgIGlmIChvYmpDdG9yICE9IG90aEN0b3IgJiZcbiAgICAgICAgKCdjb25zdHJ1Y3RvcicgaW4gb2JqZWN0ICYmICdjb25zdHJ1Y3RvcicgaW4gb3RoZXIpICYmXG4gICAgICAgICEodHlwZW9mIG9iakN0b3IgPT0gJ2Z1bmN0aW9uJyAmJiBvYmpDdG9yIGluc3RhbmNlb2Ygb2JqQ3RvciAmJlxuICAgICAgICAgIHR5cGVvZiBvdGhDdG9yID09ICdmdW5jdGlvbicgJiYgb3RoQ3RvciBpbnN0YW5jZW9mIG90aEN0b3IpKSB7XG4gICAgICByZXN1bHQgPSBmYWxzZTtcbiAgICB9XG4gIH1cbiAgc3RhY2tbJ2RlbGV0ZSddKG9iamVjdCk7XG4gIHN0YWNrWydkZWxldGUnXShvdGhlcik7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBvZiBvd24gZW51bWVyYWJsZSBwcm9wZXJ0eSBuYW1lcyBhbmQgc3ltYm9scyBvZiBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcyBhbmQgc3ltYm9scy5cbiAqL1xuZnVuY3Rpb24gZ2V0QWxsS2V5cyhvYmplY3QpIHtcbiAgcmV0dXJuIGJhc2VHZXRBbGxLZXlzKG9iamVjdCwga2V5cywgZ2V0U3ltYm9scyk7XG59XG5cbi8qKlxuICogR2V0cyB0aGUgZGF0YSBmb3IgYG1hcGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBtYXAgVGhlIG1hcCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIHJlZmVyZW5jZSBrZXkuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgbWFwIGRhdGEuXG4gKi9cbmZ1bmN0aW9uIGdldE1hcERhdGEobWFwLCBrZXkpIHtcbiAgdmFyIGRhdGEgPSBtYXAuX19kYXRhX187XG4gIHJldHVybiBpc0tleWFibGUoa2V5KVxuICAgID8gZGF0YVt0eXBlb2Yga2V5ID09ICdzdHJpbmcnID8gJ3N0cmluZycgOiAnaGFzaCddXG4gICAgOiBkYXRhLm1hcDtcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBuYXRpdmUgZnVuY3Rpb24gYXQgYGtleWAgb2YgYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgbWV0aG9kIHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBmdW5jdGlvbiBpZiBpdCdzIG5hdGl2ZSwgZWxzZSBgdW5kZWZpbmVkYC5cbiAqL1xuZnVuY3Rpb24gZ2V0TmF0aXZlKG9iamVjdCwga2V5KSB7XG4gIHZhciB2YWx1ZSA9IGdldFZhbHVlKG9iamVjdCwga2V5KTtcbiAgcmV0dXJuIGJhc2VJc05hdGl2ZSh2YWx1ZSkgPyB2YWx1ZSA6IHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYGJhc2VHZXRUYWdgIHdoaWNoIGlnbm9yZXMgYFN5bWJvbC50b1N0cmluZ1RhZ2AgdmFsdWVzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHJhdyBgdG9TdHJpbmdUYWdgLlxuICovXG5mdW5jdGlvbiBnZXRSYXdUYWcodmFsdWUpIHtcbiAgdmFyIGlzT3duID0gaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSwgc3ltVG9TdHJpbmdUYWcpLFxuICAgICAgdGFnID0gdmFsdWVbc3ltVG9TdHJpbmdUYWddO1xuXG4gIHRyeSB7XG4gICAgdmFsdWVbc3ltVG9TdHJpbmdUYWddID0gdW5kZWZpbmVkO1xuICAgIHZhciB1bm1hc2tlZCA9IHRydWU7XG4gIH0gY2F0Y2ggKGUpIHt9XG5cbiAgdmFyIHJlc3VsdCA9IG5hdGl2ZU9iamVjdFRvU3RyaW5nLmNhbGwodmFsdWUpO1xuICBpZiAodW5tYXNrZWQpIHtcbiAgICBpZiAoaXNPd24pIHtcbiAgICAgIHZhbHVlW3N5bVRvU3RyaW5nVGFnXSA9IHRhZztcbiAgICB9IGVsc2Uge1xuICAgICAgZGVsZXRlIHZhbHVlW3N5bVRvU3RyaW5nVGFnXTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IG9mIHRoZSBvd24gZW51bWVyYWJsZSBzeW1ib2xzIG9mIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHN5bWJvbHMuXG4gKi9cbnZhciBnZXRTeW1ib2xzID0gIW5hdGl2ZUdldFN5bWJvbHMgPyBzdHViQXJyYXkgOiBmdW5jdGlvbihvYmplY3QpIHtcbiAgaWYgKG9iamVjdCA9PSBudWxsKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG4gIG9iamVjdCA9IE9iamVjdChvYmplY3QpO1xuICByZXR1cm4gYXJyYXlGaWx0ZXIobmF0aXZlR2V0U3ltYm9scyhvYmplY3QpLCBmdW5jdGlvbihzeW1ib2wpIHtcbiAgICByZXR1cm4gcHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChvYmplY3QsIHN5bWJvbCk7XG4gIH0pO1xufTtcblxuLyoqXG4gKiBHZXRzIHRoZSBgdG9TdHJpbmdUYWdgIG9mIGB2YWx1ZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHF1ZXJ5LlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgYHRvU3RyaW5nVGFnYC5cbiAqL1xudmFyIGdldFRhZyA9IGJhc2VHZXRUYWc7XG5cbi8vIEZhbGxiYWNrIGZvciBkYXRhIHZpZXdzLCBtYXBzLCBzZXRzLCBhbmQgd2VhayBtYXBzIGluIElFIDExIGFuZCBwcm9taXNlcyBpbiBOb2RlLmpzIDwgNi5cbmlmICgoRGF0YVZpZXcgJiYgZ2V0VGFnKG5ldyBEYXRhVmlldyhuZXcgQXJyYXlCdWZmZXIoMSkpKSAhPSBkYXRhVmlld1RhZykgfHxcbiAgICAoTWFwICYmIGdldFRhZyhuZXcgTWFwKSAhPSBtYXBUYWcpIHx8XG4gICAgKFByb21pc2UgJiYgZ2V0VGFnKFByb21pc2UucmVzb2x2ZSgpKSAhPSBwcm9taXNlVGFnKSB8fFxuICAgIChTZXQgJiYgZ2V0VGFnKG5ldyBTZXQpICE9IHNldFRhZykgfHxcbiAgICAoV2Vha01hcCAmJiBnZXRUYWcobmV3IFdlYWtNYXApICE9IHdlYWtNYXBUYWcpKSB7XG4gIGdldFRhZyA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgdmFyIHJlc3VsdCA9IGJhc2VHZXRUYWcodmFsdWUpLFxuICAgICAgICBDdG9yID0gcmVzdWx0ID09IG9iamVjdFRhZyA/IHZhbHVlLmNvbnN0cnVjdG9yIDogdW5kZWZpbmVkLFxuICAgICAgICBjdG9yU3RyaW5nID0gQ3RvciA/IHRvU291cmNlKEN0b3IpIDogJyc7XG5cbiAgICBpZiAoY3RvclN0cmluZykge1xuICAgICAgc3dpdGNoIChjdG9yU3RyaW5nKSB7XG4gICAgICAgIGNhc2UgZGF0YVZpZXdDdG9yU3RyaW5nOiByZXR1cm4gZGF0YVZpZXdUYWc7XG4gICAgICAgIGNhc2UgbWFwQ3RvclN0cmluZzogcmV0dXJuIG1hcFRhZztcbiAgICAgICAgY2FzZSBwcm9taXNlQ3RvclN0cmluZzogcmV0dXJuIHByb21pc2VUYWc7XG4gICAgICAgIGNhc2Ugc2V0Q3RvclN0cmluZzogcmV0dXJuIHNldFRhZztcbiAgICAgICAgY2FzZSB3ZWFrTWFwQ3RvclN0cmluZzogcmV0dXJuIHdlYWtNYXBUYWc7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSB2YWxpZCBhcnJheS1saWtlIGluZGV4LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbbGVuZ3RoPU1BWF9TQUZFX0lOVEVHRVJdIFRoZSB1cHBlciBib3VuZHMgb2YgYSB2YWxpZCBpbmRleC5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgdmFsaWQgaW5kZXgsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNJbmRleCh2YWx1ZSwgbGVuZ3RoKSB7XG4gIGxlbmd0aCA9IGxlbmd0aCA9PSBudWxsID8gTUFYX1NBRkVfSU5URUdFUiA6IGxlbmd0aDtcbiAgcmV0dXJuICEhbGVuZ3RoICYmXG4gICAgKHR5cGVvZiB2YWx1ZSA9PSAnbnVtYmVyJyB8fCByZUlzVWludC50ZXN0KHZhbHVlKSkgJiZcbiAgICAodmFsdWUgPiAtMSAmJiB2YWx1ZSAlIDEgPT0gMCAmJiB2YWx1ZSA8IGxlbmd0aCk7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgc3VpdGFibGUgZm9yIHVzZSBhcyB1bmlxdWUgb2JqZWN0IGtleS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBzdWl0YWJsZSwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBpc0tleWFibGUodmFsdWUpIHtcbiAgdmFyIHR5cGUgPSB0eXBlb2YgdmFsdWU7XG4gIHJldHVybiAodHlwZSA9PSAnc3RyaW5nJyB8fCB0eXBlID09ICdudW1iZXInIHx8IHR5cGUgPT0gJ3N5bWJvbCcgfHwgdHlwZSA9PSAnYm9vbGVhbicpXG4gICAgPyAodmFsdWUgIT09ICdfX3Byb3RvX18nKVxuICAgIDogKHZhbHVlID09PSBudWxsKTtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgYGZ1bmNgIGhhcyBpdHMgc291cmNlIG1hc2tlZC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYGZ1bmNgIGlzIG1hc2tlZCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBpc01hc2tlZChmdW5jKSB7XG4gIHJldHVybiAhIW1hc2tTcmNLZXkgJiYgKG1hc2tTcmNLZXkgaW4gZnVuYyk7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgbGlrZWx5IGEgcHJvdG90eXBlIG9iamVjdC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHByb3RvdHlwZSwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBpc1Byb3RvdHlwZSh2YWx1ZSkge1xuICB2YXIgQ3RvciA9IHZhbHVlICYmIHZhbHVlLmNvbnN0cnVjdG9yLFxuICAgICAgcHJvdG8gPSAodHlwZW9mIEN0b3IgPT0gJ2Z1bmN0aW9uJyAmJiBDdG9yLnByb3RvdHlwZSkgfHwgb2JqZWN0UHJvdG87XG5cbiAgcmV0dXJuIHZhbHVlID09PSBwcm90bztcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGEgc3RyaW5nIHVzaW5nIGBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGNvbnZlcnRlZCBzdHJpbmcuXG4gKi9cbmZ1bmN0aW9uIG9iamVjdFRvU3RyaW5nKHZhbHVlKSB7XG4gIHJldHVybiBuYXRpdmVPYmplY3RUb1N0cmluZy5jYWxsKHZhbHVlKTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBgZnVuY2AgdG8gaXRzIHNvdXJjZSBjb2RlLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBjb252ZXJ0LlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgc291cmNlIGNvZGUuXG4gKi9cbmZ1bmN0aW9uIHRvU291cmNlKGZ1bmMpIHtcbiAgaWYgKGZ1bmMgIT0gbnVsbCkge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gZnVuY1RvU3RyaW5nLmNhbGwoZnVuYyk7XG4gICAgfSBjYXRjaCAoZSkge31cbiAgICB0cnkge1xuICAgICAgcmV0dXJuIChmdW5jICsgJycpO1xuICAgIH0gY2F0Y2ggKGUpIHt9XG4gIH1cbiAgcmV0dXJuICcnO1xufVxuXG4vKipcbiAqIFBlcmZvcm1zIGFcbiAqIFtgU2FtZVZhbHVlWmVyb2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXNhbWV2YWx1ZXplcm8pXG4gKiBjb21wYXJpc29uIGJldHdlZW4gdHdvIHZhbHVlcyB0byBkZXRlcm1pbmUgaWYgdGhleSBhcmUgZXF1aXZhbGVudC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7Kn0gb3RoZXIgVGhlIG90aGVyIHZhbHVlIHRvIGNvbXBhcmUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHZhbHVlcyBhcmUgZXF1aXZhbGVudCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0ID0geyAnYSc6IDEgfTtcbiAqIHZhciBvdGhlciA9IHsgJ2EnOiAxIH07XG4gKlxuICogXy5lcShvYmplY3QsIG9iamVjdCk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5lcShvYmplY3QsIG90aGVyKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5lcSgnYScsICdhJyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5lcSgnYScsIE9iamVjdCgnYScpKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5lcShOYU4sIE5hTik7XG4gKiAvLyA9PiB0cnVlXG4gKi9cbmZ1bmN0aW9uIGVxKHZhbHVlLCBvdGhlcikge1xuICByZXR1cm4gdmFsdWUgPT09IG90aGVyIHx8ICh2YWx1ZSAhPT0gdmFsdWUgJiYgb3RoZXIgIT09IG90aGVyKTtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBsaWtlbHkgYW4gYGFyZ3VtZW50c2Agb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIGBhcmd1bWVudHNgIG9iamVjdCxcbiAqICBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNBcmd1bWVudHMoZnVuY3Rpb24oKSB7IHJldHVybiBhcmd1bWVudHM7IH0oKSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0FyZ3VtZW50cyhbMSwgMiwgM10pO1xuICogLy8gPT4gZmFsc2VcbiAqL1xudmFyIGlzQXJndW1lbnRzID0gYmFzZUlzQXJndW1lbnRzKGZ1bmN0aW9uKCkgeyByZXR1cm4gYXJndW1lbnRzOyB9KCkpID8gYmFzZUlzQXJndW1lbnRzIDogZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSwgJ2NhbGxlZScpICYmXG4gICAgIXByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwodmFsdWUsICdjYWxsZWUnKTtcbn07XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhbiBgQXJyYXlgIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBhcnJheSwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzQXJyYXkoWzEsIDIsIDNdKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQXJyYXkoZG9jdW1lbnQuYm9keS5jaGlsZHJlbik7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNBcnJheSgnYWJjJyk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNBcnJheShfLm5vb3ApO1xuICogLy8gPT4gZmFsc2VcbiAqL1xudmFyIGlzQXJyYXkgPSBBcnJheS5pc0FycmF5O1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGFycmF5LWxpa2UuIEEgdmFsdWUgaXMgY29uc2lkZXJlZCBhcnJheS1saWtlIGlmIGl0J3NcbiAqIG5vdCBhIGZ1bmN0aW9uIGFuZCBoYXMgYSBgdmFsdWUubGVuZ3RoYCB0aGF0J3MgYW4gaW50ZWdlciBncmVhdGVyIHRoYW4gb3JcbiAqIGVxdWFsIHRvIGAwYCBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIGBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUmAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYXJyYXktbGlrZSwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzQXJyYXlMaWtlKFsxLCAyLCAzXSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0FycmF5TGlrZShkb2N1bWVudC5ib2R5LmNoaWxkcmVuKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQXJyYXlMaWtlKCdhYmMnKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQXJyYXlMaWtlKF8ubm9vcCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0FycmF5TGlrZSh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgIT0gbnVsbCAmJiBpc0xlbmd0aCh2YWx1ZS5sZW5ndGgpICYmICFpc0Z1bmN0aW9uKHZhbHVlKTtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhIGJ1ZmZlci5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMy4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIGJ1ZmZlciwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzQnVmZmVyKG5ldyBCdWZmZXIoMikpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNCdWZmZXIobmV3IFVpbnQ4QXJyYXkoMikpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xudmFyIGlzQnVmZmVyID0gbmF0aXZlSXNCdWZmZXIgfHwgc3R1YkZhbHNlO1xuXG4vKipcbiAqIFBlcmZvcm1zIGEgZGVlcCBjb21wYXJpc29uIGJldHdlZW4gdHdvIHZhbHVlcyB0byBkZXRlcm1pbmUgaWYgdGhleSBhcmVcbiAqIGVxdWl2YWxlbnQuXG4gKlxuICogKipOb3RlOioqIFRoaXMgbWV0aG9kIHN1cHBvcnRzIGNvbXBhcmluZyBhcnJheXMsIGFycmF5IGJ1ZmZlcnMsIGJvb2xlYW5zLFxuICogZGF0ZSBvYmplY3RzLCBlcnJvciBvYmplY3RzLCBtYXBzLCBudW1iZXJzLCBgT2JqZWN0YCBvYmplY3RzLCByZWdleGVzLFxuICogc2V0cywgc3RyaW5ncywgc3ltYm9scywgYW5kIHR5cGVkIGFycmF5cy4gYE9iamVjdGAgb2JqZWN0cyBhcmUgY29tcGFyZWRcbiAqIGJ5IHRoZWlyIG93biwgbm90IGluaGVyaXRlZCwgZW51bWVyYWJsZSBwcm9wZXJ0aWVzLiBGdW5jdGlvbnMgYW5kIERPTVxuICogbm9kZXMgYXJlIGNvbXBhcmVkIGJ5IHN0cmljdCBlcXVhbGl0eSwgaS5lLiBgPT09YC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7Kn0gb3RoZXIgVGhlIG90aGVyIHZhbHVlIHRvIGNvbXBhcmUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHZhbHVlcyBhcmUgZXF1aXZhbGVudCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0ID0geyAnYSc6IDEgfTtcbiAqIHZhciBvdGhlciA9IHsgJ2EnOiAxIH07XG4gKlxuICogXy5pc0VxdWFsKG9iamVjdCwgb3RoZXIpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIG9iamVjdCA9PT0gb3RoZXI7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0VxdWFsKHZhbHVlLCBvdGhlcikge1xuICByZXR1cm4gYmFzZUlzRXF1YWwodmFsdWUsIG90aGVyKTtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgYEZ1bmN0aW9uYCBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBmdW5jdGlvbiwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzRnVuY3Rpb24oXyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0Z1bmN0aW9uKC9hYmMvKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzRnVuY3Rpb24odmFsdWUpIHtcbiAgaWYgKCFpc09iamVjdCh2YWx1ZSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgLy8gVGhlIHVzZSBvZiBgT2JqZWN0I3RvU3RyaW5nYCBhdm9pZHMgaXNzdWVzIHdpdGggdGhlIGB0eXBlb2ZgIG9wZXJhdG9yXG4gIC8vIGluIFNhZmFyaSA5IHdoaWNoIHJldHVybnMgJ29iamVjdCcgZm9yIHR5cGVkIGFycmF5cyBhbmQgb3RoZXIgY29uc3RydWN0b3JzLlxuICB2YXIgdGFnID0gYmFzZUdldFRhZyh2YWx1ZSk7XG4gIHJldHVybiB0YWcgPT0gZnVuY1RhZyB8fCB0YWcgPT0gZ2VuVGFnIHx8IHRhZyA9PSBhc3luY1RhZyB8fCB0YWcgPT0gcHJveHlUYWc7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSB2YWxpZCBhcnJheS1saWtlIGxlbmd0aC5cbiAqXG4gKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgaXMgbG9vc2VseSBiYXNlZCBvblxuICogW2BUb0xlbmd0aGBdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXRvbGVuZ3RoKS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHZhbGlkIGxlbmd0aCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzTGVuZ3RoKDMpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNMZW5ndGgoTnVtYmVyLk1JTl9WQUxVRSk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNMZW5ndGgoSW5maW5pdHkpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzTGVuZ3RoKCczJyk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0xlbmd0aCh2YWx1ZSkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09ICdudW1iZXInICYmXG4gICAgdmFsdWUgPiAtMSAmJiB2YWx1ZSAlIDEgPT0gMCAmJiB2YWx1ZSA8PSBNQVhfU0FGRV9JTlRFR0VSO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIHRoZVxuICogW2xhbmd1YWdlIHR5cGVdKGh0dHA6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1lY21hc2NyaXB0LWxhbmd1YWdlLXR5cGVzKVxuICogb2YgYE9iamVjdGAuIChlLmcuIGFycmF5cywgZnVuY3Rpb25zLCBvYmplY3RzLCByZWdleGVzLCBgbmV3IE51bWJlcigwKWAsIGFuZCBgbmV3IFN0cmluZygnJylgKVxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIG9iamVjdCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzT2JqZWN0KHt9KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0KFsxLCAyLCAzXSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdChfLm5vb3ApO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3QobnVsbCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc09iamVjdCh2YWx1ZSkge1xuICB2YXIgdHlwZSA9IHR5cGVvZiB2YWx1ZTtcbiAgcmV0dXJuIHZhbHVlICE9IG51bGwgJiYgKHR5cGUgPT0gJ29iamVjdCcgfHwgdHlwZSA9PSAnZnVuY3Rpb24nKTtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBvYmplY3QtbGlrZS4gQSB2YWx1ZSBpcyBvYmplY3QtbGlrZSBpZiBpdCdzIG5vdCBgbnVsbGBcbiAqIGFuZCBoYXMgYSBgdHlwZW9mYCByZXN1bHQgb2YgXCJvYmplY3RcIi5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBvYmplY3QtbGlrZSwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzT2JqZWN0TGlrZSh7fSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdExpa2UoWzEsIDIsIDNdKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0TGlrZShfLm5vb3ApO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzT2JqZWN0TGlrZShudWxsKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzT2JqZWN0TGlrZSh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgIT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUgPT0gJ29iamVjdCc7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhIHR5cGVkIGFycmF5LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMy4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgdHlwZWQgYXJyYXksIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc1R5cGVkQXJyYXkobmV3IFVpbnQ4QXJyYXkpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNUeXBlZEFycmF5KFtdKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbnZhciBpc1R5cGVkQXJyYXkgPSBub2RlSXNUeXBlZEFycmF5ID8gYmFzZVVuYXJ5KG5vZGVJc1R5cGVkQXJyYXkpIDogYmFzZUlzVHlwZWRBcnJheTtcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IG9mIHRoZSBvd24gZW51bWVyYWJsZSBwcm9wZXJ0eSBuYW1lcyBvZiBgb2JqZWN0YC5cbiAqXG4gKiAqKk5vdGU6KiogTm9uLW9iamVjdCB2YWx1ZXMgYXJlIGNvZXJjZWQgdG8gb2JqZWN0cy4gU2VlIHRoZVxuICogW0VTIHNwZWNdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLW9iamVjdC5rZXlzKVxuICogZm9yIG1vcmUgZGV0YWlscy5cbiAqXG4gKiBAc3RhdGljXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBtZW1iZXJPZiBfXG4gKiBAY2F0ZWdvcnkgT2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzLlxuICogQGV4YW1wbGVcbiAqXG4gKiBmdW5jdGlvbiBGb28oKSB7XG4gKiAgIHRoaXMuYSA9IDE7XG4gKiAgIHRoaXMuYiA9IDI7XG4gKiB9XG4gKlxuICogRm9vLnByb3RvdHlwZS5jID0gMztcbiAqXG4gKiBfLmtleXMobmV3IEZvbyk7XG4gKiAvLyA9PiBbJ2EnLCAnYiddIChpdGVyYXRpb24gb3JkZXIgaXMgbm90IGd1YXJhbnRlZWQpXG4gKlxuICogXy5rZXlzKCdoaScpO1xuICogLy8gPT4gWycwJywgJzEnXVxuICovXG5mdW5jdGlvbiBrZXlzKG9iamVjdCkge1xuICByZXR1cm4gaXNBcnJheUxpa2Uob2JqZWN0KSA/IGFycmF5TGlrZUtleXMob2JqZWN0KSA6IGJhc2VLZXlzKG9iamVjdCk7XG59XG5cbi8qKlxuICogVGhpcyBtZXRob2QgcmV0dXJucyBhIG5ldyBlbXB0eSBhcnJheS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMTMuMFxuICogQGNhdGVnb3J5IFV0aWxcbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGVtcHR5IGFycmF5LlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgYXJyYXlzID0gXy50aW1lcygyLCBfLnN0dWJBcnJheSk7XG4gKlxuICogY29uc29sZS5sb2coYXJyYXlzKTtcbiAqIC8vID0+IFtbXSwgW11dXG4gKlxuICogY29uc29sZS5sb2coYXJyYXlzWzBdID09PSBhcnJheXNbMV0pO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gc3R1YkFycmF5KCkge1xuICByZXR1cm4gW107XG59XG5cbi8qKlxuICogVGhpcyBtZXRob2QgcmV0dXJucyBgZmFsc2VgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4xMy4wXG4gKiBAY2F0ZWdvcnkgVXRpbFxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy50aW1lcygyLCBfLnN0dWJGYWxzZSk7XG4gKiAvLyA9PiBbZmFsc2UsIGZhbHNlXVxuICovXG5mdW5jdGlvbiBzdHViRmFsc2UoKSB7XG4gIHJldHVybiBmYWxzZTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0VxdWFsO1xuIiwiLy8gVGhlIG1vZHVsZSBjYWNoZVxudmFyIF9fd2VicGFja19tb2R1bGVfY2FjaGVfXyA9IHt9O1xuXG4vLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcblx0dmFyIGNhY2hlZE1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF07XG5cdGlmIChjYWNoZWRNb2R1bGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiBjYWNoZWRNb2R1bGUuZXhwb3J0cztcblx0fVxuXHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuXHR2YXIgbW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXSA9IHtcblx0XHRpZDogbW9kdWxlSWQsXG5cdFx0bG9hZGVkOiBmYWxzZSxcblx0XHRleHBvcnRzOiB7fVxuXHR9O1xuXG5cdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuXHRfX3dlYnBhY2tfbW9kdWxlc19fW21vZHVsZUlkXShtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuXHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG5cdG1vZHVsZS5sb2FkZWQgPSB0cnVlO1xuXG5cdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG5cdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbn1cblxuIiwiX193ZWJwYWNrX3JlcXVpcmVfXy5nID0gKGZ1bmN0aW9uKCkge1xuXHRpZiAodHlwZW9mIGdsb2JhbFRoaXMgPT09ICdvYmplY3QnKSByZXR1cm4gZ2xvYmFsVGhpcztcblx0dHJ5IHtcblx0XHRyZXR1cm4gdGhpcyB8fCBuZXcgRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcblx0fSBjYXRjaCAoZSkge1xuXHRcdGlmICh0eXBlb2Ygd2luZG93ID09PSAnb2JqZWN0JykgcmV0dXJuIHdpbmRvdztcblx0fVxufSkoKTsiLCJfX3dlYnBhY2tfcmVxdWlyZV9fLm5tZCA9IChtb2R1bGUpID0+IHtcblx0bW9kdWxlLnBhdGhzID0gW107XG5cdGlmICghbW9kdWxlLmNoaWxkcmVuKSBtb2R1bGUuY2hpbGRyZW4gPSBbXTtcblx0cmV0dXJuIG1vZHVsZTtcbn07IiwiLy8gc3RhcnR1cFxuLy8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4vLyBUaGlzIGVudHJ5IG1vZHVsZSBpcyByZWZlcmVuY2VkIGJ5IG90aGVyIG1vZHVsZXMgc28gaXQgY2FuJ3QgYmUgaW5saW5lZFxudmFyIF9fd2VicGFja19leHBvcnRzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKFwiLi9zcmMvaW5kZXguanNcIik7XG4iXSwic291cmNlUm9vdCI6IiJ9 \ No newline at end of file diff --git a/src/utilities/element-utilities-extender-factory.js b/src/utilities/element-utilities-extender-factory.js index 25fe15d..8649650 100644 --- a/src/utilities/element-utilities-extender-factory.js +++ b/src/utilities/element-utilities-extender-factory.js @@ -860,6 +860,7 @@ module.exports = function () { const widthPerChar = 6; const tilingPaddingVertical = 15; const tilingPaddingHorizontal = 15; + const multimerOffset = 6; cy.startBatch(); @@ -960,6 +961,9 @@ module.exports = function () { const regulatorMultimer = regulator.multimer; let xPosOfRegulator = processPosition.x; + if (regulatorMultimer.enabled && orientation === "horizontal") { + xPosOfRegulator -= multimerOffset; + } let yPosOfRegulator = processPosition.y - ((processHeight / 2) + (regulatorHeight / 2) + edgeLength); nodePosition = { @@ -1027,6 +1031,7 @@ module.exports = function () { const processPortsOrdering = orientation === "vertical" ? "T-to-B" : "L-to-R"; const minInfoboxDimension = 20; const widthPerChar = 6; + const multimerOffset = 6; cy.startBatch(); @@ -1101,6 +1106,9 @@ module.exports = function () { const regulatorEdgeType = regulator.edgeType; let xPosOfRegulator = processPosition.x; + if (regulatorMultimer.enabled && orientation === "horizontal") { + xPosOfRegulator -= multimerOffset; + } let yPosOfRegulator = processPosition.y - ((processHeight / 2) + (regulatorHeight / 2) + edgeLength); nodePosition = { @@ -1168,6 +1176,7 @@ module.exports = function () { const processPortsOrdering = orientation === "vertical" ? "T-to-B" : "L-to-R"; const minInfoboxDimension = 20; const widthPerChar = 6; + const multimerOffset = 6; cy.startBatch(); @@ -1321,6 +1330,9 @@ module.exports = function () { const regulatorName = regulator.name; const regulatorType = regulator.type; let xPosOfRegulator = processPosition.x; + if (regulatorMultimer.enabled && orientation === "horizontal") { + xPosOfRegulator -= multimerOffset; + } let yPosOfRegulator = processPosition.y - ((processHeight / 2) + (regulatorHeight / 2) + edgeLength); nodePosition = { @@ -1397,11 +1409,11 @@ module.exports = function () { const regulatorHeight = defaultRegulatorProperties.height || 50; const processPosition = elementUtilities.convertToModelPosition({x: cy.width() / 2, y: cy.height() / 2}); const tilingPaddingVertical = 15; - const tilingPaddingHorizontal = 15; const edgeLength = 30; const processLeftSideEdgeType = reversible ? "production" : "consumption"; const processRightSideEdgeType = "production"; const processPortsOrdering = orientation === "vertical" ? "T-to-B" : "L-to-R"; + const multimerOffset = 6; cy.startBatch(); if (!elementUtilities.getMapType()) { @@ -1494,6 +1506,9 @@ module.exports = function () { const regulatorName = regulator.name; const regulatorType = regulator.type; let xPosOfRegulator = processPosition.x; + if (regulatorMultimer.enabled && orientation === "horizontal") { + xPosOfRegulator -= multimerOffset; + } let yPosOfRegulator = processPosition.y - ((processHeight / 2) + (regulatorHeight / 2) + edgeLength); let nodePosition = {